BOOL __is_in_vmware()
{
BYTE var_4 = 0;
__asm
{
push ecx;
push ebx;
push esi;
push edi;
push edx;
push ecx;
push ebx;
mov eax, 'VMXh';
mov ebx, 0;
mov ecx, 0Ah;
mov edx, 5658h;
in eax, dx; //vmware中的内核驱动的某个sys中应该处理了特权指令异常,然后根据指令判断是干什么,然后修改寄存器后返回ring3
cmp ebx, 'VMXh';
setz byte ptr [var_4];
pop ebx;
pop ecx;
pop edx;
pop edi
pop esi
pop ebx
pop ecx;
};
return var_4;
}
BOOL IsVmware()
{
BOOL bRet = FALSE;
__try
{
bRet = __is_in_vmware();//非vmware下in指令会产生特权指令异常,要处理一下
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
bRet = FALSE;
}
return bRet;
}
{
BYTE var_4 = 0;
__asm
{
push ecx;
push ebx;
push esi;
push edi;
push edx;
push ecx;
push ebx;
mov eax, 'VMXh';
mov ebx, 0;
mov ecx, 0Ah;
mov edx, 5658h;
in eax, dx; //vmware中的内核驱动的某个sys中应该处理了特权指令异常,然后根据指令判断是干什么,然后修改寄存器后返回ring3
cmp ebx, 'VMXh';
setz byte ptr [var_4];
pop ebx;
pop ecx;
pop edx;
pop edi
pop esi
pop ebx
pop ecx;
};
return var_4;
}
BOOL IsVmware()
{
BOOL bRet = FALSE;
__try
{
bRet = __is_in_vmware();//非vmware下in指令会产生特权指令异常,要处理一下
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
bRet = FALSE;
}
return bRet;
}