原理简介

要使用Windbg进行内核级调试,必须进行双机调试配置,因为​被调试的对象是整个虚拟机操作系统内核,而不仅仅是其中的某个应用程序或进程。

配置虚拟机的管道串口

使用VMware制作Windows10虚拟机,安装完成后进入编辑虚拟机设置,若存在打印机则将其移除(因为打印机占用了com_1端口,而后续双机通信要使用的就是com_1端口)。然后点击下方的添加,添加串行端口,选择使用命名的管道并输入\\.\pipe\com_1,剩下两项保持默认的该端是服务器另一端是应用程序,勾选I/O模式中的轮询时主动放弃CPU,最后点击确定。

此处展示本人已配置好的设置

配置被调试机的管道串口

在虚拟机中以管理员身份运行命令行,依次输入如下指令:

1
bcdedit /dbgsettings serial baudrate:115200 debugport:1 #设置端口com_1, baudrate为115200
1
bcdedit /copy {current} /d DebugEntry #复制一个开机选项, 以进入OS的debug模式,需要记住此时的ID号
1
bcdedit /displayorder {current} {上一步得到的ID号} #在引导菜单中增加一个新的选项
1
bcdedit /debug {上一步得到的ID号} ON #激活debug

配置好之后效果如下图所示

配置WinDbg的管道串口

为Windbg创建一个桌面快捷方式,然后在属性中的目标一栏中内容的双引号后面追加

1
-b -k com:pipe,port=\\.\pipe\com_1,resets=0`

下载符号表

创建一个名为_NT_SYMBOL_PATH的系统环境变量,srv*d:\ctftools\symbols*http://msdl.microsoft.com/download/symbols,其中*d:\ctftools\symbols*是缓存符号表的位置,可自行更改。

开始调试

重启虚拟机,在开机选项中选择BebugEntry

同时开启Windbg,其就能检测到被调试的对象,即可开始调试