为了账号安全,请及时绑定邮箱和手机立即绑定

调试器如何工作?

调试器如何工作?

慕神8447489 2019-12-07 15:54:37
我一直想知道调试器如何工作?特别是可以“附加”到已经运行的可执行文件的程序。我知道编译器会将代码翻译成机器语言,但是调试器如何“知道”它所附加的内容?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

据我了解:


对于x86上的软件断点,调试器将指令的第一个字节替换为CC(int3)。这是WriteProcessMemory在Windows上完成的。当CPU到达该指令并执行时int3,这将导致CPU生成调试异常。OS接收到此中断,意识到正在调试进程,并通知调试器进程已命中断点。


击中断点并停止过程后,调试器将在其断点列表中查找,并将替换为CC原来存在的字节。调试器套TF,所述陷阱标志中EFLAGS(通过修改CONTEXT),并且继续处理。陷阱标志使CPU INT 1在下一条指令上自动生成一个单步异常()。


当要调试的进程下一次停止时,调试器再次将断点指令的第一个字节替换为CC,然后该进程继续。


我不确定这是否是所有调试器完全实现的方法,但是我编写了一个Win32程序,该程序可以使用此机制进行自我调试。完全没用,但是很有教育意义。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信