assembly - 来宾虚拟机 - 退出
问题描述
对于以下一系列说明,是否可以退出?哪条指令可能导致退出以及哪种退出?特定类型的退出的原因是什么?
da3bd <mystery>:
da3bd: 4c 33 1c 24 xor (%rsp),%r11
da3c1: 49 89 d0 mov %rdx,%r8
da3c4: 49 89 c9 mov %rcx,%r9
da3c7: 4d 85 c0 test %r8,%r8
da3ca: 75 11 jne da3dd
da3cc: 48 c7 c7 16 6c 00 00 mov $0x6c16,%rdi
da3d3: 48 c7 c0 74 a6 6d 81 mov $0x816da674,%rax
da3da: 0f 79 f8 vmwrite %rax,%rdi
da3dd: 9c pushf
da3de: 58 pop %rax
假设页面包含在 CPL0 中运行的神秘函数,并且包含地址(例如 0xda000 – 0xdafff)的页面存在于内存中,并配置了所有页表。
解决方案
请注意,此图表仅适用于问题中的特定代码。它不是对这些类型的指令可能出现的退出类型的一般描述。
指令类型 | 可能的虚拟机退出 | |
---|---|---|
1 | reg,reg reg,imm jmp 短 |
调试异常 MTF VMX 定时器 外部中断 NMI INIT SMI |
2 | 内存读取 | 同 #1 EPT 违规 EPT 配置错误 页面错误异常 堆栈段异常 双错误异常 三重错误异常 |
3 | 内存写入 | 与#2 PML full相同 |
4 | 函数中的第一条指令 | 同 #2 中断窗口 NMI 窗口 |
5 | vmwrite | 与#1 vmwrite相同 |
显然,其中大多数都不是由特定指令“引起”的。
推荐阅读
- ios - 如何从 Windows 生成没有 xcode 的 ipa 文件?如果可能的话
- android - RecyclerView 滚动中的 Listview 无法正常工作?
- php - 返回 lastInsertID 时出现“无效的参数号:未绑定任何参数”
- sql-server - 使用 BCP 将文件作为 ANSI 输出为 UTF-8 MSSQL 2012
- microsoft-graph-api - 微软通知网络挂钩
- ios - 如何在 swift 4 中使用 Share Class 过滤 searchController 中的数据
- c# - 将文本框值添加到 WPF 中的列表视图
- ansible - for 循环不适用于 ansible shell 模块
- function - WinForm 中的全局变量
- java - 在同一列的 achilles cassandra 中使用 @ClusteringColumn 和 @Index