C 如何检测是否存在特定于型号的寄存器

C 如何检测是否存在特定于型号的寄存器,c,x86,intel,virtualization,msr,C,X86,Intel,Virtualization,Msr,我试图检查IA32_VMX_EPT_VPID_CAP(48CH)中是否有一点是明确的,但在某些情况下,我使用的硬件本身没有msr(q9300),我会出现SEGFULT。我想知道是否有一个指示或“好”的方式来检查msr是否存在于第一位。我知道我可能可以处理segfault,或者检查CPU模型,并将其与一个准备好的表进行比较,该表包含了CPU和msr,但这些解决方案对我来说似乎有点混乱。我查阅了《英特尔手册》,但没有找到任何参考资料来检查它。是否有比上述方法更合适的约定或方法?摘自《英特尔SDM》第

我试图检查IA32_VMX_EPT_VPID_CAP(48CH)中是否有一点是明确的,但在某些情况下,我使用的硬件本身没有msr(q9300),我会出现SEGFULT。我想知道是否有一个指示或“好”的方式来检查msr是否存在于第一位。我知道我可能可以处理segfault,或者检查CPU模型,并将其与一个准备好的表进行比较,该表包含了CPU和msr,但这些解决方案对我来说似乎有点混乱。我查阅了《英特尔手册》,但没有找到任何参考资料来检查它。是否有比上述方法更合适的约定或方法?

摘自《英特尔SDM》第a.10节:

IA32_VMX_EPT_VPID_CAP MSR存在于支持EPT或VPID的处理器上

因此,您应该检查以下内容:

  • IA32_VMX_PROCBASED_CTLS MSR的第63位为1(支持辅助控制)
  • IA32_VMX_PROCBASED_CTLS2 MSR的第33位或第37位为1(支持EPT或VPID)

来自英特尔SDM第A.10节:

IA32_VMX_EPT_VPID_CAP MSR存在于支持EPT或VPID的处理器上

因此,您应该检查以下内容:

  • IA32_VMX_PROCBASED_CTLS MSR的第63位为1(支持辅助控制)
  • IA32_VMX_PROCBASED_CTLS2 MSR的第33位或第37位为1(支持EPT或VPID)

也许你的意思是
IA32_VMX_EPT_VPID_CAP
?IA64=安腾,而不是x86。另外,
IA64_-VMX_-EPT_-VPID_-CAP
的谷歌点击率为零,因为我在谷歌将这个问题编入索引之前设法进行了搜索:PYep,对不起,打错了。也许你的意思是
IA32_-VMX_-EPT_-VPID_-CAP
?IA64=安腾,而不是x86。另外,
IA64_-VMX_-EPT_-VPID_-CAP
的谷歌点击率为零,因为我在谷歌将这个问题编入索引之前设法进行了搜索:PYep,对不起,我打错了。