如何通过虚拟串行端口连接两个 Windows VMWare 虚拟机以在 Linux 主机上进行内核调试

逆向工程 视窗 调试 虚拟机
2021-06-22 21:46:55

问题:最近我不得不在通过虚拟串行端口连接的两个 MS windows VMWare 虚拟机上执行内核调试,同时在 GNU/Linux 主机上运行。

布局:带有 Arch Linux 发行版的 GNU/Linux 主机(即使发行版在这种情况下没有发挥关键作用),安装了 VMWare Workstation 11,托管两个 MS Windows 虚拟机 - MS Windows 7SP1 x64(调试器),以及MS Windows 8.0 x64(调试器)。

解决方案:我做了很多谷歌搜索来解决这个问题,到处都有一些信息,但我找不到适合我的情况的解决方案。因此,我在下面编写的解决方案中汇总了我的发现和工作分步方法。希望这对其他人也有用。

1个回答

这是一个循序渐进的方法,不包括实际的主机系统安装、VMware 设置和虚拟机创建,因为这些是基本步骤,任何愿意执行内核调试的人都应该能够做到。该方法分为三个部分 - VM 硬件设置、MS Windows 配置和建立调试会话。

一、虚拟机硬件设置

  1. 从 DEBUGGER VM(您将连接到 DEBUGGEE 以执行内核调试的那个 VM)开始。在虚拟机设置硬件选项卡中,单击“添加...”以添加新的“串行端口”设备。

    VMWare 虚拟机串口

  2. 将串行端口类型设置为“输出到套接字”。

    输出到插座

  3. 将 Socket(命名管道)命名为您想要的可写位置。我选择了一个“/tmp”文件夹并命名为“com1”,这样套接字的完整路径就是“/tmp/com1”。由于 DEBUGGER 将连接到 DEBUGGEE,因此将连接方向指定为“From: Client”和“To: A Virtual Machine”。此外,除非您另有要求,否则请确保将设备状态选择为“开机时连接”。

    命名管道

  4. 单击“完成”后,DEBUGGER VM 就准备好使用串行连接了。

    调试器就绪

  5. 配置 DEBUGGEE VM(将被调试的那个)。在虚拟机设置硬件选项卡中,单击“添加...”以添加新的“串行端口”设备。将串行端口类型设置为“输出到套接字”。为 Socket 提供与您为 DEBUGGER 设置的名称完全相同的名称,在本例中为 - '/tmp/com1'。将连接方向指定为“From: Server”和“To: A Virtual Machine”。检查设备状态是否选择为“开机时连接”,除非您另有要求。

    被调试者命名管道

  6. 对于 I/O 模式,请确保选中“轮询时的产量 CPU”。完成后,这将使您的 VM 准备好使用串行连接,并且两个 VM 应该能够通过该连接进行通信。 调试就绪

二、微软视窗配置

  1. 启动您的 DEBUGGEE 机器,以便在 MS Windows 系统上启用调试模式。以管理员身份启动命令提示符“cmd.exe”并执行“bcdedit”命令以查看当前启动设置。

    编辑

  2. 执行(并根据需要调整标识符)以下命令以创建启用调试的附加引导选项:

    bcdedit /copy {current} /d "Windows 8 调试"

    bcdedit /set {ec04b3f3-16f4-11e6-b020-9ef119952d26} 调试

    bcdedit /set {ec04b3f3-16f4-11e6-b020-9ef119952d26} 调试类型串行

    bcdedit /set {ec04b3f3-16f4-11e6-b020-9ef119952d26} 调试端口 1

    bcdedit /set {ec04b3f3-16f4-11e6-b020-9ef119952d26} 波特率 115200

    这应该让您的 MS Windows DEBUGGEE 准备好在重新启动后以调试模式启动。

三、建立调试会话

  1. 启动调试器虚拟机。下载并安装带有调试工具的 MS Windows SDK。可在此处找到适用于 Windows 7 的 Microsoft Windows SDK 运行 WinDbg 并选择“文件/内核调试 (Ctrl+K)”以通过串行连接配置调试会话。在内核调试设置 COM 选项卡中,将波特率设置为 115200 和端口 - com1(或您指定的名称)。单击“确定”后,WinDbg 将开始在 com1 上等待传入的调试会话。

    WinDbg 设置

  2. 启动调试虚拟机。确保选择“Windows 8 Debugging”启动选项以调试模式启动机器。

  3. 在 WinDbg 中的 DEBUGGER VM 上,您应该会看到传入的内核调试连接。选择“Debug/Break (Ctrl+Break)”以发出中断并开始调试内核。

    内核调试连接

这些步骤应该足以通过 GNU/Linux 主机上的两个 MS Windows VM 之间的串行连接启动并运行内核调试会话。