gpt4 book ai didi

windbg - 如何使用 VirtualBox 从另一台 VM 调试一台 VM 中的 Windows?

转载 作者:行者123 更新时间:2023-12-05 01:35:09 28 4
gpt4 key购买 nike

我正在为 Windows 7 编写一些启动(登录前)代码,并且希望能够调试它(如果只是为了看看它是如何工作的,因为 Microsoft 的文档很糟糕)。

我的环境是Linux主机上的VirtualBox,有3台Windows VM(一台Windows 2008域 Controller ,一台Windows 7开发机,一台Windows 7测试机),希望能够调试测试的启动过程机器使用虚拟串行连接从开发机器远程连接两个虚拟机。

[在另一种生活中,我使用 Windows 主机上的 VMware 工作站从另一个 Linux VM 调试 Linux 内核驱动程序,所以我知道这种事情可能是可行的。]

我见过有人使用windbg从主机调试VirtualBox VM中的Windows,但我需要从第二个 guest 进行调试(因为我的主机不是Windows)。有没有人想出如何做到这一点?

编辑:
在我发布之前,我已经尝试过明显的方法。我在每个 VM 配置中创建了一个虚拟串行端口,并将它们连接到同一个主机管道,由开发 VM(调试器)创建并由测试 VM(调试器)使用。然后我跑了

bcdedit /dbgsettings serial debugport:1 baudrate:115200
bcdedit /debug {current} on

在测试虚拟机中并关闭它。在 dev VM 中 Ran windbg 选择了内核调试(在正确的串行端口上)并重新启动测试 VM。出现了一些关于没有任何可用符号并且测试 VM 挂起的消息。

后来我找到了这篇文章: http://www.benjaminhumphrey.co.uk/remote-kernel-debugging-windbg-virtualbox/这(尽管那个人使用的是 Windows 主机)似乎准确地描述了我尝试过的方法,但他的测试 VM 没有挂起。我在 wndbg 窗口中得到的输出与他的相同,但在“Windows XP Kernel ...”行之前停止

我现在不太确定这个问题是否与 VirtualBox 相关,更不确定我是否正确使用了 Windbg。任何帮助,将不胜感激。

另一个编辑 我尝试将测试 VM 的虚拟串行端口附加到主机文件,并且在文件中得到了一些调试输出。我已经尝试将两个 VM 的虚拟串行端口设置为指向一个主机管道并在 Dev VM 中运行一个终端(而不是 WinDbg),并且我在终端中获得了调试信息。

我想我现在已经确定这绝对是 WinDbg 而不是 VirtualBox 的问题(我将删除 virtualbox 标签并将其替换为 windbg),但我不确定为什么 WinDbg 不说话。

更多信息:
我刚刚升级升级到 VirtualBox 4.2.4(不确定版本是否重要)并再次查看了这个。

我重建了测试虚拟机,更有耐心!

现在看来测试虚拟机正在运行 - 我最终在 windbg 窗口中得到了一些输出 - 但调试对象操作系统大约需要 15 分钟才能启动!这对于日常的内核调试显然没有用。我不知道为什么这会这么慢……如果我在开发 VM 中运行一个简单的终端而不是 windbg,则没有明显的减速(当然,调试信息大部分是垃圾)。

有任何想法吗?

最佳答案

我意识到这是一个巨大的死灵,但是......

您是否尝试过为内核模式网络调试设置调试器?我认为放缓在很大程度上是因为连续剧太糟糕了。减缓。

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439346%28v=vs.85%29.aspx

如果/当 M$ 决定删除该链接时,上述文章的这些部分是您需要做的来设置此链接:

设置目标计算机

要设置目标计算机,请执行以下步骤:

Verify that the target computer has a supported network adapter.

Connect the supported adapter to a network hub or switch using standard CAT5 or better network cable. Do not use a crossover cable, and do not use a crossover port in your hub or switch.

In an elevated Command Prompt window, enter the following commands, where w.x.y.z is the IP address of the host computer, and n is a port number of your choice:

bcdedit /debug on
bcdedit /dbgsettings net hostip:w.x.y.z port:n

bcdedit will display an automatically generated key. Copy the key and store it on a removable storage device like a USB flash drive. You will need the key when you start a debugging session on the host computer.

Note We strongly recommend that you use an automatically generated key. However, you can create your own key as described later in the Creating Your Own Key section.

If there is more than one network adapter in the target computer, use Device Manager to determine the PCI bus, device, and function numbers for the adapter you want to use for debugging. Then in an elevated Command Prompt window, enter the following command, where b, d, and f are the bus number, device number, and function number of the adapter:
bcdedit /set "{dbgsettings}" busparams b.d.f
Reboot the target computer.

要连接到它,请使用以下步骤:
Using WinDbg

On the host computer, open WinDbg. On the File menu, choose Kernel Debug. In the Kernel Debugging dialog box, open the Net tab. Enter your port number and key. Click OK.

You can also start a session with WinDbg by opening a Command Prompt window and entering the following command, where n is your port number and Key is the key that was automatically generated by bcdedit when you set up the target computer:

windbg -k net:port=n,key=Key

If you are prompted about allowing WinDbg to access the port through the firewall, allow WinDbg to access the port for all the different network types.

Using KD

On the host computer, open a Command Prompt window. Enter the following command, where n is your port number and Key is the key that was automatically generated by bcdedit when you set up the target computer:

kd -k net:port=n,key=Key

If you are prompted about allowing KD to access the port through the firewall, allow KD to access the port for all the different network types.

关于windbg - 如何使用 VirtualBox 从另一台 VM 调试一台 VM 中的 Windows?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12619378/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com