我想使用 Microsoft Hyper-V、VMware vSphere/ESX、Xen 或任何其他能够监控来宾操作系统(VMM 中的 VM)执行的替代管理程序解决方案来设置虚拟机监控器。
特别是,我希望能够在虚拟 CPU 运行来宾操作系统之前查看它们的指令。此外,我还希望能够在一些来宾操作系统的 CPU 寄存器上设置监视器,因此如果它们被修改(例如使用 MOV 指令写入时),来宾的状态将在写入发生的位置暂停(并且 rip/eip 将指向该指令)。
我一直在寻找一种 VMM 解决方案,它提供了一种实现我的目标的方法,但我找不到任何东西。
有谁知道处理这种事情的最佳方法是什么?关于我应该使用的管理程序的任何建议?(我猜 Xen 可能是最容易修改和调试的,因为它是开源的)
非常感谢。
干杯,
编辑:我会尝试更好地解释自己。我正在尝试调试在内核模式 (x86-64) 中运行的代码。现在,我正在使用 WinDbg 在虚拟机 (VMware) 中调试 ring0 代码。
如果可以,我会很高兴在内存位置设置硬件断点 (ba) 并查看读取/写入的内容。问题是我的硬件断点被 ring0 中运行的代码禁用了。基本上,这段代码是保存 dr7 寄存器的内容,清除它,访问我正在观察的内存(我设置了硬件断点的内存),最后在访问后恢复 dr7 寄存器。因此,我的硬件断点永远不会被击中。这意味着我永远不会弄清楚内存是从哪里被操纵的。可以说软件断点不是可接受的替代方案就足够了。此外,我还尝试在 dr7 中使用通用检测位并安装我自己的陷阱处理程序来了解是否有人在搞砸我的硬件断点。然而,
我希望你现在明白我的难题。我需要在比 ring0 更低的级别上运行才能处理在 ring0 上运行的这段代码。做到这一点的唯一方法是在管理程序中。
我想监视说 dr7 寄存器的内容并查看访问它的内容(读/写)。如果我找到了错误代码的 RIP,我将能够逐步完成并了解更多它在做什么。