Win11内核调试环境搭建

VMWare新建Win11虚拟机

目前升级到VMWare 16.2.1,但是在新建虚拟机的时候并没有发现有Win11的选项,此时还是选择Win10 x64选项。在编辑硬件的时候删除打印机,因为它占据了串口的第一位置,手动添加一个从串行端口,并选择使用命名管道,命名为“\\.\pipe\com_1”,下面选择“一端为服务器,另一端为应用程序”,并在最下面的IO模式中勾选“轮询时主动放弃”。

完成硬件设置后,不要直接启动虚拟机进行安装,因为从Win11开始,要求硬件必须满足TPM2.0,这是一种基于硬件的安全保护机制,通过经过安全验证的加密密钥来确保系统未被篡改(?)。为了在虚拟机中模拟这个硬件存在,首先打开虚拟机设置,在“选项”中找到访问控制,然后添加密码进行保护。

设置完密码完成虚拟机加密后,在硬件设置中添加“可信平台模块”,完成设置后就可以进行Win11的安装了。

另外要注意的是,Win11仅接受UEFI引导方式,所以在选项的高级中需要设定系统引导方式,在固件类型中选择。

由于我们需要设置系统调试模式,所以不要勾选启用安全引导。

设置Win11调试模式

使用bcdedit添加调试内核选项

  1. Win+X,选择Windows终端(管理员),然后不要使用默认的Powershell,启动一个新的cmd,在这个新打开的shell中进行操作
  2. 运行bcdedit /copy {current} /d "Win11 Debug",复制当前的启动项,这个命令成功后输出一个启动项的{ID}
  3. 为新的启动项,开启调试模式
    • bcdedit /debug {ID} ON
    • bcdedit /bootdebug {ID} ON
  4. 设置成默认启动项bcdedit /default {ID}
  5. 设置选择启动项的超时时间(秒),bcdedit /timeout 10
  6. bcdedit /dbgsettings serial port:1 baudrate:115200,运行bcdedit /dbgsettings,查看当前设置
  7. 此时开机时启动选项还是从Win10开始的蓝色界面,如果想要恢复成之前的黑色界面,需要另外一条命令:bcdedit /set "{bootmgr}" displaybootmenu yes

完成之后,重新启动,在Windbg Preview中利用命名管道进行连接:

Windbg设置

如果没有Windbg Preview,则使用Windbg,需要使用以下命令:

windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe,resets=0

  • -b指启用初始断点
  • com:port=代表使用串口的命名管道路径
  • baud=上面运行bcdedit /dbgsettings输出的baudrate

其他要注意的问题

DbgPrint输出

从Vista开始,DbgPrint的输出默认是看不到的,需要在注册表中进行操作。

  1. 在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager下新建新的键“Debug Print Filter”
  2. 在新建的键中添加新的值,名为“DEFAULT”的DWORD类型值,并将值设为8

在Win11之前,使用DbgView(Sysinternal工具集中),在选项中开启“Enable Kernel Output”可以在未设定上述注册表时监控到DbgPrint的输出,但是在Win11时好像不行。 —— Pavel Yosifovich


版权声明:本文为weixin_37665575原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。