Windows驱动双机调试环境搭建
Windows 调试工具(WinDbg、KD、CDB、NTSD) - Windows drivers | Microsoft Docs
驱动调试为了避免调试过程中的各种蓝屏操作,一般会采用双机调试,在一个设备的情况下可以搭配VM进行调试。
Windbg + VMware
Host OS: Win10 21H2 LTSC
Guest OS: Win10 21H2 LTSC
因为部分设备不支持网络连接调试,这里介绍一下使用串口进行连接。
VM串口设置
在虚拟机中添加串行端口,并进行如下设置。命名管道可自定义,但是需要与之后Windbg参数相同。
![VMware设置](/2022/03/10/Windows%E9%A9%B1%E5%8A%A8%E5%8F%8C%E6%9C%BA%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/vmsetting.png)
Guest OS设置
BCDEdit /dbgsettings - Windows drivers |微软文档 (microsoft.com)
管理员启动命令行窗口,进行调试器全局设置
1
bcdedit /dbgsettings serial baudrate:115200 debugport:1
此处debugport应为命名管道对应的端口号,这里可通过vm设置中的命名来进行确认,通常虚拟机如果存在打印机的话COM1端口会被占用,所以一般会把打印机删除或者命名管道使用其他端口
关闭数字签名校验
1
2bcdedit /set nointegritychecks on
bcdedit /set loadoptions DDISABLE_INTEGRITY_CHECKS复制当前引导项,记录输出的ID
1
bcdedit /copy {current} /d DriverDebugEntry
激活debug
1
2
3bcdedit /debug {ID} ON
bcdedit /bootdebug {ID} ON
bcdedit /set {ID} testsigning on引导选择超时设置
1
bcdedit /timeout 10
![bcdedit执行结果](/2022/03/10/Windows%E9%A9%B1%E5%8A%A8%E5%8F%8C%E6%9C%BA%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/cmdres.png)
启动Windbg
在Host打开命令行,进入Windbg.exe目录下(注意区分x86/x64),输入
1 | ./windbg.exe -b -k com:pipe,port=\\.\pipe\debugger,resets=0,reconnect -y |
注:port对应虚拟机所设置的命名管道
这时windbg会等待连接,重启虚拟机,在引导选择时选择刚才创建的引导项,可以在Windbg中看到连接成功,并自动中断,输入g
进入系统,即可进行驱动调试。
VirtualKD + VMware
4d61726b/VirtualKD-Redux: VirtualKD-Redux - A revival and modernization of VirtualKD (github.com)
手动进行引导设置操作比较复杂,所以可以使用开源工具VirtualKD进行快速设置,其支持VMware以及Vbox
在VirtualKD目录下target32或target64(对应虚拟机架构)拷贝到虚拟机中执行install进行安装
在主机中打开vmmon.exe,设置调试器路径
重启虚拟机在引导选择时按F8禁用签名校验,如果引导选择界面为windows新版的选择界面(不是传统上下键选择),则在高级设置里进行签名校验禁用
VirtualKD会自动打开调试器,按
g
即可进入系统