INVEPT指令执行伪代码

31.3 VMX INSTRUCTIONS 

INVEPT— Invalidate Translations Derived from EPT

if ( (不在VMX模式) | CR0.PE==0 | (rflags.vm==1) | (IA32EFFER.LMA==1 & cs.L==0)
{
    #UD ;//无法识别的指令
} 
elseif( 在vmx non-root模式 )
{
    发生VM-EXIT事件;

}
esleif( CPL>0 )//当前请求级别不是0环
{

    #GP(0);//异常
}

else
{
    INVEPT_TYPE =寄存器提供的值;
    
    if(IN32_VMX_EPT_VPID_CAP 寄存器表示不支持你传过来的 INVEPT_TYPE )
    {    
        VMfail( INVEPT/INVVPID 无效的操作);
    }   
    else  //INVEPT_TYPE必须时1和2
     {
       NVEPT_DESC =内存操作数给的值;
       EPTP=NVEPT_DESC[63:0];
       switch(INVEPT_TYPE)
        {    
            case 1://单条目刷新        
                if(VM execution control. enable EPT==1 )
                 {
                    if( EPTP value不符合要求)
                    {
                        VMfail( INVEPT/INVVPID 无效的操作);
                    }
                  }
                else
                    {
                            使得EPTP[51:12]对于的映射失效;
                             VMsucceed;
                     }
                break;
            case 2://所有条目失效
                使得所有的eptp映射失效
                VMsucceed;
                
         }  

     }
}

VMsucceed;VMfail(ErrorNumber): VMfail(ErrorNumber):

参考31.2 CONVENTIONS
VMsucceed:
CF := 0;
PF := 0;
AF := 0;
ZF := 0;
SF := 0;
OF := 0;
VMfail(ErrorNumber):
IF VMCS pointer is valid
THEN VMfailValid(ErrorNumber);
ELSE VMfailInvalid;
FI;
VMfailInvalid:
CF := 1;
PF := 0;
AF := 0;
ZF := 0;
SF := 0;
OF := 0;
VMfailValid(ErrorNumber):// 仅在当前存在VMCS时执行
CF := 0;
PF := 0;
AF := 0;
ZF := 1;
SF := 0;
OF := 0;
Set the VM-instruction error field to ErrorNumber;

假如你不知道我在写什么,你就不知道我在写什么

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值