5.OD-条件断点、条件记录断点
以下演示如何下條件斷點:
在調試過程中,經常希望斷點滿足一定條件時才中斷,這類斷點稱為條件斷點,
在OD的幫助文檔有詳細的說明:
(1)按寄存器條件中斷:
用OD打開Conditional_bp.exe,在0040147c,按shift+F2設置條件斷點:
輸入表達式eax == 040000,這樣如果eax為0400000h,OD將中斷,
用OD幫助文檔解釋下:
040000- 所有整數常量都認為是十六進制的,除非后面跟了點
EAX - 寄存器EAX的內容,解釋為無符號數
(2)按存儲器條件中斷
先看下CreateFileA函數:
[cpp]?view plaincopy運行Conditional_bp.exe,對CreateFileA設斷,單擊OpenTest按鈕,斷下來,在堆棧窗口單擊右鍵,執行Address/Relative to ESP(地址/相對于ESP)菜單:
則堆棧窗口最左邊標識了各參數相對于當前ESP的地址:
假設當CreateFile打開"c:\\1212.txt"時實現中斷,則shift+F2
鍵入字符 [STRING[esp+4]] =="c:\\1212.txt"
用OD幫助文檔解釋下:
[esp+4] - 在地址esp+4處的無符號雙字內容
STRING [123456] - 以地址123456作為開始,以零作為結尾的ASCII字符串。中括號是必須的,因為您要顯示內存的內容
[STRING 123456]=="Brown fox" - 如果從地址0x00123456開始的內存為ASCII字符串"Brown fox"、"BROWN FOX JUMPS"、 "brown fox???",或類似的串,那么其值為1。比較不區分大小寫和文本長度
EAX=="Brown fox" - 同上,EAX按指針對待。
UNICODE [EAX]=="Brown fox" - OllyDbg認為EAX是一個指向UNICODE串的指針,并將其轉換為ASCII,然后與文本常量進行比較
運行,斷了下來
?也可直接在CMD框中輸入bp CreateFileA,[STRING[esp+4]]=="c:\\1212.txt"(注意CreateFileA大小寫別錯了,中間有無逗號沒有影響)
如果是UNICODE,就用[UNICODE[ESP+4]]=="c:\\1212.txt"
?
OD條件斷點BUG:
[cpp]?view plaincopy
?從上面我們可以看出第一個參數就是文件名指針,也就是說這個參數中存放的就是文件名稱的地址。在32位程序中調用這個函數時這個參數的堆棧地址就應該是esp+4(4×8=32),同理,下一個參數就應該是esp+8。其它類推,返回值是esp+0。我們現在要判斷文件名,這里的文件名就是esp+4地址所指向的地址中的內容。取地址中的內容在OD中用雙方括號來操作,如取esp+4中的內容就該寫成這樣:[esp+4]。現在我們取的[esp+4]中的內容還是個地址,所以要得到文件名則還要再取這個地址中的內容,就該這樣:[[esp+4]]。而那個STRING前綴在OD中的解釋是以零作為結尾的ASCII字符串。所以我們下條件斷點時這樣寫:
bp CreateFileA,[STRING [esp+4]]=="abcdefghigklmn"
但卻發現斷不下來,寫成這樣:
bp CreateFileA,[[STRING [esp+4]]]=="abcdefghigklmn"
才能斷下來,這里就應該是三層的地址了。為什么這樣目前尚不清楚
?
以下演示條件記錄斷點
條件記錄斷點除了具有條件斷點作用,還能記錄斷點處函數表達式或參數的值,也可以設置通過斷點的次數,每次符合暫停條件時,計數器減一
如要記錄Conditional_bp.exe調用CreateFileA函數的情況,在CreateFileA函數的第一行,按Shift+F4鍵,出現條件記錄窗口:
?在Condition(條件)域中輸入要設置的條件表達式,
Explanation(說明)域中由用戶自己設置一個名稱,Expression(表達式)域中是要記錄的內容的條件,只能設置一個表達式,如填的是[ESP+4},則要選擇"Pointer to ASCII String",才能正確打印出字符串,
Pause program是指OD遇到斷點時是否中斷,Log value of expression是指遇到斷點時是否記錄表達式的值, Log function arguments是指遇到斷點時是澡記錄函數參數,
Never(從不),On condition(按條件),Always(永遠)等條件
總結
以上是生活随笔為你收集整理的5.OD-条件断点、条件记录断点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.OD-调试示例1
- 下一篇: 6.OD-Run trace /Hit