首页
社区
课程
招聘
[原创]调试器设计_单步调试
发表于: 2009-9-10 11:28 4593

[原创]调试器设计_单步调试

2009-9-10 11:28
4593

调试器的单步调试很多地方都有用到,比如,下一个int3断点后,在程序被抛出异常被调试器捕捉后,为了让程序继续运行下去,就需要设置EIP,并且改回断点原来的数据。然后,单步调试程序,在EIP到下一个指令的时候,又一次将断点位置的数据改成int3.

下单步的方法很简单:

获取线程(GetThreadContext)然后lpcontext.EFlags|=0x100;,在SetTreadContext就可以了,但是每次都会被cpu清零,如果要继续单步,需要再次设置。

还有需要小心的是,硬件断点在没有其他特殊处理的话,是作为一个单步异常抛出的(EXCEPTION_SINGLE_STEP),如果调试器有硬件断点功能,但是,有没有专门的处理代码,那么,在EXCEPTION_SINGLE_STEP里面,至少需要对调试寄存器的值清零。否则,程序将反复在硬件断点地址来回运行。

其他小问题还是很多,就不多说了。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//