使用WinDbg調試入門(內核模式)


windbg是一個內核模式和用戶模式調試器,包含在Windows調試工具中。這里我們提供了一些實踐練習,可以幫助您開始使用windbg作為內核模式調試器。

設置內核模式調試

內核模式調試環境通常有兩台計算機:主機和目標計算機。調試器在主機上運行,正在調試的代碼在目標計算機上運行。主機和目標通過調試電纜連接。Windows調試程序支持以下類型的電纜進行調試:

  • Ethernet
  • USB 2.0
  • USB 3.0
  • 1394
  • Serial (also called null modem)
如果目標計算機運行的是Windows8或更高版本,則可以使用任何類型的調試電纜,包括以太網。此圖說明通過以太網電纜連接調試的主機和目標計算機。
 

如果目標計算機運行的Windows版本早於Windows 8,則不能使用以太網進行調試;必須使用USB、1394或串行。此圖說明了通過USB、1394或串行調試電纜連接的主機和目標計算機。

建立內核模式調試會話

在設置好主機和目標計算機並用調試電纜將它們連接起來之后,您可以按照用於設置的同一主題中的說明建立內核模式調試會話。例如,如果您決定設置主機和目標計算機以通過以太網進行調試,參考《通過網線手動設置內核模式調試》。同樣,如果您決定設置主機和目標計算機以通過USB 2.0進行調試,您可以找到建立內核模式調試會話的說明,參考《通過USB 2.0電纜手動設置內核模式調試

開始調試

1、在主機上,打開windbg並與目標計算機建立內核模式調試會話。

2、在windbg中,從幫助菜單中選擇內容。這將打開調試器文檔chm文件。調試程序文檔也可以在這里在線獲得。

3、當建立內核模式調試會話時,windbg可能會自動進入目標計算機。如果windbg尚未插入,請從“調試”菜單中選擇“中斷”。

4、在windbg窗口底部附近的命令行中,輸入以下命令:

 

符號搜索路徑告訴windbg在哪里查找符號(pdb)文件。調試器需要符號文件來獲取有關代碼模塊(函數名、變量名等)的信息。輸入此命令,通知windbg執行符號文件的初始查找和加載:

.reload

5、查看加載模塊的列表,請輸入以下命令:

lm

6、讓目標計算機運行,請輸入以下命令:g

7、要再次打斷,請從“調試”菜單中選擇“打斷”。

8、輸入此命令以檢查NT模塊中的_FILE_OBJECT

dt nt!_FILE_OBJECT

 

9、輸入此命令檢查NT模塊中的某些符號:

x nt!*CreateProcess*

10、輸入此命令以在MmCreateProcessAddressSpace:處放置斷點:

bu nt!MmCreateProcessAddressSpace

輸入 g 讓目標機運行

11、如果目標計算機沒有立即進入調試器,請在目標計算機上執行一些操作(例如,打開記事本)。調用mmcreateProcessAddressSpace時,目標計算機將進入調試器。要查看堆棧跟蹤,請輸入以下命令:

.reload

k

12、在“視圖”菜單上,選擇“反匯編”。

在“調試”菜單上,選擇“跳過”(或按F10)。在觀察反匯編窗口時,再輸入幾次STEP命令。

13、通過輸入以下命令清除斷點: bc *

輸入g讓目標計算機運行。 從“調試”菜單中選擇“中斷”或按Ctrl-Break再次中斷。

14、查看所有進程的列表,請輸入以下命令: !process 0 0

15、復制一個進程的地址,然后輸入以下命令:!process Address 2

 For example: !process ffffe00000d5290 2

 

16、復制一個線程的地址,然后輸入以下命令:!thread Address

 For example: !thread ffffe00000e6d080

 

 17、查看即插即用設備樹中的所有設備節點,請輸入以下命令: !devnode 0 1

 

18、查看設備節點及其硬件資源,請輸入以下命令:!devnode 0 9

19、查看服務名稱為磁盤的設備節點,請輸入以下命令:!devnode 0 1 disk

 

20、復制devnode 0 1輸出顯示節點的物理設備對象(PDO)的地址,然后輸入以下命令: !devstack PdoAddress

For example: PdoAddress!devstack 0xffffe00001159610

21、獲取有關driver disk.sys的信息,請輸入以下命令:!drvobj disk 2

 

22、drvobj的輸出顯示調度例程的地址:例如,classpnp!類別全局顯示。要在ClassGlobalDispatch上設置和驗證斷點,請輸入以下命令: bu CLASSPNP!ClassGlobalDispatch bl

輸入g讓目標計算機運行。 如果目標計算機沒有立即進入調試器,請在目標計算機上執行一些操作(例如,打開記事本並保存文件)。調用ClassGlobalDispatch時,目標計算機將進入調試器。要查看堆棧跟蹤,請輸入以下命令:.reload k

23、結束調試會話,請輸入以下命令:qd


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM