日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5.OD-条件断点、条件记录断点

發(fā)布時(shí)間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.OD-条件断点、条件记录断点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下演示如何下條件斷點(diǎn):

在調(diào)試過程中,經(jīng)常希望斷點(diǎn)滿足一定條件時(shí)才中斷,這類斷點(diǎn)稱為條件斷點(diǎn),

在OD的幫助文檔有詳細(xì)的說明:

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

用OD打開Conditional_bp.exe,在0040147c,按shift+F2設(shè)置條件斷點(diǎn):

輸入表達(dá)式eax == 040000,這樣如果eax為0400000h,OD將中斷,

用OD幫助文檔解釋下:

040000- 所有整數(shù)常量都認(rèn)為是十六進(jìn)制的,除非后面跟了點(diǎn)

EAX - 寄存器EAX的內(nèi)容,解釋為無符號數(shù)

(2)按存儲器條件中斷

先看下CreateFileA函數(shù):

[cpp]?view plaincopy
  • HANDLE?WINAPI?CreateFile(??
  • ??__in??????????LPCTSTR?lpFileName,//指向文件名的指針??
  • ??__in??????????DWORD?dwDesiredAccess,??
  • ??__in??????????DWORD?dwShareMode,??
  • ??__in??????????LPSECURITY_ATTRIBUTES?lpSecurityAttributes,??
  • ??__in??????????DWORD?dwCreationDisposition,??
  • ??__in??????????DWORD?dwFlagsAndAttributes,??
  • ??__in??????????HANDLE?hTemplateFile??
  • );??
  • 運(yùn)行Conditional_bp.exe,對CreateFileA設(shè)斷,單擊OpenTest按鈕,斷下來,在堆棧窗口單擊右鍵,執(zhí)行Address/Relative to ESP(地址/相對于ESP)菜單:

    則堆棧窗口最左邊標(biāo)識了各參數(shù)相對于當(dāng)前ESP的地址:

    假設(shè)當(dāng)CreateFile打開"c:\\1212.txt"時(shí)實(shí)現(xiàn)中斷,則shift+F2

    鍵入字符 [STRING[esp+4]] =="c:\\1212.txt"

    用OD幫助文檔解釋下:

    [esp+4] - 在地址esp+4處的無符號雙字內(nèi)容

    STRING [123456] - 以地址123456作為開始,以零作為結(jié)尾的ASCII字符串。中括號是必須的,因?yàn)槟@示內(nèi)存的內(nèi)容
    [STRING 123456]=="Brown fox" - 如果從地址0x00123456開始的內(nèi)存為ASCII字符串"Brown fox"、"BROWN FOX JUMPS"、 "brown fox???",或類似的串,那么其值為1。比較不區(qū)分大小寫和文本長度

    EAX=="Brown fox" - 同上,EAX按指針對待。

    UNICODE [EAX]=="Brown fox" - OllyDbg認(rèn)為EAX是一個(gè)指向UNICODE串的指針,并將其轉(zhuǎn)換為ASCII,然后與文本常量進(jìn)行比較

    運(yùn)行,斷了下來

    ?也可直接在CMD框中輸入bp CreateFileA,[STRING[esp+4]]=="c:\\1212.txt"(注意CreateFileA大小寫別錯(cuò)了,中間有無逗號沒有影響)

    如果是UNICODE,就用[UNICODE[ESP+4]]=="c:\\1212.txt"

    ?

    OD條件斷點(diǎn)BUG:

    [cpp]?view plaincopy
  • 首先我們看一下?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??
  • );??

  • ?從上面我們可以看出第一個(gè)參數(shù)就是文件名指針,也就是說這個(gè)參數(shù)中存放的就是文件名稱的地址。在32位程序中調(diào)用這個(gè)函數(shù)時(shí)這個(gè)參數(shù)的堆棧地址就應(yīng)該是esp+4(4×8=32),同理,下一個(gè)參數(shù)就應(yīng)該是esp+8。其它類推,返回值是esp+0。我們現(xiàn)在要判斷文件名,這里的文件名就是esp+4地址所指向的地址中的內(nèi)容。取地址中的內(nèi)容在OD中用雙方括號來操作,如取esp+4中的內(nèi)容就該寫成這樣:[esp+4]。現(xiàn)在我們?nèi)〉腫esp+4]中的內(nèi)容還是個(gè)地址,所以要得到文件名則還要再取這個(gè)地址中的內(nèi)容,就該這樣:[[esp+4]]。而那個(gè)STRING前綴在OD中的解釋是以零作為結(jié)尾的ASCII字符串。所以我們下條件斷點(diǎn)時(shí)這樣寫:
    bp CreateFileA,[STRING [esp+4]]=="abcdefghigklmn"
    但卻發(fā)現(xiàn)斷不下來,寫成這樣:
    bp CreateFileA,[[STRING [esp+4]]]=="abcdefghigklmn"
    才能斷下來,這里就應(yīng)該是三層的地址了。為什么這樣目前尚不清楚

    ?

    以下演示條件記錄斷點(diǎn)

    條件記錄斷點(diǎn)除了具有條件斷點(diǎn)作用,還能記錄斷點(diǎn)處函數(shù)表達(dá)式或參數(shù)的值,也可以設(shè)置通過斷點(diǎn)的次數(shù),每次符合暫停條件時(shí),計(jì)數(shù)器減一

    如要記錄Conditional_bp.exe調(diào)用CreateFileA函數(shù)的情況,在CreateFileA函數(shù)的第一行,按Shift+F4鍵,出現(xiàn)條件記錄窗口:

    ?在Condition(條件)域中輸入要設(shè)置的條件表達(dá)式,

    Explanation(說明)域中由用戶自己設(shè)置一個(gè)名稱,Expression(表達(dá)式)域中是要記錄的內(nèi)容的條件,只能設(shè)置一個(gè)表達(dá)式,如填的是[ESP+4},則要選擇"Pointer to ASCII String",才能正確打印出字符串,

    Pause program是指OD遇到斷點(diǎn)時(shí)是否中斷,Log value of expression是指遇到斷點(diǎn)時(shí)是否記錄表達(dá)式的值, Log function arguments是指遇到斷點(diǎn)時(shí)是澡記錄函數(shù)參數(shù),

    Never(從不),On condition(按條件),Always(永遠(yuǎn))等條件

    總結(jié)

    以上是生活随笔為你收集整理的5.OD-条件断点、条件记录断点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。