如何解决VM说明是否可以退出?
bebc <mystery>:
mov 3423441(%rip),%r11
xor (%rsp),%r11
mov %rdx,%r8
mov %rcx,%r9
test %r8,%r8
jne bee3
mov $0x6c16,%rdi
mov $0xc0f4,%rax
vmwrite %rax,%rdi
pushf
对于上述指令,哪条指令可能会导致退出以及哪种退出类型?还有退出的原因是什么? (假设页面包含神秘功能)。神秘功能正在CPL0中运行。
解决方法
此答案基于 Intel VMX扩展, AMD 可能有所不同。
此外,VM扩展已经变得非常庞大和复杂(截至2020年10月),因此答案可能并不令人惊讶:
它们全部可以和不能,具体取决于VM配置,从而导致VM退出(因此,称为退出)。
取决于上下文,可能只有vmwrite
会导致退出,但是所有主流VMM,AFAICT都支持VMCS阴影(读取:嵌套虚拟化)已有一段时间了,所以也许两者都不指令将导致退出。
该代码的序言似乎是符合Windows ABI的功能,该函数设置堆栈cookie,并最终覆盖主机状态区域中的主机rip
。
bebc: 4c 8b 1d e5 57 30 00 mov 3168229(%rip),%r11
如果发生故障,可能会导致退出(请参阅英特尔手册的25.2节):
例外。异常(故障,陷阱和中止)会导致VM基于异常位图退出(请参见第 24.6.3)。如果发生异常,则使用其向量(范围为0-31)选择异常位图中的一位。如果 该位为1,虚拟机退出;如果该位为0,则异常通常通过来宾IDT传递。
如果配置了退出窗口并且未屏蔽相对中断,则在执行该指令之前,CPU将生成一个退出,尽管该可能不能算作该指令本身生成的退出。
>如果“中断窗口退出” VM执行控制为1,则在执行任何指令之前都会发生VM退出 如果RFLAGS.IF = 1,并且没有STI或MOV SS对事件的阻止(请参见表24-3)。
如果“ NMI窗口退出” VM执行控制为1,则在执行任何指令之前,VM退出发生 没有虚拟NMI阻止,MOV SS也没有事件阻止,STI也没有事件阻止 (请参阅表24-3)。
如果使用了EPT并且配置错误,或者检测到EPT违规(即模拟MMIO区域),则会导致退出。
使用来宾物理地址进行的访问可能会由于EPT配置错误,违反EPT和 页面修改日志已满事件。在翻译来宾过程中,EPT配置错误 物理地址,逻辑处理器遇到包含不支持的EPT分页结构条目 值(请参阅第28.2.3.1节)。如果没有EPT配置错误,但EPT分页- 结构条目不允许使用来宾物理地址进行访问(请参见第28.2.3.2节)。页面修改 当逻辑处理器确定需要创建页面修改日志条目时,将发生tion log-full事件 并且当前日志已满(请参阅第28.2.6节)。
bec3: 4c 33 1c 24 xor (%rsp),%r11
同上。
bec7: 49 89 d0 mov %rdx,%r8
该指令不会出错,但适用相同的出口。
beca: 49 89 c9 mov %rcx,%r9
becd: 4d 85 c0 test %r8,%r8
bed0: 75 11 jne bee3
bed2: 48 c7 c7 16 6c 00 00 mov $0x6c16,%rdi
bed9: 48 c7 c0 f4 c0 34 82 mov $0xc0f4,%rax
同上。
bee0: 0f 79 f8 vmwrite %rax,%rdi
除了适用于所有指令的学步车出口外,在以下情况下,这可能会导致退出:
VMWRITE。如果满足以下任一条件,则VMWRITE指令将导致VM退出:
—“ VMCS阴影” VM执行控件为0。
—寄存器源操作数的位63:15(64位模式之外的位31:15)不全为0。
— VMWRITE位图中的位n为1,其中n是寄存器源操作数的位14:0的值。见章节 24.6.15了解有关如何标识VMWRITE位图的详细信息。
bee3: 9c pushf
任何其他指令访问存储器的注意事项。
以下是总是导致退出的说明:
- 邀请
- INVVPID
- VMCALL
- VMCLEAR
- VMLAUNCH
- VMPTRLD
- VMPTRST
- VMRESUME
- VMXOFF
- VMXON
以下说明可以退出:
- CLTS
- ENCLS
- ENCLV
- HLT
- IN,INS / INSB / INSW / INSD,OUT,OUTS / OUTSB / OUTSW / OUTSD
- INVLPG
- INVPCID
- LGDT,LIDT,LLDT,LTR,SGDT,SIDT,SLDT,STR
- LMSW
- MONITOR
- CR3中的MOV
- 来自CR8的MOV
- 从MOV到CR0
- MOV到CR3
- MOV到CR4
- MOV到CR8
- MOV DR
- MWAIT
- 暂停
- RDMSR
- RDPMC
- RDRAND
- RDSEED
- RDTSC
- RDTSCP
- RSM
- TPAUSE
- UMWAIT
- VMREAD
- VMWRITE
- WBINVD
- WRMSR
- XRSTORS
- XSAVES
最后,这些也是退出的其他来源:
- 例外
- 三重故障
- 外部中断
- 不可屏蔽中断(NMI)
- INIT信号
- 启动IPI(SIPI)
- 任务开关
- VMX抢占计时器
- 中断窗口退出
- NMI窗口退出
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。