Windows Kernel: Debug Environment
Debug with QEMU
QEMU模式下可以选择直接使用-s启动gdbserver来调试内核,速度比较快,而且可以比较直观看到运行情况,不过没办法加载符号表,Crash后详情信息没办法Analyze
Tip:可以在最后稳定调试阶段,记录好符号地址,在qemu monitor中savevm,然后每次运行loadvm即可(这样可以便利很多调试场景)
可以选择开启两个QEMU,其中一个作为调试器,使用Windbg通过串口调试
比较稳定且同时可以支持远程的方案:
1 | 调试机: |
或者添加串口设备(我在尝试的时候不是很稳定):
1 | 调试机: |
在被调试机中开启debug模式:
1 | bcdedit /set debug on |
在调试机的Windbg中设置好Kernel Debug的端口和波特率
设置Symbols Path:
1 | srv*c:\symbols*http://msdl.microsoft.com/download/symbols |
Windbg启动连接等待
重启被调试机,开机选项选择debug模式即可
等待连接成功,即可调试
Debug with Vmware (MacOS)
PS:QEMU到Vmware的镜像切换
当有在qemu中安装好的windows的qcow2时,首先转换至vmdk格式
1 | qemu-img convert -f qcow2 windows10.qcow2 -O windows10.vmdk |
新建一个对应位数的Windows虚拟机(选择BIOS模式),不需要安装iso
将虚拟机文件中的虚拟磁盘的vmdk文件删除
将前面转换好的vmdk复制进去,再次打开虚拟机提示虚拟磁盘文件缺失,重新选择复制进去的vmdk即可
编辑vmx文件:
被调试机:
1 | //serial1代表com1 |
调试机:
1 | serial1.present = "TRUE" |
被调试机中开启debug模式:
1 | bcdedit /copy {current} /d "Win10" |
Win+R进入msconfig
选择新建的启动项,在高级设置中开启Debug,选择对应端口和波特率(115200)即可
这里端口的选择有点玄学,主要看自己的设备管理器中对应的端口,可能需要多尝试几次
(在本地,我设置被调试机Debug端口为com1,调试机端口为com2)
而后重启被调试机,以对应的Debug模式启动即可