我正在尝试获取exe的基础地址。 这适用于x86应用程序,但它使用x64进程为我提供了错误的起始地址。 我正在使用VS2012编译为在W7 x64上运行64位。
static uintptr_t dwGetModuleBaseAddress(DWORD dwProcessIdentifier, TCHAR *lpszModuleName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessIdentifier);
BYTE* dwModuleBaseAddress = 0;
if(hSnapshot != INVALID_HANDLE_VALUE)
{
MODULEENTRY32 ModuleEntry32 = {0};
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
if(Module32First(hSnapshot, &ModuleEntry32))
{
do
{
if(_tcsicmp(ModuleEntry32.szModule, lpszModuleName) == 0)
{
dwModuleBaseAddress = (BYTE*) ModuleEntry32.modBaseAddr;
printf("ModuleEntry32.szModule= %S\n", ModuleEntry32.szModule);
printf("dwModuleBaseAddress= %p\n", dwModuleBaseAddress);
break;
}
}
while(Module32Next(hSnapshot, &ModuleEntry32));
}
CloseHandle(hSnapshot);
}else{
std::cout << "CreateToolhelp32Snapshot Error: " << GetLastError() << std::endl;
}
return (uintptr_t) dwModuleBaseAddress;
}
这给了我137000000作为baseAdress,这是CheatEngine所说的错误。
我做错了什么? ModuleEntry32.modBaseAddr的返回值和BYTE *类型应该是正确的。
任何帮助都非常感谢!
此致