WinDbg学习笔记六 - 内核调试配置

内核调试可以分为三种情况: 本机内核调试,双机内核调试 - 真机双机内核调试,虚拟机双机内核调试。本篇将介绍本机内核调试以及虚拟机内核调试的配置。


本机内核调试配置

本机内核调试功能比较单一,只能读写内存,没有基本的单步断点等功能, 可以主要用来查看系统内核信息比如内核结构定义,反汇编内核函数,内核HOOK等等。目前主要是通过WinDbg自带的kldbgdrv.sys驱动调用nt!KdSystemDebugControl函数来提供支持。


通过命令运行windbg -kl, 或者界面进入本机内核调试,界面步骤如下,

打开File -> Kernel Debug, 在显示的窗口里选择Local页面,

WinDbg学习笔记六 - 内核调试配置

点击OK,如果出现以下窗口,请按照上面提示的命令bcdedit -debug on来打开DEBUG功能,然后重启。

WinDbg学习笔记六 - 内核调试配置


重启后再次进入内核调试,如下,

WinDbg学习笔记六 - 内核调试配置


虚拟机双机内核调试配置

这里以VMWare作为虚拟机软件来演示如何设置双机调试。

1. 虚拟机创建串口Serial Port

在VMWare里打开创建好的虚拟机设置,

WinDbg学习笔记六 - 内核调试配置

在设置窗口,如果没有已经存在的串口, 点底部的添加按钮添加一个串口。

WinDbg学习笔记六 - 内核调试配置


像上图输入相关的设置,注意名字格式一定是\\.\pipe\开头。


在虚拟机运行的时候可以查看串口是否正确连接,

WinDbg学习笔记六 - 内核调试配置


2. 设置好串口后,打开虚拟机添加调试启动项。

用管理员模式打开命令行,输入bcdedit,会显示当前的启动信息。

WinDbg学习笔记六 - 内核调试配置


接下来创建一个DEBUG的调试项,输入bcdedit /copy {default} /d WINDBG

WinDbg学习笔记六 - 内核调试配置


对新的启动项做一些配置,bcdedit /set  {6e83d4f2-6331-11e1-bc4a-afedf740f526} debugtype SERIAL DEBUGPORT:2 BAUDRATE:115200  (注意DEBUGPORT是2,因为第一步串口是2)

WinDbg学习笔记六 - 内核调试配置


打开DEBUG选项,bcdedit /debug  {6e83d4f2-6331-11e1-bc4a-afedf740f526} on

WinDbg学习笔记六 - 内核调试配置


也可以运行msconfig通过UI来修改,

WinDbg学习笔记六 - 内核调试配置


关闭虚拟机。

3. 打开WinDBG, 点开File->Kernel Debug, 在第一项COM里做如下配置,然后停在这个页面。

或者也可以通过命令行运行,windbg -d -k com:pipe,port=\\.\pipe\VMWinDbg,baud=115200

WinDbg学习笔记六 - 内核调试配置


4. 重启虚拟机,在选择启动项的时候停下,点第三步OK按钮开始等待虚拟机连接。


WinDbg学习笔记六 - 内核调试配置


WinDbg学习笔记六 - 内核调试配置


选择WINDBG启动项,回到WinDbg窗口就会看到虚拟机的信息。

WinDbg学习笔记六 - 内核调试配置


另外对于VMWare,也有一款辅助的加速调试工具,vmkd,如果速度慢的话可以试一下。