本文共计1632个字,预计阅读时长6.1分钟。
代码如下:
//通过进程ID获取某模块的基址 void GetMoudleBaseAddr(DWORD dwPid, const TCHAR* szDllName, DWORD& dwDllBase) { HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 进程快照句柄 PROCESSENTRY32 pi = { sizeof(PROCESSENTRY32) }; // 快照信息 // 遍历进程while (Process32Next(hProcessSnap, &pi)) { if (pi.th32ProcessID == dwPid) { HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pi.th32ProcessID); // 模块快照句柄 MODULEENTRY32 me32 = { 0 }; // 模块入口 me32.dwSize = sizeof(MODULEENTRY32); // 申请空间 // 打印模块名 while (::Module32Next(hModuleSnap, &me32)) { if (_tcscmp(me32.szModule, szDllName) == 0) { dwDllBase = (DWORD)me32.modBaseAddr; break; } } return; } }
}
//通过进程名获取某模块的基址 void GetMoudleBaseAddr(const TCHAR szProcName, const TCHAR szDllName, DWORD& dwDllBase) { HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 进程快照句柄 PROCESSENTRY32 pi = { sizeof(PROCESSENTRY32) }; // 快照信息 // 遍历进程
while (Process32Next(hProcessSnap, &pi)) { if (_tcscmp(pi.szExeFile, szProcName) != 0) { continue; } HANDLE hModuleSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pi.th32ProcessID); // 模块快照句柄 MODULEENTRY32 me32 = { 0 }; // 模块入口 me32.dwSize = sizeof(MODULEENTRY32); // 申请空间 // 打印模块名 while (::Module32Next(hModuleSnap, &me32)) { if (_tcscmp(me32.szModule, szDllName) == 0) { dwDllBase = (DWORD)me32.modBaseAddr; break; } } break; }
}
获取任意进程任意模块的基址