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