如何配置WinDbg和VMware实现内核的调试
设置 VMware 的虚拟串口
运行 VMware,首先将 Guest OS 系统电源关闭,这样才能修改该系统的虚拟机设置。
单击界面上的“编辑虚拟机设置”选项对虚拟机的属性进行设置。
单击“添加”按钮,打开 VMware 的 添加硬件向导 对话框
选择“串行端口”,并单击“ Next >”按钮
选择“ 使用命名的管道 ”,并单击“ Next >”按钮
第一个输入框中输入“ \\.\pipe\com_1
”,表示该虚拟串口将要映射到 Host OS 的管道名称。
第二个框中选择“该端是服务器”,表示 Guest OS 是被调试的系统
第三个框中选择“另一端是应用程序”,表示 Host OS 将使用一个调试软件来作为管道的另一端。
设备状态,勾选“启动时连接”,表示在开启虚拟机操作系统时,与这个虚拟设备(串口),建立连接。单击“ 完成”,按钮
此时,可以看到 Hardware 列表中已经有了一个新的设备, 串行端口(使用管道名:
\\.\pipe\com_1
)。这里还要勾选右侧“I/O 模式”中的“ 轮询时主动放弃CPU ”选项
至此就完成了对 VMware 串口的设置。
修改 Guest OS 的启动配置文件
在刚才设置完虚拟串口后,这里需要重启虚拟机中的 Guest OS。进入系统后,我们要对系统的启动配置文件作一些修改,才能使 Host OS 中的 WinDbg 调试该系统。
Windows 20 00、 Windows XP 、 Windows 200 3 系统的启动配置文件位于系统盘根目录下的 boot.ini,该文件默认是有保护属性的。
执行 attrib -s -h -r c:\boot.ini
去除保护属性,然后开始编辑该文件,一个默认的 boot.ini 文件
将其修改为
最后,修改完 boot.ini 文件后,执行 attrib +s +h +r c:\boot.ini
恢复该文件的保护属性。
Windows Vista以后win7等操作
从 Windows V ista 开始,考虑到 boot.ini 文件很容易被恶意软件所修改,因此不再使用 boot.ini 文件,而是使用 Boot Configuration Data(BCD)。修改 BCD,需要启动一个管理员权限的命令行窗口。然后使用 bcdedit 命令来编辑 BCD。首先将当前启动入口复制一份,
bcdedit /copy {current} /d "Win7 Debug"
其中双引号中的字符串(“Win7 Debug” )为新启动入口的名称。如果执 行 成 功 , 会 得 到 新 启 动 入 口 的 GUID , 即 图中 的 “ {ad2983ae-3010-11ee-b297-b234ec8321b1}”,用来唯一标识这个启动入口。
接着,我们需要对这个启动入口,启用内核调试
bcdedit /debug {ad2983ae-3010-11ee-b297-b234ec8321b1} on
BCD 中有一套全局的调试设置,使用 bcdedit /dbgsettings
可以观察和修改这套全局设置。
默认的全局调试设置中,调试类型为 Serial,调试端口为 1,波特率为 115200,这已经是我们需要的设置了。
当然也可以通过如下命令再次设置为串口调试
bcdedit /dbgsettings serial DEBUGPORT:1 BAUDRATE:115200
如果希望为某个自启动项设置单独的调试选项,那么可以使用 bcdedit /set 命令, 例如:
bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} debugtype serial
bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} debugport 1
bcdedit /set {ad2983ae-3010-11ee-b297-b234ec8321b1} baudrate 115200
至此虚拟机中的 Guest OS 就设置好了,先不要重启,当下一步设置好 WinDbg 后,再重新启动。
设置 WinDbg 参数
首先在桌面或快速启动栏中创建一个 WinDbg 的快捷方式,然后修改这个快捷方式属性中
的“快捷方式”。
将“快捷方式”页中的“目标(T)”框中加上以下参数:
-b -k com:port=\\.\pipe\com_1,baud=115200,pipe
重启虚拟机中的 Guest OS
重启虚拟机,将会看到如图所示两个系统入口,选择“ Microsoft W indows XP Professional – debug”,然后安下回车键。
回车后,会发现系统貌似卡住一样,这其实是系统在等待串口另一端的调试程序与其建立连接。
启动 WinDbg
这时启动刚才设置好的 WinDbg 快捷方式,发现很快 WinDbg 就连上虚拟机中的 Guest OS了,如果很长时间没有连接上的话, 可以单击 WinDbg 菜单中的"Debug"->“Kernel Connection”->“Resynchronize”。连接后的效果
接下来就可以通过 WinDbg 来调试虚拟机中的 Guest OS 了
输入命令g
即可开启windows