Xen虚拟机检测

应用程序如何获知自己是否工作在Xen 虚拟机中呢?
使用CPUID指令可以完成该任务。

uint32_t eax, ebx, ecx, edx, pages, msr, i;
char signature[13];
cpuid(0x40000000, &eax, &ebx, &ecx, &edx);
*(uint32_t*)(signature + 0) = ebx;
*(uint32_t*)(signature + 4) = ecx;
*(uint32_t*)(signature + 8) = edx;
signature[12] = 0;
if (strcmp("XenVMMXenVMM", signature) || (eax < 0x40000002)) {
  printk("%s\n", signature);
  return -EINVAL;
}

在Xen中,当使用0x40000000作为CPUID的参数时,能够得到“XenVMMXenVMM”这样的字符串。这是在Xen源码中定义的。

\xen\include\public\arch-x86\cpuid.h
**#define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */
**#define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */
**#define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */******
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值