Code:
UINT_PTR CMemory::GetModuleBaseAddress(DWORD iProcId, char* DLLName)
{
HANDLE hSnap;
MODULEENTRY32 xModule;
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, iProcId);
xModule.dwSize = sizeof(xModule);
if (Module32First(hSnap, &xModule))
{
while (Module32Next(hSnap, &xModule))
{
if (strcmp((char*)xModule.szModule, DLLName) == 0)
{
CloseHandle(hSnap);
return (UINT_PTR)xModule.modBaseAddr;
}
}
}
CloseHandle(hSnap);
return 0;
}
Diese Funktion soll eigentlich die Base Address des oben als char* angegebenen Moduls zurückgeben. Der Prozess ist über folgende Handle geöffnet:
Code:
PROC_HANDLE = OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, false, PROC_ID);
Nun zur Frage:
die Funktion gibt in jeder Hinsicht "0" zurück. Aufrufen tu ich sie halt ganz normal...
Code:
BaseAddr = GetModuleBaseAddress(PROC_ID, "Wow.exe"); cout << "WoW MainModule located at: " << BaseAddr << endl;






