代码如下:
[pre]
//通过进程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;
}
}
[/pre] |