Следующее не проверено, но должно быть близко:
#include <windows.h>
#include <tlhelp32.h>
byte *getModuleBase(DWORD hProcId, TCHAR *lpModName)
{
byte *result = NULL;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, hProcId);
if (hSnap)
{
MODULEENTRY32 tm;
tm.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnap, &tm))
{
while (Module32Next(hSnap, &tm))
{
if (lstrcmpi(tm.szModule, lpModName) == 0)
{
result = tm.modBaseAddr;
break;
}
}
}
CloseHandle(hSnap);
}
return result;
}
Обратите внимание, что этот код не проверяет имя первого модуля. Если вы тоже хотите проверить первый модуль, вы можете попробовать что-то вроде этого:
if (Module32First(hSnap, &tm))
{
do
{
if (lstrcmpi(tm.szModule, lpModName) == 0)
{
result = tm.modBaseAddr;
break;
}
}
while (Module32Next(hSnap, &tm));
}