我一直想知道調試器如何工作?特別是可以“附加”到已經運行的可執行文件的程序。我知道編譯器會將代碼翻譯成機器語言,但是調試器如何“知道”它所附加的內容?
3 回答

至尊寶的傳說
TA貢獻1789條經驗 獲得超10個贊
據我了解:
對于x86上的軟件斷點,調試器將指令的第一個字節替換為CC(int3)。這是WriteProcessMemory在Windows上完成的。當CPU到達該指令并執行時int3,這將導致CPU生成調試異常。OS接收到此中斷,意識到正在調試進程,并通知調試器進程已命中斷點。
擊中斷點并停止過程后,調試器將在其斷點列表中查找,并將替換為CC原來存在的字節。調試器套TF,所述陷阱標志中EFLAGS(通過修改CONTEXT),并且繼續處理。陷阱標志使CPU INT 1在下一條指令上自動生成一個單步異常()。
當要調試的進程下一次停止時,調試器再次將斷點指令的第一個字節替換為CC,然后該進程繼續。
我不確定這是否是所有調試器完全實現的方法,但是我編寫了一個Win32程序,該程序可以使用此機制進行自我調試。完全沒用,但是很有教育意義。
- 3 回答
- 0 關注
- 474 瀏覽
添加回答
舉報
0/150
提交
取消