• 2267阅读
  • 1回复

填充VMCS需要注意的事项 [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-02


填充VMCS需要注意的事项

发表于 2015 年 12 月 11 日

阶段一:对VMLAUNGH和VMRESUME指令进行检查
阶段二:对Control和Host进行检查
阶段三:对Guest进行检查,并且加载MSR
其实填充VMCS很简单,根据Intel手册的顺序来填充就行,如果VMLAUNGH失败,会往InstructionError里填充一个错误号,7代表Control字段(执行控制,VM-ENTRY控制,VM-EXIT控制)错误,8代表host区域错误,但是Control检查和Host检查并不是顺序检查的
Intel手册是这么说的:
These checks may be performed in any order, Thus, an indication by error number of one cause(for example host state) does not imply that there are not also other errors . Different processors may thus give different error numbers for the same VMCS
这种检查并不是按序检查的,因此,这个错误号并不代表着没有其他错误了,不同的处理器会给相同的VMCS予以不同的错误号
我故意把Host注释掉,然后Control的关键处改掉,下面分别是位于虚拟机的XP系统和物理机的win7系统给出的错误号
XP:

Win7:

将Control和host放在一起检查,是为了确保HOST执行环境是正确的,如果Guest检查不通过 ,并不会产生错误号,而是转到Host-RIP执行,EXIT-Reason的最高位置一

0x80000021的二进制就是1000 0000 0000 0000 0000 0000 0010 0001B
这里最高位是1,代表是在VM-ENTRY过程中引发了VM-EXIT,0x21的十进制是33: 在VM-ENTRY时,由于无效guest-state字段而导致VM-exit

善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线v2680267313

只看该作者 沙发  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个