Intel处理器虚拟化技术浅析2VMCS初始化
VMCS区域:guest区域,从真实系统进入虚拟系统时,CPU需要加载的数据,包括很多CPU内部的寄存器,通用寄存器,控制寄存器,调试寄存器之类。host区域,就是从虚拟系统返回真实系统时CPU需要加载的寄存器。控制区域进入虚拟系统后,处理器的行为由这个区域的字段控制。虚拟机退出时的控制区域。控制怎样进入虚拟机。控制CPU以什么样的方式退出到真实系统。从虚拟机退出到真实系统时,虚拟系统退出的原因,或者失败时的错误代码。
上一节提过VMCS区域需要专门的汇编指令才能读取,下面我们填充VMCS区域。
我们看下64位系统段选择子的描述:SEGMENTSELECTORrecordLimit:32,SEGMENTGPA:4,SEGMENTattrG:1,SEGMENTattrDB:1,SEGMENTattrL:1,SEGMENTattrAVL:1,SEGMENTattrP:1,SEGMENTattrDPL:2,SEGMENTattrS:1,SEGMENTattrTypecodeordata:1,SEGMENTattrTypeCRA:3,selectorindex:13,selectorTI:1,selectorRPL:2
;selectorTI(TableIndicator)描述符表索引位,当TI0时从GDT查找1时从LDT查找。RPL:权限级别03
vmxvmwritesegprocvalueHOSTXXSELECTOR:qword,SELECTORname:qwordmovrax,SELECTORnamemovzxeax,axandeax,0f8h;清低3位,RPL0从GDT(全局描述符表)加载段描述符cdqemovrcx,valueHOSTXXSELECTORvmwritercx,raxretvmxvmwritesegendpinvokevmxvmwriteseg,HOSTESSELECTOR,ESinvokevmxvmwriteseg,HOSTCSSELECTOR,CSinvokevmxvmwriteseg,HOSTSSSELECTOR,SSinvokevmxvmwriteseg,HOSTDSSELECTOR,DSinvokevmxvmwriteseg,HOSTFSSELECTOR,FSinvokevmxvmwriteseg,HOSTGSSELECTOR,GS
任务寄存器需要单独操作:strraxinvokevmxvmwriteseg,HOSTTRSELECTOR,RAXmovrcx,MSRIA32EFER
使能ExtendedFeatureEnableRegister;rdmsrshlrdx,20horrax,rdxmovrbx,raxinvokevmxvmwrite,HOSTEFER,rbx
cr0与cr4的固定位:
MSRIA32VMXCR0FIXED0、MSRIA32VMXCR0FIXED1字段里规定了guest里cr0控制寄存器的数值要求。movrcx,MSRIA32VMXCR0FIXED1rdmsrshlrdx,20horrax,rdxmovrbx,cr0andrbx,raxmovrcx,MSRIA32VMXCR0FIXED0rdmsrshlrdx,20horrax,rdxorrbx,raxvmwrite,HOSTCR0,rbxvmwrite,HOSTCR3,cr3movrcx,MSRIA32VMXCR4FIXED1rdmsrshlrdx,20horrax,rdxmovrbx,cr4andrbx,raxmovrcx,MSRIA32VMXCR4FIXED0rdmsrshlrdx,20horrax,rdxorrbx,raxvmwrite,HOSTCR3,rbx
从全局描述符表查找任务寄存器的基址:sgdtgdtbaseleardi,gdtbasemovrbx,〔rdi2〕;路过Limitstrrdx;tssinvokeGetSegmentDescriptor,addrSEGMENTSELECTOR,rdx,rbxvmwrite,HOSTTRBASE,SEGMENTSELECTOR。BASE
填充fs寄存器字段:(64位系统下fs基本是兼容32个应用程序而保留)movecx,MSRFSBASErdmsrshlrdx,20horrax,rdxvmwrite,HOSTFSBASE,rax
填充gs寄存器字段:(64位系统非常重要的寄存器,相当于32个系统里的fs寄存器)movecx,MSRGSBASErdmsrshlrdx,20horrax,rdxvmwrite,HOSTGSBASE,rax
填充全局描述符表字段:sgdtgdtbaseleardi,gdtbasemovrbx,〔rdi2〕vmwrite,HOSTGDTRBASE,rbx
填充中断描述符表字段:sidtidtbaseleardi,idtbasemovrbx,〔rdi2〕vmwrite,HOSTIDTRBASE,rbxvmwrite,VMCSLINKPOINTER,1;不启用SMM双重监控处理机制vmwrite,EXCEPTIONBITMAP,0
填充guest段选择子、段限、访问权限、段基址。sgdttbyteptrgdtbaseleardi,gdtbasemovrbx,〔rdi2〕invokeFillGuestSelectorData,rbx,0,esinvokeFillGuestSelectorData,rbx,1,csinvokeFillGuestSelectorData,rbx,2,ssinvokeFillGuestSelectorData,rbx,3,dsinvokeFillGuestSelectorData,rbx,4,fsinvokeFillGuestSelectorData,rbx,5,gssldtraxinvokeFillGuestSelectorData,rbx,6,raxstrraxinvokeFillGuestSelectorData,rbx,7,rax
填充fs寄存器字段:movecx,MSRFSBASErdmsrshlrdx,20horrax,rdxvmwrite,GUESTFSBASE,rax
填充gs寄存器字段:movecx,MSRGSBASErdmsrshlrdx,20horrax,rdxvmwrite,GUESTGSBASE,rax
填充控制字段:movecx,MSRIA32VMXTRUEPROCBASEDCTLSRdmsr;eax存入的是允许为零的位允许为零的位已经被标0(其余的位必须为1)edx存入的是允许为1的位允许为1的位已经被标1(其余的位必须为0)Movecx,CPUBASEDACTIVATEMSRBITMAPCPUBASEDACTIVATESECONDARYCONTROLSmovrbx,rcxorecx,eaxandecx,edxvmwrite,CPUBASEDVMEXECCONTROL,rcxmovecx,MSRIA32VMXPROCBASEDCTLS2rdmsrmovrcx,CPUBASEDCTL2RDTSCP;RDTSCP这个指令的用途,它是RDTSC的升级版,在一些比较新的处理器中用于获;得CPU时间计数器。;SECONDARYEXECENABLERDTSCPSECONDARYEXECENABLEINVPCID;SECONDARYEXECXSAVES;;如果不设置rdtscexiting和usetscoffsetting的话,那么rdtscp会正常执行,因此这;里其实可以只设置SECONDARYEXECENABLERDTSCP,其他不设置。;这样的话rdtscp指令的执行并不会导致vmexit事件的发生。这里我尝试了只将;SECONDARYEXECENABLERDTSCP控制位置位,其他位不动,发现完全不会进入到;vmexit事件中。;因此如果图省事的话其实可以只将SECONDARYEXECENABLERDTSCP置位,其他位不;进行操作即可。orrcx,CPUBASEDCTL2ENABLEINVPCID;如果invlpgexiting没有被设置,那么也不会导致vmexit事件的发生。因此这里其实;也可以只设置SECONDARYEXECENABLEINVPCID,不设置invlpgexiting。这样可以;让其正常执行,不用在vmexit处理函数中对其进行复杂的处理。orrcx,CPUBASEDCTL2ENABLEXSAVEXRSTORSorrcx,CPUBASEDCTL2ENABLEEPTorrcx,CPUBASEDCTL2ENABLEVPIDmovrbx,rcxorecx,eaxandecx,edxandebx,edxorebx,eaxvmwrite,SECONDARYVMEXECCONTROL,rcxvmwrite,PINBASEDVMEXECCONTROL,0movecx,MSRIA32VMXTRUEEXITCTLSRdmsrmovrcx,VMEXITIA32EMODEVMEXITACKINTRONEXIT;OnprocessorsthatsupportIntel64architecture,thiscontroldetermineswhetheralogical;processorisin64bitmodeafterthenextVMexit。ItsvalueisloadedintoCS。L,andecx,edxorecx,eaxvmwrite,VMEXITCONTROLS,rcxmovecx,MSRIA32VMXTRUEEXITCTLSrdmsrmovrcx,VMEXITIA32EMODEVMEXITACKINTRONEXIT;Onprocessorsthat;supportIntel64architecture,thiscontroldetermineswhetheralogical;processorisin64bitmodeafterthenextVMexit。ItsvalueisloadedintoCS。L,andecx,edxorecx,eaxvmwrite,VMEXITCONTROLS,rcx
;。配置vmentry控制域movecx,MSRIA32VMXTRUEENTRYCTLSrdmsrmovrcx,VMENTRYIA32EMODE;64系统必须填,参考【处理器虚拟化技术】(第212页)andecx,edxorecx,eaxvmwrite,VMENTRYCONTROLS,rcx;
以下为填充guest区域和填充host区域基本相同movrcx,MSRIA32EFERrdmsrshlrdx,20horrax,rdxmovrbx,raxvmwrite,GUESTEFER,rbxmovrcx,MSRIA32VMXCR0FIXED1rdmsrshlrdx,20horrax,rdxmovrbx,cr0andrbx,raxmovrcx,MSRIA32VMXCR0FIXED0rdmsrshlrdx,20horrax,rdxorrbx,raxvmwrite,GUESTCR0,rbxmovrcx,MSRIA32VMXCR4FIXED1rdmsrshlrdx,20horrax,rdxmovrbx,cr4andrbx,raxmovrcx,MSRIA32VMXCR4FIXED0rdmsrshlrdx,20horrax,rdxorrbx,raxvmwrite,GUESTCR4,rbxvmwrite,GUESTCR3,cr3invokevmxvmwrite,GUESTDR7,0400hsgdtgdtbaseleardi,gdtbasemovrbx,〔rdi2〕vmwrite,GUESTGDTRBASE,rbx;GetGDTBase());movzxeax,wordptr〔rdi〕vmwrite,GUESTGDTRLIMIT,rax;GetGDTLimit());sidtidtbaseleardi,idtbasemovrbx,〔rdi2〕vmwrite,GUESTIDTRBASE,rbx;GetIDTBase());movzxeax,wordptr〔rdi〕vmwrite,GUESTIDTRLIMIT,rax;GetIDTLimit());pushfqpopraxvmwrite,GUESTRFLAGS,rax;movrsi,currentvmStatemovrdx,〔rsiVirtualMachineState。MSRBitMapPhysical〕vmwrite,MSRBITMAP,rdx;vmStateMSRBitMapPhysical);MSRBitmap的某位为0时访问;该位所对应的MSR不会产生VMexitvmwrite,GUESTRSP,GuestStack;(ULONG64)GuestStack);setupguestspmovrax,〔rsiVirtualMachineState。VmxGuestRip〕vmwrite,GUESTRIP,rax;addrVMXRestoreState;setupguestipmovrsi,currentvmStatemovrdx,〔rsiVirtualMachineState。VMMStack〕movrax,VMMSTACKSIZE;addrdx,4000h;;堆栈向下增长,所以要增加,空间是0VMMSTACKSIZE所以要减1vmwrite,HOSTRSP,rdx;((ULONG64)vmStateVMMStackVMMSTACKSIZE1));;host的rsp必须使用自己申请的一块内存。如果还是使用guest退出时的rsp,一定会;导致guest中堆栈被破坏从而导致不可预知的结果learax,VMExitHandlervmwrite,HOSTRIP,rax;addrVMExitHandler
某些处理函数没有给出,会在最后的源码中展示。
来自网络的图片:
所罗门群岛拒绝美海警船停靠,外媒炒作为中国切断与美国联系文观察者网刘程辉美国星条旗报8月25日称,所罗门群岛政府最近拒绝了一艘美国海岸警卫队巡逻艇的例行靠港请求,该艇不得不改道前往巴布亚新几内亚进行补给。报道还渲染,这进一步引发了外界对
罗晋害怕的角色又来了过去特别害怕演的两个职业,一个是律师,一个是医生。演员罗晋说因为涉及到很多专业词汇,这不是一件容易的事。让不少观众夸赞有剧抛脸的罗晋,近来更多接触现实题材剧,塑造了各行各业的角色。
山西前书记胡富国离晋时数万人相送,84岁与耿彦波看戏精神焕发对于山西人而言,胡富国绝对是一个再熟悉不过的名字。截至1999年6月胡富国调任北京之时,他已经主政山西长达七年。对于整整一代山西人而言,说起省委书记省长,如果不加姓氏那就只有一个人
普京签署法令将俄武装力量人员数量增至115万人俄乌战争仍在持续中,前段时间一直传出俄罗斯兵源告竭的消息,而8月25日普京签署法令将武装力量人员数量增至115万人,可以说再次将这个消息得到了一次确认。对于这样的一个消息,通过评论
百县榜2022年度县市夜经济繁荣百佳样本发布!经济增长新夜态打造白黑全时全龄新经济地标,形成以地域文化特色业态为核心竞争力的商业街区,促进商贸文化旅游娱乐等产业相互融合,对于夜经济有着极大促进和提升作用。夜宵K歌逛庙会书店健身音乐会夜经济不
下半年中国经济应着重增强内生动能主持人徐蔚冰嘉宾刘元春上海财经大学校长陆挺野村证券中国首席经济学家叶银丹中国银行研究院研究员受国内外多重因素影响,7月份多项经济指标增速较6月份有所回落,下半年稳增长压力加大。近日
人民就是江山丨不寻常的家常话,画出老百姓稳稳的幸福开栏语江山就是人民,人民就是江山。中国甘肃网推出沿着总书记的足迹人民就是江山融媒报道,回看2500万甘肃人民牢记殷殷嘱托,奋发自强,为建设幸福美好新甘肃开创富民兴陇新局面奋发进取,
持续严重干旱拖累多国经济原标题从影响农业生产,到河流断航威胁,再到旅游被迫暂停(引题)持续严重干旱拖累多国经济(主题)梁凡7月以来,北半球多地遭遇极端高温持续侵袭,随之而来的严重干旱,更是给民众生活与经济
开幕倒计时7天丨艺术是什么?艺术是什么?视频加载中艺术是什么?是文化的结晶是文明的缩影。它像辽远天际的星空,它像宽广辽阔的大海,它更像多情广袤的大地。有人说它遥不可及,有人讲它高深莫测。但是,每一方舞台,每一
经济学家马光远中国企业的死去,不是因为困难,而是太牛逼最近任正非在内部讲话中提到将活下来作为第一要务,不料却引起许多人批评传递寒气。对此,著名经济学家马光远为任老爷子打抱不平,他盛赞华为忧患意识。并讽刺国内大多数企业倒下不是因为困难,
咄咄怪事神怪趣事连载(59)作者吴德珠59。南无阿弥陀佛我们发现寺庙里的和尚念经与有的人家请念经的做佛事,念经的人经常念南无阿弥陀佛。他们为什么要念南无阿弥陀佛,南无阿弥陀佛是什么意思呢?请看下面两个传说。据传说,在很