OD 條件斷點 條件記錄斷點

2021-07-09 10:16:39 字數 3445 閱讀 8099

以下演示如何下條件斷點:

在除錯過程中,經常希望斷點滿足一定條件時才中斷,這類斷點稱為條件斷點,

在od的幫助文件有詳細的說明:

(1)按暫存器條件中斷:

用od開啟conditional_bp.exe,在0040147c,按shift+f2設定條件斷點:

輸入表示式eax == 040000,這樣如果eax為0400000h,od將中斷,

用od幫助文件解釋下:

040000- 所有整數常量都認為是十六進製制的,除非後面跟了點

eax - 暫存器eax的內容,解釋為無符號數

(2)按儲存器條件中斷

先看下createfilea函式:

[cpp]view plain

copy

handle winapi createfile(  

__in          lpctstr lpfilename,//指向檔名的指標

假設當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 plain

copy

首先我們看一下 createfilea 在 msdn 中的解釋:  

handle createfile(  

lpctstr lpfilename,          // pointer to name of the file

dword dwdesiredaccess,       // access (read-write) mode

dword dwsharemode,           // share mode

lpsecurity_attributes lpsecurityattributes,  

// pointer to security attributes

dword dwcreationdisposition,  // how to create

dword dwflagsandattributes,  // file attributes

handle htemplatefile         // handle to file with attributes to 

// copy

);  

從上面我們可以看出第乙個引數就是檔名指標,也就是說這個引數中存放的就是檔名稱的位址。在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(永遠)等條件

od 的條件斷點學習心的

我只說步驟 假如你想在createfilea處,當filename c aaa bbb 1.txt 斷下程式 0384fe7c 0061742d call to createfilea from qqhelper.00617427 0384fe80 02e6a278 filename c aaa b...

OD硬體斷點,OD記憶體斷點,API斷點

一.設定硬體寫入斷點 9 i0 b m a8 8 w8 u f q q r w0 s,k9 h s.2 l w1 d8 r8 j a 0 v4 o r q at r p a l y h 在指定位址進行反 彙編 g m d q e d b,a l x x 7 l h.r d t8 k1 4 follo...

gdb 條件斷點

gdb 條件斷點 1.有時候,我們需要斷點在迴圈的某個條件處時,比如以下 include int main int argc,char argv return 0 2.開始編譯 cc g main.c將生成a.out 3.開始斷點 gdb a.out l l命令用於檢視 4.通過以上命令可以看到 m...