使用Windbg調試內核

[原文:http://blog.pfan.cn/xman/44320.html]html

Windbg是微軟開發的免費源碼級調試工具。Windbg能夠用於Kernel模式調試和用戶模式調試,還能夠調試Dump文件。session

1.http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx下載Install Debugging Tools for Windows 32-bit Version 數據結構

2.http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx下載Windows Symbol Packages,安裝到D:\Program Files\Symbols 工具

3.啓動Windbg,File->Symbol File Path填寫以上Symbols安裝路徑:學習

D:\Program Files\Symbolsspa

4.File->Kernel Debug->Local,在下面執行lkd> !process出現如下錯誤:.net

NT symbols are incorrect, please fix symbols線程

       這個多是D:\Program Files\Symbols\exe\ntoskrnl.pdb破損所致。debug

解決方案:將第3步中的Symbol File Path填寫爲:調試

D:\Program Files\Symbols;

SRV*D:\Program Files\Symbols*http://msdl.microsoft.com/download/symbols

按照這樣設置,WinDbg將先從本地文件夾D:\Program Files\Symbols中查找Symbol,若是找不到,則自動從MSSymbol Server上下載所須要的Symbol,而且在本地D:\Program Files\Symbols文件夾下維持一份拷貝。 

5.內核調試

FileàOpenExecutableà能夠選擇一個可執行文件進行調試;
FileàAttache to a Processà能夠選擇一個運行中的進程,並對其進行調試;

FileàKernel DebugàLocalà能夠選擇本地內核調試。

一旦鏈接到了內核調試模式中,你能夠使用衆多的內核擴展命令(以「!」開頭)來顯示內核數據結構的內容。

6.用內核擴展命令查看常見內核對象數據結構(每條命令以分號隔開)

(1)進程:lkd> !process [0 0]dt nt!_eprocessdt nt!_kprocess

(2)線程:lkd> !threaddt nt!_ethreaddt nt!_kthread

(3)I/O請求包:lkd> dt nt!_irp!irpfind

(4)常見同步對象:lkd> dt nt!_kevent;lkd> dt nt!_kmutant;lkd> dt nt!_ksemaphore

(5)做業:lkd> !job會話(lkd> !session);內存管理(lkd> !vm)的命令等。

顯示內核符號中所包含的類型信息的內核結構列表àlkd> dt nt!_*若需遞歸顯示子結構請使用「-r」開關。在.hh後面添加關鍵字,將顯示該命令的幫助,例如:lkd>.hh irp

詳情參考:Debugging Tools For Windows help referenceàDebuggersàDebugger ReferenceàDebugger Extension Commands

下圖是內核模式調試顯示I/O完成端口IO_COMPLETION_CONTEXT數據結構和進程控制塊。

有興趣的能夠參考如下文章,進一步學習Debugging Tools for Windows.

Windbg配置和使用基礎》

http://hi.baidu.com/estellejiang/blog/item/34d308fab249078a9f514638.html

《使用Windbg調試程序》

http://hi.baidu.com/cppiod/blog/item/58efaf86eb696d3f67096ec2.html

《用Windbg調試一個Windows自帶掃雷程序的邏輯bug

http://blog.csdn.net/v_jzho/archive/2008/10/03/3014681.aspx

windbg調試實例(4--句柄泄露》

http://www.cnblogs.com/vivilisa/archive/2009/04/16/1437529.html

相關文章
相關標籤/搜索