Witam
Próbuje napisać trainer do gry, która wykorzystuje DMA. Mam problem ze znalezieniem base address procesu z gry.
Adresy i pointery wyszukuje za pomocą Cheat Engine. W CE pisze np. "demigod.exe"+$offset i nie potrafię znaleźć tego adresu bazowego.
Przeszukałem to forum i jak i inne zagraniczne, znalazłem kilka opisów i żadne nie działają, prawdopodobnie z powodu windows 7 64bit.
Na pewno nie działa ten sposób:
function GetModuleBaseAddress(ProcessID: Cardinal; MName: String): Pointer;
var
Modules : Array of HMODULE;
cbNeeded, i : Cardinal;
ModuleInfo : TModuleInfo;
ModuleName : Array[0..MAX_PATH] of Char;
PHandle : THandle;
begin
Result := nil;
SetLength(Modules, 1024);
PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, ProcessID);
if (PHandle <> 0) then
begin
EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE), cbNeeded); //Getting the enumeration of modules
SetLength(Modules, cbNeeded div SizeOf(HMODULE)); //Setting the number of modules
for i := 0 to Length(Modules) - 1 do //Start the bucle
begin
GetModuleBaseName(PHandle, Modules[i], ModuleName, SizeOf(ModuleName)); //Getting the name of module
if AnsiCompareText(MName, ModuleName) = 0 then //If the module name match with the name of module we are looking for...
begin
GetModuleInformation(PHandle, Modules[i], @ModuleInfo, SizeOf(ModuleInfo)); //Get the information of module
Result := ModuleInfo.lpBaseOfDll; //Return the information we want (The image base address)
CloseHandle(PHandle);
Exit;
end;
end;
end;
end;
Jeśli na sztywno w piszę base address wyliczony z CE to wszystko ładnie działa.
dodanie znacznika <code class="delphi"> - fp