Cloud&Virtualization

本文介绍了一个简单的C程序,用于检测Linux系统是否在虚拟机中运行,如Amazon EC2的Xen环境下。程序通过读取特定的CPU标识信息来判断底层的虚拟化平台,包括Xen、VMware、KVM等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.lovelucy.info/amazon-vpc-enterprise-cloud.html
http://www.vpsee.com/2011/01/how-to-detect-if-a-linux-system-running-on-a-virtual-machine/
http://blog.youkuaiyun.com/virone/article/details/4049786

Amazon EC2 用的是xen, ls /proc/xen 或者运行下面的detect程序.

#include <stdio.h>
#include <string.h>

#define HYPERVISOR_INFO 0x40000000

#define CPUID(idx, eax, ebx, ecx, edx) \
asm volatile ( \
"test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid" \
: "=b" (*ebx), "=a" (*eax), "=c" (*ecx), "=d" (*edx) \
: "0" (idx) );

int main(void)
{
unsigned int eax, ebx, ecx, edx;
char string[13];

CPUID(HYPERVISOR_INFO, &eax, &ebx, &ecx, &edx);
*(unsigned int *)(string+0) = ebx;
*(unsigned int *)(string+4) = ecx;
*(unsigned int *)(string+8) = edx;

string[12] = 0;
if (strncmp(string, "XenVMMXenVMM", 12) == 0) {
printf("xen hvm\n");
} else if (strncmp(string, "VMwareVMware", 12) == 0) {
printf("vmware\n");
} else if (strncmp(string, "KVMKVMKVM", 12) == 0) {
printf("kvm\n");
} else
printf("bare hardware\n");

return 0;
}

这段程序在Amazon EC2 vm上的运行结果是xen hvm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值