斷點類型有哪些?
斷點的種類
CC 斷點
又叫 int3/F2 斷點,軟件執行 int3 指令時程序就會暫停,int3 指令的機器碼就是CC。設置完 CC 斷點后,原本位置的機器碼會被調試器改成 0xCC(并對原來的數據備份),程序執行到 0xCC 時程序就會暫停(調試器所為)。
所以也就是說如果在沒有調試器的情況下如果我們程序里有 0xCC,程序也不會暫停。
優點:可以設置無數個
缺點:容易被檢測到
內存斷點
分為:
(1)內存執行斷點
把機器碼當成程序執行時被斷下。
(2)內存寫入斷點
改寫這部分機器碼時被斷下。
(3)內存訪問斷點
訪問 = 執行 | 寫入。
設置內存斷點后,調試器會在你下斷點的內存頁增加一個 PAGE_NOACCESS 屬性,這個屬性會把當前內存頁設為禁止任何形式的訪問,如果進行訪問會觸發一個內存訪問異常,之后調試器會捕獲這個異常,判斷這個異常觸發的位置和你下斷點的位置是否一樣,一樣則接管異常并暫停程序運行,不一樣則放行。
優點:相比 CC 斷點,不容易被檢測到。
缺點:只能設置一個(新設置的內存斷點會覆蓋原有的內存斷點),在調試器中沒有對應的記錄窗口,程序重新加載后消失。
硬件斷點
在寄存器中,有這么一些寄存器,它們用于調試。人們把他們稱為調試寄存器,調試寄存器一共有8個名字分別從Dr0-Dr7。
Dr0-Dr3 存放中斷的地址,Dr4,Dr5一般不使用(保留),Dr6,Dr7 記錄在 Dr0-Dr3 中下斷的地址的屬性。
硬件斷點最不容易被斷下,分為三種:
(1)硬件執行斷點。
(2)硬件寫入斷點。
(3)硬件訪問斷點。
硬件斷點生效時他會先執行符合條件的代碼,執行完后才停下,而內存斷點和CC斷點在即將執行符合條件的代碼處被斷下。
優點:更難被檢測,程序重新加載后不消失。
缺點:只能設置有限的個數,
條件斷點
達到設置的條件時才觸發的斷點(某種自己設置的邏輯表達式)。
條件記錄斷點
條件記錄斷點除了具有條件斷點作用,還能記錄斷點處函數表達式或參數的值,也可以設置通過斷點的次數,每次符合暫停條件時,計數器減一。
你可以在一個被反復調用的函數段首下條件記錄斷點。篩選每一次調用傳入的參數,在合適的時機斷下。
消息斷點
消息斷點是對條件記錄斷點的應用,是針對一個特殊函數:winproc函數的 Message 參數設置的件記錄斷點 。
windows是基于消息的操作系統,每一個消息都按照相同的格式被寫入一個結構體,這個結構體叫MSG。消息發生后windows把該結構體傳給WinProc函數,用它來執行消息處理功能。
可以在W窗口中,針對程序窗體消息設置消息斷點。