[DELPHI] pointer + offset pobieranie adresu

0

W jaki sposób odczytać adres z pointera a następnie dodać do niego offset?

0

pointer := pointer + 10;

0

[Error] Unit1.pas(85): Operator not applicable to this operand type

0

Jeszcze napisze ze:
PtrBase :pointer;
PtrBase := pointer($0045A4DC);
a offset to 184

0
var
  PtrBase: Pointer;
begin
  PtrBase := Ptr($0045a4dc);
  PtrBase := Ptr(Integer(PtrBase) + 184);
  ShowMessage(IntToStr(Integer(PtrBase)));
end;
0

Chciałem się jeszcze zapytać jak porać z tego pointera adres?Próbuje, ale coś mi nie wychodzi.Niby coś pobiera ale nie jest to taki adres jak powinien.

0

Integer(PtrBase)

0
Integer(PtrBase)

na 64-bitowym kompilatorze program poleci ci w kosmos ;-)

0

delphi nie posiada póki co 64-bit kompilatora :] :p
BTW można założyć, że na 64-bit kompilatorze integer też będzie 64-bit

0

BTW można założyć, że na 64-bit kompilatorze integer też będzie 64-bit

nie będzie.

0

a te informacje masz z ...

0
Misiekd napisał(a)

a te informacje masz z ...

<img=http://wswiktor.fm.interia.pl/ball-crystal-fused3.jpg>

A serio, to wszystkie istniejące 64-bitowe kompilatory (np. C++) dla architektury AMD64 mają 64-bitowe pointery, ale 32-bitowego podstawowego integera. Byłoby dziwne, gdyby Delphi się nagle z tego wyłamało.

0

Nie wiem czy dobrze robie:

  const
  POINTER1= $0046A4DD;
  offset1=  $140;


 function ReadMemInteger(Address: Cardinal): Cardinal;      
var
ProcId: Cardinal;
tProc: THandle;
NBR: Cardinal;
value:integer;
 proc_ID : Cardinal ;
begin
GetWindowThreadProcessID(FindWindow(Nil, 'aplikacja'), @proc_ID);
    tProc:= OpenProcess(PROCESS_ALL_ACCESS, False, proc_ID);
    ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
    CloseHandle(tProc);
    Result:=value;


Edit2.Text := '$'+inttohex(ReadMemInteger(POINTER1)+(offset1),8);
end;

I wczytuje mi całkiem inny adres niż ten który jest wyświetlany przez cheat engine
Pointer w cheat engine ma budowe taka: nazwaaplikacji.exe + adres
Co takiego robie źle ze mi źle pobiera adres.Proszę o pomoc.

0

ReadMemInteger(POINTER1)+(offset1)
zgadnij co zostanie przekazane jako adres do funkcji

0

Pomyliłem się i przez nieuwagę napisałem na forum z offsetem
powinno byc:

Edit1.Text := '$'+inttohex(ReadMemInteger(POINTER1),8);

jednak i tak nie działa i dalje pokazue mi nieprawidłowy adres

0

Szukając odpowiedzi na moje pytanie natrafiłem na necie tutorial jak zrobić bota i była tam taka wzmianka:

The address is Tibia.exe+4034FC which equals 8034FC because Tibia.exe's base address is 400000 and 400000 + 4034FC = 8034FC.

Czy to oznacza że ja też muszę dowiedzieć się jaki jest adres bazowy programu i następnie do niego dodać pointer?
Jeżeli tak to zrobić?

0

znajdź sobie jakiś adres w CE później podstaw identycznie do POINTER1 i odczytasz te same dane oczywiście
Edit2.Text := '$'+inttohex(ReadMemInteger(POINTER1),8);
musi być poza funkcją nie tak jak napisałeś wyżej bo zawiesisz program

0

Może to pomoże wam zrozumieć o co mi chodzi.
Jeżeli w normalny sposób w CE znajdę sobie pointer
to wygląda to tak jak na tym obrazu niżej.(Czyli pisze nazwa aplikacji.exe+adres)

http://img59.imageshack.us/i/asdadwb.png/
Jeżeli usunę z tego część z nazwą aplikacji pozostawiając jedynie adres to wtedy pokazuje mi się dokładnie taki sam jak w moim programie
,jednak jest to nieprawidłowy adres.
http://img827.imageshack.us/i/asdad2.png/

Moje pytanie brzmi jak zrobić aby w moim programie wyświetlał się prawidłowy adres,taki jak na pierwszym obrazku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1