2014-01-23 58 views
2

我最近研究了用於調試器實現的Windows API函數。 現在我知道如何基本上調試程序並讀取程序內存。我也發現處理某些「調試事件」的函數,例如斷點(根據我的理解,它們是函數調用,它們植入要由編譯器調試的程序中)。如何實現程序動畫(在調試器中一步一步執行/單步執行)? (例如在VSC++中)

但是,我沒有看到任何功能,可以使調試程序逐步通過一個程序(無論是逐個指令或逐行)。

我真的好奇這件事,任何幫助將非常感激!

預先感謝您!

Rafael

+0

1.在下一條邏輯線上創建斷點。 2.恢復執行。 3.刪除斷點。 –

+0

這將需要調試器在每條指令後更改程序代碼(內存中的圖像)。我正在尋找的東西可能會告訴操作系統或處理器在每條指令後發出異常或中斷。 –

回答

3

x86處理器具有所謂的硬件斷點。基本上,你可以設置一個特定的寄存器。當程序計數器達到存儲在寄存器中的值時,程序中斷並控制給調試器。請參閱此簡要說明以獲得更好的理解。 http://en.wikipedia.org/wiki/X86_debug_register

+1

+1所有非平凡處理器都具有此功能。緩存/流水線/多核/等意味着僅軟件斷點不可行。 –

+0

@MartinJames - 恩,謝謝。之前我不知道,但由於你提到的原因,這很有道理。我甚至不想去想在這樣的環境中試圖插入INT3(或者相當於)所有地方的地獄。 o_O – enhzflep

+0

謝謝!這是我正在尋找的。 –

4

x86有TF,跟蹤標誌。在這種模式下,每條指令都會生成一個INT 1。這意味着您不必一直調整硬件斷點寄存器。