Witam,
a więc tak próbuję odczytał adres biblioteki dll danej aplikacji, ID oraz uchwyt mam tej aplikacji poprawny,
Jeśli wprowadzę ręcznie gotowy już adres wszystko poprawnie działa, lecz niestety co restart aplikacji adres jest inny,
i teraz chodzi oto żeby w programie zrobić takie coś:
moduł+adres
czyli np.

eng.dll + $0153B5E0

oczywiście otrzymuje jakieś dane ale zawsze błędne,
trochę kodu z programu:
funkcja czytająca adres biblioteki dll


var
  hSnap: Cardinal;
  tm: TModuleEntry32;
begin
  result := 0;
  hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, hProcID);
  if hSnap <> 0 then
  begin
    tm.dwSize := sizeof(TModuleEntry32);
    if Module32First(hSnap, tm) = true then
    begin
      while Module32Next(hSnap, tm) = true do
      begin
        if lstrcmpi(tm.szModule, lpModName) = 0 then
        begin
          result := Cardinal(tm.modBaseAddr);
          break;
        end;
      end;
    end;
    CloseHandle(hSnap);
  end;

użycie:

GetModuleBase(ID,'eng.dll')+strtoint('$0153B5E0')

odczytanie danych z pamięci:
ReadProcessMemory(ProcessHandle, pointer(p), @buffer, 4, rw);

lecz zawsze jest błędny adres i nie wiem jak mam to zrobić inaczej aby wszystko poprawnie działało.
Chodzi oto że jeśli zamiast

GetModuleBase(ID,'eng.dll')+strtoint('$0153B5E0')

wpisze adres ręcznie wszystko hula (adres pobierany z cheat engine)

Czy ktoś ma jakiś pomysł jak to zrobić aby działało?
jeśli w Cheat Engine działa takie odczytywanie to na pewno musi iść zrobić takie coś, Tylko jak?

Z góry dziękuje za pomoc