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;
}
VS2008 判斷環境是否是vmware的方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
VC中如何實現函數內部函數
nLif
2020-07-03 23:17:27
CreateProcess 創建explorer.exe失敗的原因簡單分析
nLif
2020-02-23 04:02:25
VC++中內聯同名類導致的棧破壞問題
nLif
2020-02-23 04:02:25