斷點
軟體斷點
軟體斷點的本質是**改寫,即:將int 3(**為0xcc)指令替換到斷點所在指令處(第乙個位元組),並儲存被替換掉的**(即乙個位元組內容)。等執行到斷點處時,偵錯程式將因斷點而中斷,並將被替換的一位元組內容恢復到原記憶體中。其原理和**補丁是一樣的。
原始碼或彙編模式下,最簡單的斷點設定方式,是定位到正確的**處,並按下f9鍵。此外還有三種設定軟體斷點的指令,分別講解如下:
bp:
命令bp是breakpoint的縮寫。其指令格式如下:
bp[id] [options] [address [passes]]["commandstring"]
引數address表示需設定斷點的位址,預設情況下使用當前指令指標(eip)的位址。id是斷點號,一般不手動設定,由偵錯程式內部編號。passes是乙個整數值,即第幾次經過斷點所在**時,偵錯程式才需要中斷執行,預設為1,即每次都中斷。commandstring用來設定一組命令,當斷點發生的時候,就執行這一組命令,比如可以把它設定為「k」,這樣斷點處就會輸出當前的呼叫棧。
options是一組可選開關項,有下面幾種:
/1:即阿拉伯數字1。這個選項表明這個被設定的斷點只會在第一次有效,此後斷點資訊即被刪除。
/t:這個開關項後跟乙個ethread結構體指標,只能用在核心除錯環境下。此開關項與/p起到類似的作用,只不過前者定位到程序,後者更進一步定位到執行緒。
/c與/c:c或者c代表callstack(呼叫棧)。這兩個開關項和呼叫棧深度有關,都後跟乙個整數值。前者表示呼叫棧深度如果小於這個整數值,斷點才會引發中斷,後者表示呼叫棧深度如果大於這個整數值,斷點才會引發中斷。
bu:
此命令格式與bp類似,u代表了unresolved。使用此命令設定的斷點雖登記到偵錯程式,但它具體對應到哪處**或指令,尚未確定。
比如某exe程式使用動態載入的方式載入dll(使用函式loadlibrary()),那麼當dll尚未載入時,就可用bu指令設定dll中的**斷點,等到dll載入時,偵錯程式再正式落實此斷點。
bm:
§ bm /a ntdll!ntcreate*file
則諸如ntcreatefile\ntcreatemailslotfile\ntcreatenamedpipefile等函式都將被設定斷點。
斷點。硬體斷點
硬體斷點的原理和軟體斷點完全不同,硬體斷點是通過cpu的斷點暫存器來實現的,亦即依靠硬體方式實現。由於cpu的除錯暫存器數量是有限的,所以能設定的硬體斷點數量也是有限的。設定硬體斷點的命令是ba,a代表了address。指令格式如下:
ba[id] access size [options] [address [passes]]["commandstring"]
引數id、options、passes及commandstring,含義與前文bp指令相同,此處不述。
引數address是記憶體位址,有別於前文的指令位址,記憶體位址既可以是指令位址,也可以是資料位址。預設為當前指令暫存器位址(eip)。引數size表示位址長度,x86系統可選值為1、2、4,x64系統可選值為1、2、4、8。需要注意的是,address位址必須對齊到size,即address值必須是size的整數倍。引數access是記憶體訪問型別,有下面幾種:
e:作為指令執行;r:讀,或者寫;w:寫;i:執行in/out操作。 比如:
§ ba r4 @ebp-0×08
位址@ebp-8一定是乙個區域性變數位址,所以當cpu對這個區域性變數執行讀寫操作時,將引發硬體中斷。
其他操作
其他的斷點操作包括:顯示斷點列表、禁止或恢復斷點、刪除斷點等。
§ bl:列出所有斷點
§ bd:禁止斷點,d代表disable。如bd 1,禁止斷點1。斷點被禁止後將不起作用,但亦未刪除。
§ be:恢復斷點,e代表enable。恢復被禁止的斷點。如be 1恢復1號斷點。
§ bc:清除斷點,如:bc 1,清除斷點1;bc *,清除全部斷點。
§ br:序號管理,r代表renumber,即重新排序。如:br 2 0,將2號斷點重設為0號斷點。
Windbg除錯異常
用windbg分析包含異常資訊的dump檔案時,往往當前棧幀已不正確,可通過如下步驟找回 1 teb,找到stackbase和stacklimit 2 通過.cxr命令將異常上下文恢復到相關暫存器 如何找到異常上下文的位址呢?方法一 dds dps dqs stacklimit stackbase ...
windbg除錯技巧
1 64位機器上執行32位程式得到的dump,需要先進行轉換 load wow64exts sw2 載入符號表 系統符號表 srv d mylocalsymbols 吵雜模式符號匹配 有時候 沒大改,但重編了導致之前的pdb沒有了 符號載入,吵雜模式 強制匹配符號 symopt 0x40 sym n...
windbg雙機除錯
1 雙機除錯設定 環境 主機 win10 虛擬機器 win xp sp3 windbg preview pipe管道鏈結 我機子新增了環境變數居然沒用,所以每次都得設定路徑 symfix c mysymbols sym noisy reload2 符號包無法reload 解決方案 看雪大佬說通過設定...