實現代碼:
HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName){ // 根據 PID 、模塊名(需要寫后綴,如:".dll"),獲取模塊入口地址。
MODULEENTRY32 moduleEntry;
HANDLE handle = NULL;
handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); // 獲取進程快照中包含在th32ProcessID中指定的進程的所有的模塊。
if (!handle) {
CloseHandle(handle);
return NULL;
}
ZeroMemory(&moduleEntry, sizeof(MODULEENTRY32));
moduleEntry.dwSize = sizeof(MODULEENTRY32);
if (!Module32First(handle, &moduleEntry)) {
CloseHandle(handle);
return NULL;
}
do {
if (_tcscmp(moduleEntry.szModule, moduleName) == 0) {return moduleEntry.hModule;}
} while (Module32Next(handle, &moduleEntry));
CloseHandle(handle);
return 0;
}
int main(){
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); // 進程快照句柄
PROCESSENTRY32 process = {sizeof(PROCESSENTRY32)}; // 存放進程快照的結構體
// 遍歷進程
while (Process32Next(hProcessSnap,&process)){
// 找到 QQMusic.exe 進程
string s_szExeFile = process.szExeFile; // char* 轉 string
if(s_szExeFile == "QQMusic.exe"){
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process.th32ProcessID); // 進程句柄
cout << "QQMusic.dll的模塊基地址:" << GetProcessModuleHandle(process.th32ProcessID,"QQMusic.dll") << endl;
}
}
}
效果圖: