WinDbg & VMware 双机调试 查看内核数据结构

WinDbg 推荐微软商店安装,UI好看

WinDbg本地调试无法通过下断点来跟踪内核的执行,就需要采取特殊的方法,可以通过USB、1394火线等把两台机器连接起来,一台机器运行被调试的内核,另一台机器运行WinDbg,这样就可以调试内核了。不过两台机器的内核调试成本太高,实际上都是通过WinDbg结合虚拟机的方式来调试内核的。虚拟机平台自行选择。

  1. 安装好WinDbg后

  2. 在VMware上创建一个COM串口(COM1或COM2)。如下图,创建的串口是串口2,后文中Windows XP的 boot.ini或者 Windows Vista 以后版本命令行里的设置均填写 “com2”。创建的串口ID为 “com2”的原因是存在虚拟机。为了方便,也可以先将虚拟打印机删除,这样创建的串口ID就是“com1”了。

1550731479128

  1. 设置虚拟机内部系统的调试环境。虚拟机内存操作系统根据不同的版本,设置方法略有差异。

在Windows XP中是通过BOOT.ini进行配置的。在系统C:\目录下才可以找到boot.ini(注意:该文件为隐藏只读文件,须在文件夹选项中取消对系统文件隐藏才能看见)。在boot.ini文件的最后添加如下行,/debugport=取决于创建的串口ID(com1或com2)。

1
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional-debug" /debug /debugport=com2 /baudrate=115200 /fastdetect

在Windows Vista/7及以后的操作系统中,以管理员身份启动CMD,运行如下命令 。

1
2
3
4
5
6
7
bcdedit /dbgsettings serial baudrate:115200 debugport:2 
//debugport取决于串口ID
bcdedit /copy {current} /d DebugEntry
bcdedit /displayorder {current} {GUID}
//GUID 请执行第二步时输出的GUID替换
bcdedit /debug {GUID}
//GUID 请执行第二步时输出的GUID替换
  1. 在虚拟机外建立WinDbg快捷方式,命令如下。

    1
    windbg.exe -k com:port=\\.\pipe\com_1,baud=11520,pipe
  2. 启动虚拟机内的操作系统,并选择调试启动菜单。

  3. 通过虚拟机外的WinDbg快捷方式启动WinDbg。

经过以上步骤,稍等片刻,WinDbg和虚拟机就会连接起来。如果长时间没连接上,可以点击WinDbg菜单项 Debug –> Kernel Connection –> Resynchronize,重新进行连接。

单击WinDbg菜单项Debug –> Break(或按 Crtl + Break快捷键)让系统中断,就可以向WinDbg下调试命令了。

1571159965708

Author: BarretGuy
Link: https://basicbit.cn/2017/01/13/2017-10-14-Windbg双机调试/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.