首页 文章

顾客:不同虚拟化技术特有的功能缺乏

提问于
浏览
4

使用英特尔的VMX和ARM的virt-extensions,我注意到缺少一个在实现虚拟机管理程序时非常有用的功能 .

在虚拟机管理程序的工作中,通常需要捕获访客行为,但仅用于跟踪目的(即,指令可以由访客正常执行,但我们需要先执行某些操作 - 例如日志记录) .

更准确地说,请看以下示例:在我之前实施的英特尔虚拟机管理程序上(以 Windows 7 作为访客),我需要 log whenever a windows kernel structure was being modified . 为了实现这一点,我找到了内核结构的物理地址和我 removed the write permission of the guest for the corresponding EPT page . 因此,每当客户试图编写(修改)结构时,都会发生 EPT violation ,从而导致管理程序陷阱 .

在每次这样的EPT违规行为中,我将继续 one of the following strategies

策略1:

  • 激活 monitor-trap-flag

  • Temporarily grant the guest permissions to write the region (EPT modification)

  • VMRESUME =>由于 MTF 被激活,客人将立即执行该指令和 VMEXIT

  • 关于下一个 VMEXIT ,我将停用 MTF 并重新禁止访客再次编写结构 (=EPT modification + invalidation)VMRESUME

策略2:

  • 模拟想要编写结构的指令 . 这意味着编写了一个模拟器(>反汇编程序) .

如您所见,即使没有 multi-processing awareness ,这两种策略也有点复杂 . 关于 strategy 1 ,如果要在多个处理器上虚拟化Windows,我们还必须在处理EPT违规时将IPI发送到其他核心以暂停它们 . 另外,这是一个 specific 示例,这意味着 specific 策略 . 跟踪的另一个示例可以是例如在调用核心函数时记录和/或修改核函数的参数 . 在这种情况下,我们可能需要不同的策略 .

我想是时候达到目的了 . 我的困境如下 . 每当我们需要跟踪访客行为时,避免复杂编程策略的简单方法 would have been for virtualization technologies to offer the possibility to dynamically choose if instruction traps occur before OR AFTER their execution.

甚至在编写我的第一个虚拟机管理程序(在英特尔)之前,我几乎肯定VMX会为我提供这样的功能 . 我的想法告诉我,这将是任何平台上任何虚拟化技术提供的明显特征,所以当我发现它实际上不是时,我感到惊讶(并且有点沮丧): not on Intel, not on ARM (as I recently found out) and most probably not on other platforms . Thus, my question is actually: WHY? Why don't hardware virtualization "designers" implement such functionality? 我确定以前已经考虑过了,因此对我来说唯一可能的答案似乎是 hardware-wise such a functionality implementation would be very difficult or not even possible, although I fail to see why this would be true. 是这样的吗?

在此先感谢您的答案:)

EDIT

虽然我还没有说清楚,但我还想指出这样一个事实,即程序员想要捕获一些客户行为的几十种情况 WITH THE INTENTION OF CHANGING IT'S EFFECT (thus implying more than tracing) ,但这种功能仍然非常有用 .

以下面的例子为例 . 让我们假设我希望我的虚拟机管理程序通过内存映射设备控制来宾的通信(甚至完全模拟一个 - 这是当今虚拟机管理程序的一个非常常见的要求) . 大多数情况下,我们要做的是告诉guest虚拟机设备是在地址 Ahook writes/reads to/from that address 进行内存映射的 . 当被困指令试图在地址 A 处搜索该区域时,目前我们是 enforced to disassemble and emulate it . 如果管理程序为我们提供了使用临时r / w权限执行指令并在其后立即执行陷阱的可能性,则模拟指令将变得不必要,因为我们可以让它在之后执行并且"add-in"期望的效果 .

1 回答

  • 0

    您只能在指令之前陷阱,因为这是硬件提供的 . 从理论上讲,虚拟机可以对虚拟机管理程序中的陷阱做出反应并实际对其进行一些操作(更改背后的任何内存限制参数),因此替代方案不是很有用 .

    对不起,伙计就是这样 .

相关问题