Xen虚拟机检测

来源:互联网 发布:数据监控软件 编辑:程序博客网 时间:2024/06/02 02:03

应用程序如何获知自己是否工作在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" */******
原创粉丝点击