OD裡SHIFT F4條件斷點用法篇

2021-06-19 10:36:02 字數 2829 閱讀 3270

先說一點   alt+l 看記錄~

在某條語句上按了shift+f4後出現了個對話方塊,

1)第一行是"條件": 要輸入的肯定是你感興趣的條件啦,比如說下面的倆句

0041150 push eax

0041151 call [translatemessage]

你在0041150處下條件記錄中斷,假如這時候你要是想知道esi等不等於0,那就可以設定條件 esi==0 或esi!=0 反正是關於esi的條件了而不是只能利用這行的eax. 當然一樣可以在0041150處下斷追訊息,比如說你想知道按了 老滑鼠移動訊息,那麼就設定 msg==wm_mousemove 或是 msg==0200(移動的數字**). 有人該問了,訊息記錄好象應該在下一行有函式的下斷才正確吧?其實不一定非要在傳遞訊息的那行0041151下斷的,但在那行下斷的好處是可以記錄到函式引數,這在下面會講到~   

"條件"這的書寫是按照 masm32彙編的形式書寫的,比如 == !=   > <

2)"說明"="表達"

"解碼表示式的值"

"說明"就是個注釋啦,添不添無所謂了,除非你下的記錄中斷比較多,這樣在記錄裡能看的明白~  

"表達"其實就是我們記錄的核心啦,程式在我們第1小條裡的"條件"為真的時候,就會記錄我們在"表達"裡填的內容,比如說esi==0的時候,我們記錄 [eax+4]的值

反正是你感興趣的內容啦,若是想記錄訊息就添 msg 啦,很多時候我們只添了"條件"而沒有添"表達",程式中斷後就會顯示"未知的函式或識別符號!",這就是原因了.

至於下面的"解碼表示式的值"你可以隨便選了,他不過是把記錄後的資料又分析了一下, 比如說我們記錄了[eax+4]的值是 201   ,那麼當你選"資訊**(wm_***)"的時候那麼你在記錄(alt+l看記錄)裡看到的就是被分析成了 201 wm_lbuttondown

當你選"布林數值",那麼記錄裡數值201後面就會跟個 true了,其實就是od對這個資料按照我們選擇的型別又進行了一次分析而已~~

3)暫停程式 =>   永不     條件滿足時   永遠  

這三個選擇就是條件為真記錄表達的時候程式暫不暫停程式,那就看你除錯的需要了~

4)記錄表示式的值 =>   永不     條件滿足時   永遠

呵呵,要是選"永不",那麼我們設立記錄"表達"還有啥意義啊, 若是選"永遠",那麼條件似乎不就沒意義了,因為記錄的時候已經不管條件了,只要執行到這就記錄表達.不過好象也可以利用的,自己去想想啦..我不說.

一般都是選"條件滿足"啦.

5)記錄函式引數 =>   永不     條件滿足時   永遠

這個要是你下在沒函式的那行,那麼這行就變灰了~~     記錄函式的引數很有意義啊,直接可以看到很多資訊,我們比如說在有函式的那行下條件記錄."條件"是 eax==0   "表達"是 [eax+4],然後在這選擇記錄函式引數在"條件滿足時";當然你若只想記錄執行到此處的函式引數,那麼就空著"條件"和"表達"吧,同時3)和4)的選擇也要變為"永不"了...也許你在記錄了啥也看不到,因為執行到這行可能eax總不=0 ,那麼好換換 eax>0 ,好象看了到一堆,然後還有pmsg=***x   hw=***x,這就是執行到這裡這個函式的引數啦~~   我們也可以記錄 creatfilea 函式,那麼就知道都開啟什麼檔案了~~

6) "執行次數":0為無限次

7) "如果程式暫停,發動如下引數到外掛程式中..."

我不會,我就會上面那些,希望高手給補充一下,好讓我們這些菜鳥學學~~

注意一點: 我們在od選單"檢視"=>"視窗"裡也可以用老滑鼠右鍵給視窗過程下訊息斷點,下完後你可以用shiff_f4開啟那個訊息斷點,發現它其實就是條件記錄斷點的一種形式而已~~~

舉個例子吧:

比如說乙個程式要求註冊,點後出現乙個註冊視窗那麼我們就要對點註冊按鈕下斷,看看它之後執行了什麼~~

註冊視窗如果是對話方塊,那麼肯定要用函式 creatdialoparam或dialogboxparam 若你對這倆函式都不了解的話,那就去看

看書吧...首先用od裡的外掛程式"視窗工具"獲得註冊按鈕的標識(即id),比如說是0422,記錄下來備用啦~,

在od裡對這倆函式下斷,然後執行程式,讓註冊視窗顯示就會中斷,od裡看堆疊,此函式的第4個引數pdlgproc就是對話方塊的過程入口了,這裡是0041b0b0是入口

去對話方塊入口處,shift+f4,在"條件"裡輸入 [esp+8]==0111 && [esp+c]==0422

"表達"可以空著,暫停程式在"條件滿足時"

又該問了,為什麼這麼寫? 請記住: 由於是過程呼叫,肯定要先向堆疊裡壓資料的,也就是標準說法:傳遞引數! 對於對話況過程或視窗過程,執行到入口處的時候堆疊內肯定壓入的是msg訊息結構的資料,那麼 [esp+8]正好是wm_***訊息,由於點了按鈕我們肯定要抓的是wm_command訊息 也就是111啦,這個不明白去看書~ [esp+c]是wparam引數,就是視窗的id號了,這個條件就是當你按下了id為422的註冊按鈕的時候中斷,接下來你就可以單步看了~~     當然,你用視窗工具的時候也能看到按鈕的子視窗控制代碼,這時候 {esp+10]就是它的數值了,也一樣可以代替 {esp+c]==0422的條件了.其實都一樣的,

友人該說了,不會用工具怎麼辦啊,那就直接在過程入口下shift+f4啦,條件和表達都空著,只選記錄函式引數,那麼就能得到一堆記錄了,找到顯示有 wm_command的訊息,把他的內容裡的id做為[esp+c]==的數值,乙個個試啦

vs2008 條件斷點

先設定乙個普通斷點。斷下來的時候再設定它的條件。如下圖 在breakpoints視窗中找到這個斷點,右鍵選擇condition 如下圖 輸入條件,這樣就會在這個條件成立的時候,才觸發斷點。有時候想知道乙個指標什麼時候被改變了。可以用這種方法。先在指標處斷下來。如下圖 然後在watch視窗檢視 指標變...

4 條件查詢

dql語言 二 條件查詢 1.基本語法 select 查詢列表 from 表名where 篩選條件 執行步驟依次是 先 from 表名 再 where 篩選條件 最後 select 查詢列表 去顯示符合條件的字段列表.2.篩選條件的分類 一 按條件表示式篩選 基礎條件運算子 ps 也是表示 不等於 ...

python學習(4)條件判斷

if 條件判斷1 執行1 elif 條件判斷2 執行2 elif 條件判斷3 執行3 else 執行4 相對於c,不需要在if後加括號,但是需要在條件後面加冒號,else後面也要加。其次是else if變為了elif 這是因為input 返回的資料型別是str,str不能直接和整數比較,必須先把st...