天天看点

使用Windbg调试内核

<a href="http://blog.pfan.cn/xman/44320.html">http://blog.pfan.cn/xman/44320.html</a>

Windbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。

Debugging Tools for Windows 32-bit Version 

Symbol Packages,安装到D:\Program Files\Symbols 

3.启动Windbg,File-&gt;Symbol File Path填写以上Symbols安装路径:

D:\Program Files\Symbols

4.File-&gt;Kernel Debug-&gt;Local,在下面执行lkd&gt; !process出现以下错误:

NT symbols are incorrect, please fix symbols

       这个可能是D:\Program Files\Symbols\exe\ntoskrnl.pdb破损所致。

解决方案:将第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,如果找不到,则自动从MS的Symbol

Server上下载所需要的Symbol,并且在本地D:\Program Files\Symbols文件夹下维持一份拷贝。 

5.内核调试

FileàOpenExecutableà可以选择一个可执行文件进行调试;

FileàAttache to a Processà可以选择一个运行中的进程,并对其进行调试;

FileàKernel DebugàLocalà可以选择本地内核调试。

一旦连接到了内核调试模式中,你可以使用众多的内核扩展命令(以“!”开头)来显示内核数据结构的内容。

6.用内核扩展命令查看常见内核对象数据结构(每条命令以分号隔开)

(1)进程:lkd&gt; !process [0 0];dt nt!_eprocess;dt

nt!_kprocess;

(2)线程:lkd&gt; !thread;dt nt!_ethread;dt

nt!_kthread;

(3)I/O请求包:lkd&gt;

dt nt!_irp;!irpfind;

(4)常见同步对象:lkd&gt;

dt nt!_kevent;lkd&gt;

dt nt!_kmutant;lkd&gt;

dt nt!_ksemaphore;

(5)作业:lkd&gt; !job;会话(lkd&gt;

!session);内存管理(lkd&gt; !vm)的命令等。

显示内核符号中所包含的类型信息的内核结构列表àlkd&gt;

dt nt!_*,若需递归显示子结构请使用“-r”开关。在.hh后面添加关键字,将显示该命令的帮助,例如:lkd&gt;.hh

irp。

详情参考:Debugging Tools For Windows help referenceàDebuggersàDebugger

ReferenceàDebugger Extension Commands。

下图是内核模式调试显示I/O完成端口IO_COMPLETION_CONTEXT数据结构和进程控制块。

有兴趣的可以参考以下文章,进一步学习Debugging Tools for Windows.

《Windbg配置和使用基础》

<a href="http://hi.baidu.com/estellejiang/blog/item/34d308fab249078a9f514638.html">http://hi.baidu.com/estellejiang/blog/item/34d308fab249078a9f514638.html</a>

《使用Windbg调试程序》

<a href="http://hi.baidu.com/cppiod/blog/item/58efaf86eb696d3f67096ec2.html">http://hi.baidu.com/cppiod/blog/item/58efaf86eb696d3f67096ec2.html</a>

《用Windbg调试一个Windows自带扫雷程序的逻辑bug》

<a href="http://blog.csdn.net/v_jzho/archive/2008/10/03/3014681.aspx">http://blog.csdn.net/v_jzho/archive/2008/10/03/3014681.aspx</a>

《windbg调试实例(4)--句柄泄露》

<a href="http://www.cnblogs.com/vivilisa/archive/2009/04/16/1437529.html">http://www.cnblogs.com/vivilisa/archive/2009/04/16/1437529.html</a>

继续阅读