17

我曾经使用VirtualKDWinDBG和单个虚拟机来调试 Windows 内核。

最近我有一台 Linux 机器,现在我想知道 - 当您的主机无法运行VirtualKD/WinDBG*时,调试 Windows 内核的最简单方法是什么?

我假设该解决方案将需要两个虚拟机,但我宁愿在我的实际机器上托管两个实例,而不是将一个实例驻留在另一个虚拟实例中......

无论如何,有没有使这项工作?

提前致谢!

*出于稳定性原因,葡萄酒是最后的选择......

4

4 回答 4

22

解决了!基本上,我最终使用了两个(VirtualBox)VM ,通过Unix 域套接字(在主机上)模拟串行连接(空调制解调器电缆)。有关更多信息,请阅读以下内容:

硬件设置*:

  • 被调试者:
    • 确保机器已关闭并编辑串行端口设置。
    • 启用Port 1,并分配如下值:端口号:COM1,端口模式:主机管道,创建管道:未选中(客户端),端口/文件路径:/tmp/win_link
  • 调试器:
    • 与上面相同(使用相同的路径),只是这次应该检查创建管道(服务器)。

调试器设置:

  • 运行 WinDBG 并按 Ctrl+K 调用Kernel Debugging
  • COM中,输入:Baudrate: 115200, Port: COM1, Resets: 0 并确认Pipe and Reconnect未选中(重要)。
  • 您将看到以下输出:Opened \\\\.\com1 Waiting to reconnect...

调试器设置:

  • 在 /port com1 /baud 115200 /id 1 上运行bootcfg /debug 。要验证,请运行bootcfg .**
  • 重启。
  • 在启动阶段的相当早的时候,另一台机器上的 WinDBG 应该检测到被调试对象正在运行。

*假设使用了 VirtualBox。VMWare/KVM 用户可能会通过类似的步骤获得相同的结果。此外,有关更多信息,请参阅VirtualBox 文档

**假设客人是 Windows XP。更高版本包括 bcdedit,可以按照此处所述使用。

于 2012-10-07T22:47:28.350 回答
2

对于 QEMU\KVM,请遵循以下说明: http ://www.linux-kvm.org/page/WindowsGuestDrivers/GuestDebugging

于 2013-09-03T21:34:05.577 回答
1

非常有用,但适用于 Windows XP 机器。如果需要在 Linux 主机上配置 2 个基于 Windows7 的虚拟机,可以参考以下链接:http ://www.aldeid.com/wiki/Category:Digital-Forensics/Computer-Forensics/Debugger/Kernel

于 2015-04-08T17:06:17.260 回答
-1

现在的另一个选择是启用本地内核调试。这有一些限制,但是它使您能够在仅使用一个VM 时访问内核数据。

此方法仅适用于 Windows 8.0 和 Windows Server 2012 及更高版本。

跟着这些步骤:

  1. 以管理员身份打开命令提示符窗口。
  2. 进入bcdedit /debug on
  3. 如果计算机尚未配置为调试传输的目标,请输入bcdedit /dbgsettings local
  4. 重新启动计算机。

系统重新启动后,您可以执行WinDBGas Administrator,按ctrl+k或转到File -> Attach to kernel -> Local并按 OK。

附加到内核选项

此时,您将能够执行仅内核命令并访问内核结构:

在此处输入图像描述

在 Windows 10 和新的 WinDBG 版本(预览版)下测试。

参考:手动设置单机本地内核调试

于 2017-11-13T08:05:47.440 回答