2012-10-02 105 views
10

我用来调试Windows内核使用VirtualKD,WinDBG和单个虚拟机。从Linux调试Windows内核

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

我认为解决方案将需要两个虚拟机,但我宁愿我的托管实际机器上的两个实例,而不是居住在另一个内部的虚拟实例的实例...

反正是有使这项工作?

在此先感谢!

*葡萄酒是出于稳定性的原因不得已......

回答

16

解决了!基本上,我结束了使用(VirtualBox的)虚拟机仿效串行连接(交叉线)在Unix域套接字(在主机上)。欲了解更多信息,请阅读下面:

硬件设置*:

  • 调试:
    • 确保机器关闭,编辑串口设置。
    • 启用端口1,并如下指定值:端口号:COM1,端口模式:主机管,创建管:未选中(客户端),端口/文件路径:的/ tmp/win_link
  • 调试器:
    • 同上(使用相同的路径),只是这一次创建管应经过(服务器)。

调试器设置:

  • 运行WinDBG中,然后按Ctrl + K调用内核调试
  • COM,请输入:波特率:115200,端口:COM1,复位:0和验证和重新连接是选中(重要)。
  • 你会看到以下的输出:Opened \\\\.\com1 Waiting to reconnect...

调试设置:

  • 运行上/端口的bootcfg /调试COM1 /波特115200/ID 1。要验证,请运行bootcfg。**
  • 重新启动。
  • 在启动阶段很早,其他机器上的WinDBG应该检测到调试对象正在运行。

*假设使用VirtualBox。 VMWare/KVM用户可能可以通过类似的步骤获得相同的结果。另外,更多信息请参考VirtualBox docs

**假设客人是Windows XP。后来的版本包括bcdedit,其可以如here所述使用。

+0

你的配置似乎完美的,但不管我用什么配置,我看不出两个我的Windows虚拟机的串行端口。你有过这样的问题吗? –

0

现在的另一种选择是启用本地内核调试。这附带一些limitations,但是它将使您能够访问内核数据,而只需使用一个虚拟机。

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

遵循以下步骤:

  1. 打开命令提示符窗口管理器。
  2. 输入bcdedit /debug on
  3. 如果计算机没有配置为调试运输的目标,进入bcdedit /dbgsettings local
  4. 重新启动计算机。

一旦系统重新启动,可以执行WinDBG作为Administrator,按ctrl+k或去File -> Attach to kernel -> Local,然后按OK。

Attach to Kernel Option

在这一点上,你就可以只执行内核命令和访问内核结构:

enter image description here

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

参考:Setting Up Local Kernel Debugging of a Single Computer Manually