-
-
[原创]调试器设计_单步调试
-
发表于: 2009-9-10 11:28 4611
-
调试器的单步调试很多地方都有用到,比如,下一个int3断点后,在程序被抛出异常被调试器捕捉后,为了让程序继续运行下去,就需要设置EIP,并且改回断点原来的数据。然后,单步调试程序,在EIP到下一个指令的时候,又一次将断点位置的数据改成int3.
下单步的方法很简单:
获取线程(GetThreadContext)然后lpcontext.EFlags|=0x100;,在SetTreadContext就可以了,但是每次都会被cpu清零,如果要继续单步,需要再次设置。
还有需要小心的是,硬件断点在没有其他特殊处理的话,是作为一个单步异常抛出的(EXCEPTION_SINGLE_STEP),如果调试器有硬件断点功能,但是,有没有专门的处理代码,那么,在EXCEPTION_SINGLE_STEP里面,至少需要对调试寄存器的值清零。否则,程序将反复在硬件断点地址来回运行。
其他小问题还是很多,就不多说了。
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-3-3 05:35
伟叔叔
为你点赞~
2024-1-4 05:46
QinBeast
为你点赞~
2023-12-31 00:27
一笑人间万事
为你点赞~
2023-11-9 00:54
shinratensei
为你点赞~
2023-11-6 00:00
心游尘世外
为你点赞~
2023-10-4 05:08
飘零丶
为你点赞~
2023-9-27 00:57
赞赏
看原图
赞赏
雪币:
留言: