猿问

调试器如何工作?

我一直想知道调试器如何工作?特别是可以“附加”到已经运行的可执行文件的程序。我知道编译器会将代码翻译成机器语言,但是调试器如何“知道”它所附加的内容?



慕神8447489
浏览 440回答 3
3回答

至尊宝的传说

据我了解:对于x86上的软件断点,调试器将指令的第一个字节替换为CC(int3)。这是WriteProcessMemory在Windows上完成的。当CPU到达该指令并执行时int3,这将导致CPU生成调试异常。OS接收到此中断,意识到正在调试进程,并通知调试器进程已命中断点。击中断点并停止过程后,调试器将在其断点列表中查找,并将替换为CC原来存在的字节。调试器套TF,所述陷阱标志中EFLAGS(通过修改CONTEXT),并且继续处理。陷阱标志使CPU INT 1在下一条指令上自动生成一个单步异常()。当要调试的进程下一次停止时,调试器再次将断点指令的第一个字节替换为CC,然后该进程继续。我不确定这是否是所有调试器完全实现的方法,但是我编写了一个Win32程序,该程序可以使用此机制进行自我调试。完全没用,但是很有教育意义。
随时随地看视频慕课网APP
我要回答