日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断程序是否运行在虚拟机中的代码

發布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断程序是否运行在虚拟机中的代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先我們要了解一下什么是虛擬機, 對虛擬機的通用解釋是通過軟件模擬的具有完整硬件系統功能的, 運行在一個完全隔離環境中的完整計算機系統. 通過虛擬機軟件, 你可以在一臺物理計算機上模擬出一臺或多臺虛擬的計算機, 這些虛擬機就像真正的計算機那樣進行工作, 例如你可以安裝操作系統, 安裝應用程序, 訪問網絡資源等等. 對于你而言, 它只是運行在你物理計算機上的一個應用程序, 但是對于在虛擬機中運行的應用程序而言, 它就像是在真正的計算機中進行工作. 因此, 當我在虛擬機中進行軟件評測時, 可能系統一樣會崩潰, 但是, 崩潰的只是虛擬機上的操作系統, 而不是物理計算機上的操作系統, 并且, 使用虛擬機的恢復功能, 我可以馬上恢復虛擬機到安裝軟件之前的狀態. 現在比較流行的虛擬機軟件有 VMWare 和 Microsoft Virtual PC , 它們都能在 Windows 系統上虛擬出多個計算機, 用于安裝 Windows 或其他操作系統. 相比而言, VMWare 不論是在多操作系統的支持上, 還是在執行效率上, 都比 Microsoft Virtual PC 明顯高出一籌. 但是 VMWare 沒有虛擬顯卡, 而是通過 VMWare Tools 才能用上高分辨率和真彩色. Microsoft Virtual PC 模擬了一個比較通用的顯卡:S3Trio32/64(4M), 這點看來比較通用, 易用性較好.?
??????以下主要代碼主要判斷程序是否在虛擬機環境中運行, 測試環境為 Windows 系統, 在 Windows XP SP2 + Microsoft Visual C++ 2003 下調試成功, 附編譯的檢測程序

// test.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include "windows.h"DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep); bool IsInsideVPC(); bool IsInsideVMWare(); int CheckVPC();int CheckVPC() {if (IsInsideVPC())MessageBox(NULL, "你在虛擬電腦Microsoft Virtual PC中!", "提示", MB_OK | MB_ICONINFORMATION);else if (IsInsideVMWare())MessageBox(NULL, "你在虛擬電腦VMWare中!", "提示", MB_OK | MB_ICONINFORMATION);elseMessageBox(NULL, "你在真實的電腦中!", "提示", MB_OK | MB_ICONINFORMATION);return 0; }DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep) {CONTEXT *ctx = ep->ContextRecord;ctx->Ebx = -1;ctx->Eip += 4;return EXCEPTION_CONTINUE_EXECUTION; }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_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; }bool IsInsideVMWare() {bool rc = true;__try{__asm{push edxpush ecxpush ebxmov eax, 'VMXh'mov ebx, 0mov ecx, 10mov edx, 'VX'in eax, dxcmp ebx, 'VMXh'setz[rc]pop ebxpop ecxpop edx}}__except (EXCEPTION_EXECUTE_HANDLER){rc = false;}return rc; }int _tmain(int argc, _TCHAR* argv[]) {return CheckVPC();return 0; }

總結

以上是生活随笔為你收集整理的判断程序是否运行在虚拟机中的代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。