实现获取指定进程中特定模块的枚举以及得到该模块入口地址等信息。
实现代码:
HMODULE GetProcessModuleHandle(DWORD pid, CONST TCHAR* moduleName){ MODULEENTRY32 moduleEntry; HANDLE handle = NULL; handle = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid); 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)){ string s_szExeFile = process.szExeFile; if(s_szExeFile == "QQMusic.exe"){ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, process.th32ProcessID); cout << "QQMusic.dll的模块基地址:" << GetProcessModuleHandle(process.th32ProcessID,"QQMusic.dll") << endl; } } }
|
效果图:
