Windows内核:双机调试

一、什么是双机调试

  • 为什么需要双机调试?
    我们知道在用户层调试一个普通程序时,整个被调试程序会被中断。同样的,如果被调试的是操作系统内核,那么整个操作系统都会被中断。所以如果想要调试Win内核,那么就需要两台电脑,一台运行WinDBG作为调试机,一台作为被调试机,这就是所谓“双机调试”。

  • 双机调试的原理
    在这里插入图片描述
    在操作系统中提供了一个调试子系统,通过串口发送、接收调试信息。例如,本机在WinDBG中通过串口向虚拟机的调试子系统发送“g”指令,调试子系统就会做出相应操作(使虚拟机继续运行)。

  • 开发环境
    Host OS(主机):Win10 x64 1803
    Guest OS(被调试):Win7 x86 Professional 和 WinXP SP3 x86
    调试工具: WinDBG x64 + VS2019 + Win10 SDK 10.0.18362.0

二、为Guest OS添加“DEBUG模式的开机引导项”和“串口”

2.1 Win 7

  • 管理员运行CMD
  • 复制一个开机选项,命名为‘MyDebug’
    bcdedit /copy {current} /d DebugEntry \\将生成一段ID
  • 设置‘MyDebug’开机启动为DEBUG模式
    bcdedit /debug {上面生成的ID} ON
  • 增加一个开机引导项
    bcdedit /displayorder {current} {上面生成的ID}
  • 开启串口1
    bcdedit /dbgsettings serial baudrate:115200 debugport:1
    在这里插入图片描述

2.2 Win XP

  • 在文件夹选项中设置显示系统文件、显示所有文件,随后可以在C盘根目录看到boot.ini文件
    在这里插入图片描述
    在这里插入图片描述
  • 为GuestOS添加一个启动项,开启串口"com1"
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="MyDEBUG" /noexecute=optin /fastdetect /debug /debugport=com1
    在这里插入图片描述

三、虚拟机开启“串口”

  • 观察“虚拟机设置”这个对话框的“硬件”->“设备栏”,看看是否有“打印机”或“Printer”,如果有,则删除该设备。
  • 选择“添加”,然后选择“串行端口”,然后选择“使用命名管道”,并按如下设置
    \\.\pipe\com_1
    在这里插入图片描述

四、安装WinDBG

  • 微软官网下载WDK,需要先安装Visual Studio,注意工作负载中选择与WDK对应版本的Win10 SDK
    (图中为 Windows10 1903 >>> VS2019 >>> Win10 SDK 10.0.18362.0)
    在这里插入图片描述
    在这里插入图片描述

  • 在桌面上添加一个windbg的快捷方式

  • 右键该快捷方式,打开“属性”对话框,在目标一栏的末尾添加【 -b -k com:pipe,port=\.\pipe\com_1,resets=0】
    在这里插入图片描述

五、开始调试

  • 先启动虚拟机的GuestOS,然后马上启动WinDBG
    在这里插入图片描述
  • 在Guest OS中选择【XXX 启动调试程序】这个开机启动项
  • WinDBG会在GuestOS的开机过程中自动断下:
    在这里插入图片描述
  • 在WinDBG中输入命令【g】向GuestOS的“调试子系统”发送继续执行的消息,随后可以看到GuestOS正常开机进入桌面。
  • 在WinDBG中点击【Break】按钮,GuestOS将会被中断卡死。
    在这里插入图片描述

Reference

发布了70 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/forchoosen/article/details/104847621