WinDbg 10大除錯命令

2021-04-30 17:16:19 字數 2213 閱讀 3949

u: 反編譯機器碼

在檢查crash dump是否正確時,你已經用過了此命令,u命令有三種格式:

1.u 從位址開始反編譯8個機器碼。

2.u 反編譯到之間的所有機器碼。

3.u 不提供任何引數時,從上次u命令停止的位置開始反編譯。

當然,反編譯打段**是十分厭煩的,但如果你只想知道在特定位址發生的事情,那這是最便捷的方法。或許u命令最令人感興趣的特性是它可以解析**引用到的符號----即使是目標模組沒有匯出的符號。

db,dw和dd:dump memory bytes、words和dwords

如果你當前感興趣的記憶體資料是二進位制的,那麼偵錯程式的16進製制轉儲命令將能完成此任務。根據你對源位址(source address)資料型別的判斷,來選擇dd(針對bytes)、dw(針對words)、dd(針對dwords)。

1.db 將指定記憶體範圍裡的資料顯示為兩個部分:左邊是16進製表示(每2個8 bit一組),右邊是對應的asci碼。

2. dw 僅按照16進製制顯示(16 bit一組)

3. dw 僅按照16進製制顯示(32 bit一組)

此組命令可以使用與u命令相同的引數。注意,所指示的位址內容,也會被顯示出來。如果沒有任何引數,將顯示接下來的128個位元組。

x:檢查符號

x命令非常重要。它可以根據已安裝的符號檔案建立乙個列表。典型的使用方式如下:

1.x *!* 顯示所有可用符號的模組。在啟動後,預設只有ntoskrnl.exe的符號是可用的。其他模組的符號可以使用.reload命令來載入。

2.x !顯示模組的符號檔案中的符號名稱,可以包括萬用字元?和*。必須屬於x *!*列出的模組名。例如,x nt!*將列出在核心符號檔案ntoskrnl.dbg中找到的所有符號,x win32k!*將列出win32k.dbg提供的符號。如果偵錯程式報告說「couldn』t resolv『x….』」,嘗試用.reload再次載入所有的符號檔案。

3.x 顯示所有可用符號的乙個子集,該子集不匹配表示式。本質上,這是x !的乙個變形,在這裡!被省略了。隨符號名一起顯示的,還有與其相關的虛擬位址。對於函式名,與其對應的就是函式的入口位址。對於變數,就是改變量的基位址。該命令值得的注意的地方是,它可以輸出很多內部符號(internal symbols),這些在可執行檔案的匯出表中都是找不到的.

ln:列出最近的符號!processfield:列出eprocess的成員

該命令前的!號,意味著它來自於偵錯程式的擴充套件模組―kdextx86.dll。該命令可顯示核心用來代表乙個程序的eprocess結構(該結構並沒有正式的說明文件)的成員及其偏移量。

儘管該命令僅列出了成員的偏移量,但你也能很容易的猜出其正確的型別。例如,lockevent位於0x70處,其下乙個成員的偏移量為0x80。則該成員占用了16個位元組,這與kevent結構非常類似。

!threadfields:列出ethread成員

這是kdextx86.dll提供的另乙個強大的選項。和!processfields類似,它列出未文件化的ethread結構的成員及其偏移量。核心使用它表示乙個執行緒.

!drivers:列出已載入的drivers

kdextx86.dll真是太棒了。!drivers列出了當前執行的核心和檔案系統模組的詳細資訊。如果檢查crash dump,該命令會列出系統崩潰那一刻的系統狀態。示例1-3是我機器上輸出的摘要。注意,在輸出的最後一行,導致windows 2000崩潰的driver的位址為0xbecc2000,這顯然是w2k_kill.sys引發藍屏後顯示的位址。

注:在新的i386kd.exe(ver: 6.3.0017.0)中,!driver命令已不被支援。取而代之的是lm命令。該命令的一般用法是:lm t n

!sel:檢查selector的值

!sel實現於kdextx86.dll。它用來顯示16個連續的memory selector(按位址公升序排列)。你可以反覆的使用此命令直到出現「selector is invalid」。在第4章將討論memory selector,到時我會提供乙個示列**來演示如何在你的程式中crack selectors。

注:在新的偵錯程式中,該命令已不被支援,取而代之的是:dg命令。其一般性用法為:dg.注意末尾的.符號。dg命令最多可列出256個selector。偵錯程式的online help中有詳細說明

WinDBG常用除錯命令

查詢符號 3.檢視 event 物件的訊號狀態 object basenamedobjects dt b nt kevent xx 4.檢視 lasterror 值 gle 5.指定進製形式,0x 0n 0t 0y 分別表示 16 10 8 2 進製 0x12345678 0n10 evaluate...

WinDbg常用除錯命令

寫在前面的話 除錯當然可以用windbg,樓主發現先用debugdiagnostictool來分析更棒。但是樓主發現1.2版的debugdiag有advanced analysis,但2.0版本又沒有了,非常不解,看來只能用1.2版本。分析前先設定pdb路徑,tools options and se...

Android 十大除錯方法

2011 22 19 1 dump虛擬記憶體 cat proc x maps 虛擬記憶體的位置可能有如下地方 核心的defconfig檔案 build core prelink linux arm.map build tools apriori prelinkmap.c bionic linker ...