阅读:7462回复:4
检测当前系统是运行在虚拟机下还是真实硬件下1.我想检测当前windows系统运行在什么环境下,是运行在真实硬件的电脑上面还是运行在虚拟机下面; 2.如果是在虚拟机下面运行,应该怎么判断当前系统是虚拟机; 3.若是根据设备名称来判断当前系统是虚拟机的的话,可不可以修改虚拟机的设备名称,是怎么修改?; 4.在CSDN上面找了以前的一个贴子,是用汇编语言写的,不知道这个。。。。 http://topic.csdn.net/t/20060808/16/4935495.html# 我调试了一下,出错,我对汇编不认识,请求指点 |
|
沙发#
发布于:2009-01-17 23:21
1. 通过cpuid指令返回结果,可以知道当前机器是否支持虚拟机。
2. 在虚拟机(guest os)中,cpuid指令是被模拟的,一般guest不再支持在guest中启动虚拟机 3. 虚拟机种的设备大多是qemu的,也可以用来判断。想修改?先学习qemu. 4. 还没看,不知道是不是:) |
|
|
板凳#
发布于:2009-04-03 15:33
[转]
大家或许都会疑惑,到底怎样用代码检测当前系统运行在虚拟机中,如VMWare等。 我在http://www.codeproject.com/system/VmDetect.asp发现了一个VC++6写的代码,用的是嵌套汇编。 后来请装配脑袋迁移到VC++7.1并封装成模块,调用很方便。 下载地址:http://www.cnblogs.com/Files/unruledboy/IsInVM%20standard.zip 或许大家会纳闷:这个代码到底有什么实际用途,老实说,作者也不知道~~ 他只关心实现,不关心应用:) |
|
地板#
发布于:2009-04-03 15:35
// IsInsideVPC's exception filter
DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep) { PCONTEXT ctx = ep->ContextRecord; ctx->Ebx = -1; // Not running VPC ctx->Eip += 4; // skip past the "call VPC" opcodes return EXCEPTION_CONTINUE_EXECUTION; // we can safely resume execution since we skipped faulty instruction } // High level language friendly version of IsInsideVPC() bool IsInsideVPC() { bool rc = false; __try { _asm push ebx _asm mov ebx, 0 // It will stay ZERO if VPC is running _asm mov eax, 1 // VPC function number // call VPC _asm __emit 0Fh _asm __emit 3Fh _asm __emit 07h _asm __emit 0Bh _asm test ebx, ebx _asm setz [rc] _asm pop ebx } // The except block shouldn't get triggered if VPC is running!! __except(IsInsideVPC_exceptionFilter(GetExceptionInformation())) { } return rc; } |
|
地下室#
发布于:2009-04-03 15:35
bool IsInsideVMWare()
{ bool rc = true; __try { __asm { push edx push ecx push ebx mov eax, 'VMXh' mov ebx, 0 // any value but not the MAGIC VALUE mov ecx, 10 // get VMWare version mov edx, 'VX' // port number in eax, dx // read port // on return EAX returns the VERSION cmp ebx, 'VMXh' // is it a reply from VMWare? setz [rc] // set return value pop ebx pop ecx pop edx } } __except(EXCEPTION_EXECUTE_HANDLER) { rc = false; } return rc; } |
|