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