Emulation 虚拟机监控程序:跨不同虚拟化技术的特殊功能缺失
在使用Intel的VMX和ARM的virt扩展时,我注意到在实现虚拟机监控程序时缺少非常有用的功能 在虚拟机监控程序的工作过程中,通常需要捕获来宾行为,但仅用于跟踪目的(也就是说,来宾可以正常执行指令,但我们需要先做一些事情,例如日志记录) 更准确地说,以下面的示例为例:在我不久前实现的Intel虚拟机监控程序上(以Windows 7为来宾),每当修改Windows内核结构时,我都需要记录日志。为此,我找到了内核结构的物理地址,并删除了来宾对相应EPT页面的写入权限。因此,每当客户机试图写入(修改)结构时,就会发生EPT冲突,从而导致系统管理程序陷阱 在每次违反EPT时,我都会采取以下策略之一: 战略1:Emulation 虚拟机监控程序:跨不同虚拟化技术的特殊功能缺失,emulation,trace,hypervisor,assembly-trap,Emulation,Trace,Hypervisor,Assembly Trap,在使用Intel的VMX和ARM的virt扩展时,我注意到在实现虚拟机监控程序时缺少非常有用的功能 在虚拟机监控程序的工作过程中,通常需要捕获来宾行为,但仅用于跟踪目的(也就是说,来宾可以正常执行指令,但我们需要先做一些事情,例如日志记录) 更准确地说,以下面的示例为例:在我不久前实现的Intel虚拟机监控程序上(以Windows 7为来宾),每当修改Windows内核结构时,我都需要记录日志。为此,我找到了内核结构的物理地址,并删除了来宾对相应EPT页面的写入权限。因此,每当客户机试图写入(修
- 激活监视器陷阱标志
- 模拟要编写结构的指令。这意味着要编写一个仿真器(>反汇编程序)
以下面的例子为例。让我们假设我希望我的虚拟机监控程序控制来宾与内存映射设备的通信(甚至完全模拟一个——这是当今虚拟机监控程序的一个非常常见的要求)。大多数情况下,我们要做的是告诉客户,设备的内存映射到地址A,并且钩子向该地址写入/读取。当一条被捕获的指令试图对地址a处的区域进行r/w操作时,当前我们被迫对其进行反汇编和仿真。如果虚拟机监控程序为我们提供了让指令以临时r/w权限执行并在其之后立即捕获的可能性,那么模拟该指令将变得不必要,因为我们可以让它执行并“加载项”之后的预期效果。您只能在指令之前进入陷阱,因为这是硬件提供的。从理论上讲,虚拟机可能会对虚拟机监控程序中的陷阱做出反应,并实际对此采取一些措施(在背后更改任何内存绑定参数),因此替代方法不是很有用 对不起,伙计,事情就是这样 几年后,我突然想到,如果您正在编写虚拟机监控程序,您可以单步执行指令,而不是模拟指令