Windows内核双机调试

传统模式BCD搭建

1、系统设置

打开CMD,输入下列指令后回车,会得到一个 {ID}

1
bcdedit /copy {current} /d DebugEntry 

{ID}代入下列两个指令中运行。

1
2
bcdedit /displayorder {current} {ID}  
bcdedit /debug {ID} ON

然后Ctrl+R,输入msconfig,点击引导,在选中刚刚创建的DebugEntry,然后点击高级选项。

image-20230105162913268

打勾调试端口并选择,一个COM,然后勾上波特率,选中115200

image-20230105162926669

2、虚拟机设置

点击编辑虚拟机设置。

image-20230105162950026

如果有打印机就移除打印机,然后添加一个串口,然后设置如下图,其中管道名的com_1为在系统中设置的端口,COMX就写为com_x。

image-20230105163005860

3、WinDbg设置

打开 File-Kernel Debug

image-20230105163021462

然后点击COM,把虚拟机填写的内容填到对应位置。

image-20230105163032692

然后点击确定。

image-20230105163044566

提示Waiting to reconnect后,开始打开虚拟机,选择Debug Entry

image-20230105163056432

此时会连接到Windbg。

image-20230105163109615

调试

在代码中添加一个int3或者调用KbBreakPoint函数后编译,扔到虚拟机加载,当DriverEntry被调用后会断在设置了断点的位置。

符号文件

打开 File-Symbol File Path

image-20230105163127556

输入

1
srv*c:\symbols*http://msdl.microsoft.com/download/symbols

C:\symbols表示的是下载的符号文件所存放的路径。

image-20230105163149616

输入完毕后点击.Reload,点OK。(需要梯子)

https://blog.csdn.net/qq_41252520/article/details/123095105

VirtualKD双击调试

VKD为内核加速器,因为Bcdedit方式搭建的双击调试环境有时候会很卡,不利于调试。

1、虚拟机设置

VKD(VirtualKD)有两个版本:官方版本和修改版本,其中官方版本在VM>=15时会出现无法连接虚拟机情况,而修改版修复了该问题。

1
2
VKD:http://sysprogs.com/legacy/virtualkd/
VKD-Redux:https://github.com/BwRy/VirtualKD-Redux/

下载好安装包后,打开虚拟机,拖动对应版本的安装包到虚拟机中。

image-20230522104559066

然后运行安装包,一直下一步即可。

在选择启动项时注意要F8进入安全模式选择禁止驱动签名,这样在编写驱动时无需加载签名即可调试启动。

2、本机设置

image-20230522104818031

  • Start debugger automatically:自动连接到调试器。当虚拟机打开后,VMMonitor会自动检测虚拟机是否开启,然后自动打开调试器连接。
  • Stop debugger automatically:与上边相反。
  • DbgBreakPoint() on start:在连接调试器成功后自动中断。

然后中间的选项为选择想用的调试器,右边则为手动打开调试器之类的选项。