常用的斷點有int 3斷點、硬體斷點、記憶體斷點等。
一、int 3斷點
詳細介紹參考《int 3 軟中斷指令》一文。
二、硬體斷點
1. 硬體斷點與drx除錯暫存器有關
2)dr4~dr5:保留,未公開具體作用;
3)dr6:除錯暫存器組狀態暫存器;
4)dr7:除錯暫存器組控制暫存器。
2. 硬體斷點的原理
使用4個除錯暫存器(dr0~dr3)來設定位址,dr7來設定狀態。最多只能設定4個斷點。
3. 硬體斷點設定和取消
1)設定:右擊需要設定的**行,選擇「斷點/硬體執行」命令;
2)取消:單擊選單「除錯/硬體斷點」,在彈出的硬體斷點面板中進行刪除操作。
4. 硬體斷點的優缺點
1)優點:速度快,在int 3容易被發現的地方,使用硬體斷點來代替會有很好的效果;
2)缺點:最多只能使用4個斷點。
三、記憶體斷點
1. 包括:記憶體寫入斷點和記憶體訪問斷點;
2.原理:
對所設的位址設為不可訪問/不可寫屬性,這樣當訪問/寫入的時候就會產生異常,ollydbg截獲異常後比較異常位址是不是斷點位址,如果是就中斷。
3. 優缺點
1)優點:記憶體斷點不修改原**。不會像int 3斷點那樣,因為修改**被程式校驗而導致中斷失敗,因此在遇到**校驗,並且硬體斷點失靈情況下,可以用記憶體斷點來代替。
四、 記憶體訪問一次性斷點
1. 設定方法
在od中按「alt + m」開啟記憶體視窗,然後在要設定斷點的段(.data , .text等)上按f2或者右擊選擇「在訪問上設定斷點」命令。
2.特點
該斷點是一次性斷點,當所在段被讀取或執行時就中斷,中斷發生以後,斷點將被刪除。
3.用途
用來捕捉呼叫或返回到某個模組(如,脫殼時該類斷點就非常有用)。
4. 與記憶體訪問斷點的區別
與記憶體訪問斷點的功能一樣,但是記憶體訪問斷點不是一次性斷點。
五、訊息斷點
1. 定義
訊息斷點使得當某個特定視窗函式接收到某個特定訊息時程式中斷。
2. 設定訊息斷點
1)必須有個視窗(由定義可知),一般是輸入序列號的視窗;
2)單擊選單「檢視/視窗」開啟視窗介面,選擇要設定訊息斷點的物件,右擊,在彈出的選單中選擇「在classproc上設定訊息斷點」,在彈出的視窗中選擇相應的訊息型別即可;
3. 從系統**段返回使用者領空的方法:對應用程式的**段.text區塊(注意可能有多個.text區一定要選應用程式的.text區)設定記憶體斷點。
六、條件斷點
1. 定義
1)在除錯過程中,經常希望斷點滿足一定條件時才中斷,這類斷點稱為條件斷點;
2)條件斷點是乙個帶有條件表示式的普通int 3斷點;
2. 原理
當偵錯程式遇到條件斷點時,它將計算表示式的值,如果結果非零或者表示式無效,則斷點生效,被除錯程式暫停執行。
3. 常見設定條件斷點的物件:暫存器、儲存器、訊息等。
4. 設定條件斷點的方法
1)按條件斷點的快捷鍵「shift + f2」開啟條件斷點設定視窗,輸入條件;
2)在命令列直接輸入條件斷點語句,如bp 401476 eax == 040000。(前提是已經安裝了命令列外掛程式)
七、條件記錄斷點
1. 定義
條件記錄斷點除了具有條件斷點作用,還能記錄斷點處函式表示式或引數的值。
2. 快捷鍵
「shift + f4」開啟條件記錄斷點視窗。
WinDBG常用斷點命令
windbg提供了多種設斷點的命令 還bu 可以對還不能識別的符號設定斷點,當系統中有新模組載入進來時,偵錯程式會對未定斷點再次進行識別,如果找到了匹配的符號則會設定它。而bp 斷點會失敗 因為函式位址不存在 bu 斷點則可以成功。新版的windbg中 bp失敗後會自動被轉成bu 以上三個命令是對 ...
WinDBG常用斷點命令
windbg提供了多種設斷點的命令 還bu 可以對還不能識別的符號設定斷點,當系統中有新模組載入進來時,偵錯程式會對未定斷點再次進行識別,如果找到了匹配的符號則會設定它。而bp 斷點會失敗 因為函式位址不存在 bu 斷點則可以成功。新版的windbg中 bp失敗後會自動被轉成bu 以上三個命令是對 ...
PHP常用除錯打斷點
php專案開發過程中,經常要自測各種返回資料,這就經常用到了 error log這個函式 我常用的 error log print r parameters,true n 3,tmp myerror.log 語法 error log message,type,destination,headers ...