windows核心程式設計-程序的控制代碼和如何獲得
阿新 • • 發佈:2019-01-22
程序控制代碼不同於程序核心物件的控制代碼
程序核心物件控制代碼:代表整個程序的
程序控制代碼:exe或者dll裝入某個程序的地址空間,有唯一的例項控制代碼,也可以叫做模組控制代碼
程序控制代碼的本質是程序模組在程序地址空間中的首地址!
一:GetModuleFileName
DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, //程序控制代碼 _Out_ LPTSTR lpFilename, //檔名 _In_ DWORD nSize //pszPath指向的記憶體的大小 );如何獲得一個程序或者執行檔案的模組名呢
通過GetModuleHandleName函式
二:獲得程序控制代碼
獲得程序控制代碼的方式
1、GetModuleHandle函式
2、WinMain函式的第一個引數hInstance
3、使用extern "C" HANDLE __ImageBase;
GetModuleHandle函式:
1、只檢查本程序的地址空間,不檢查別的地址空間
2、當引數為NULL時候,這個控制代碼就是當前程式的起始地址
#include<windows.h> #include<tchar.h> extern "C" HANDLE __ImageBase;//這是一個偽變數,可以看成當前模組的起始地址 int main() { HMODULE hModule = GetModuleHandle(L"Kernel32.dll");//獲得這個模組的控制代碼 _tprintf(L"%0x\n", hModule); //CloseHandle(hModule);模組控制代碼不要釋放 //如何獲得當前程序控制代碼 HMODULE hCurrent_Module = GetModuleHandle(NULL);//這個控制代碼就是當前程式的起始地址 _tprintf(L"%0x\n", hCurrent_Module); /*在DLL中用這個好些*/ _tprintf(L"%0x\n",& __ImageBase);//直接列印全域性變數,就可以獲得當前模組控制代碼 TCHAR filename[MAX_PATH]; GetModuleFileName(hCurrent_Module, filename, MAX_PATH); //獲取檔名路徑 _tprintf(L"%s\n", filename); _gettchar(); return 0; }