VMCALL与SYSENTER指令非常相似,不同之处在于SYSENTER用于系统调用(快速过渡到OS)的方式,而VMCALL用于 super 调用(过渡到管理程序)。
我的问题是,虽然SYSENTER不会保存CPU状态,但是否适用于VMCALL。发出VMCALL会导致VM退出,但是我不确定是否将 guest CPU状态保存到关联的VMCS结构中?
如果确实保存了CPU状态,那么我们如何在 super 调用中传递参数呢?
最佳答案
VMCS区域分为6个区域,其中之一是访客状态区域。
访客状态在每个VMExit上存储RIP,RFLAGS和RSP。 VMExit之后,其余的访客GPR会立即驻留在硬件中。
VMCALL仅无条件地导致VMExit。寄存器作为参数的用法留给了VMM的api。
从Linux KVM API documentation:
从Intel 64 and IA-32 Architectures Software Developer’s Manual:
从以上内容可以得出结论,VMCALL不会保留任何CPU状态。
关于virtual-machine - x86中的VMCALL指令是否保存 guest CPU状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27786602/