OD断点大全
OD斷點[Breakpoints]
?
OllyDbg支持數種不同類型的斷點:
?
一般斷點[Ordinary breakpoint], 將您想中斷的命令的第一個字節,用一個特殊命令INT3(調試器陷阱)來替代。您可以在反匯編窗口中選中要設斷點的指令行并按下 F2 鍵就可以設定一個此類型的斷點。也可以在快捷菜單中設置。再次按下 F2 鍵時,斷點將被刪除。注意,程序將在設斷指令被執行之前中斷下來。
INT3斷點的設置數量是沒有限制的。當您關閉被調試程序或者調試器的時候,OllyDbg將自動把這些斷點保存到硬盤中,永遠不要試圖在數據段或者指令的中間設置這種斷點,如果您試圖在代碼段以外設置斷點,
OllyDbg將會警告。您可以在安全選項[Security options]中永遠關閉這個提示,在某些情況下調試器會插入自帶的臨時INT3斷點。
?
條件斷點[Conditional breakpoint] (快捷鍵 Shift+F2) 是一個帶有條件表達式的普通INT3斷點。當調試器遇到這類斷點時,它將計算表達式的值,如果結果非零或者表達式無效,將暫停被調試程序,當然,由條件為假的斷點引起的開銷是非常高的(主要歸因于操作系統的反應時間)。在Windows NT、奔騰Ⅱ/450處理器環境下OllyDbg每秒最多處理2500個條件為假的斷點。條件斷點的一個典型使用情況就是在Windows
消息上設置斷點(比如 WM_PAINT)。為此,您可以將偽變量 MSG 同適當的參數說明聯合使用。如果窗口被激活,參考一下后面的消息斷點描述。
?
條件記錄斷點?[Conditional logging breakpoint] (Shift+F4)是一種條件斷點,每當遇到此類斷點或者滿足條件時,它將記錄已知函數表達式或參數的值。例如,您可以在一些窗口過程函數上設置記錄斷點并列出對該函數的所有調用。或者只對接收到的WM_COMMAND消息標識符設斷,或者對創建文件的函數(CreateFile)設斷,并且記錄以只讀方式打開的文件名等,記錄斷點和條件斷點速度相當,并且從記錄窗口中瀏覽上百條消息要比按上百次F9輕松的多,您可以為表達式選擇一個預先定義好的解釋說明。
您可以設置通過的次數 - 每次符合暫停條件時,計數器就會減一。如果通過計數在減一前,不等于零,OllyDbg就會繼續執行。如果一個循環執行100次(十進制),在循環體內設置一個斷點,并設置通過次數為99
(十進制)。OllyDbg將會在最后一次執行循環體時暫停。
另外,條件記錄斷點允許您傳遞一個或多個命令給插件[plugins]。例如,您需要使用命令行插件改變一個寄存器的內容,然后繼續執行程序。
?
消息斷點[Message breakpoint]和條件記錄斷點基本相同,除了OllyDbg會自動產生一個條件,這個條件允許在窗口過程的入口處設置某些消息(比如WM_PSINT)斷點,您可以在窗口[Windows]中設置它。
?
跟蹤斷點[Trace breakpoint] 是在每個選中命令上設置的一種特殊的INT3斷點。如果您設置了Hit跟蹤[hit trace] ,斷點會在命令執行后移除,并在該地址處做一個標記。如果您使用的是Run跟蹤[run trace] ,OllyDbg會添加跟蹤數據記錄并且斷點仍然是保持激活狀態。
?
內存斷點[Memory breakpoint] OllyDbg每一時刻只允許有一個內存斷點。您可以在反匯編窗口、CPU窗口、數據窗口中選擇一部分內存,然后使用快捷菜單設置內存斷點。如果有以前的內存斷點,將被自動刪除。您有兩個選擇:在內存訪問(讀,寫,執行)時中斷,或內存寫入時中斷。設置此類斷點時,OllyDbg將會改變所選部分的內存塊的屬性。在與80x86兼容的處理器上將會有4096字節的內存被分配并保護起來。即使您僅僅選擇了一個字節,OllyDbg 也會將整個內存塊都保護起來。這將會引起大量的錯誤警告,請小心使用此類斷點。某些系統函數(特別是在Windows95/98下)在訪問受保護的內存時不但不會產生調試事件反而會造成被調試程序的崩潰。
?
硬斷點[Hardware breakpoint](僅在Windows ME,NT或2000下可用)在80x86兼容的處理器上,允許您設置4個硬件斷點。和內存斷點不同,硬件斷點并不會降低執行速度,但是最多只能覆蓋四個字節。在單步執行或者跟蹤代碼時,OllyDbg能夠使用硬斷點代替INT3斷點。
?
內存訪問一次性斷點[Single-shot break on memory access] (僅在Windows NT或2000下可用)。您可以通過內存窗口的快捷菜單(或按F2),對整個內存塊設置該類斷點。當您想捕捉調用或返回到某個模塊時,該類斷點就顯得特別有用。中斷發生以后,斷點將被刪除。
?
暫停Run跟蹤[Run trace pause] (快捷鍵:Ctrl+T)是在每一步Run跟蹤[run trace] 時都要檢查的一個條件集.您可以在EIP進入某個范圍或超出某個范圍時暫停,某個條件為真時暫停,或者命令與指定的模式匹配時暫停,或者當命令可疑的時候暫停。注意,這一選擇會極大的(高達20%)降低Run跟蹤的速度。
?
OllyDbg也可以在一些調試事件[debugging events]上暫停程序執行。比如加載或卸載DLL,啟動或終止線程,或者程序發出調試字符串的時候。
?
總結