Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Erledigt] Speicheradresse (immer gleich) auslesen (https://www.delphipraxis.net/143846-%5Berledigt%5D-speicheradresse-immer-gleich-auslesen.html)

Muellermilchtrinker 24. Nov 2009 17:01


[Erledigt] Speicheradresse (immer gleich) auslesen
 
Hallo

Ich hab mal wieder ne Frage.^^
Also ich möchte für ein Spiel ein Tool schreiben. (eher ein Analysierer)
Ich möchte die Daten aus dem RAM holen. Die Adressen weiß ich schon.(Bsp.:599CD8)
Ich weiß jetzt nur nicht wie ich die Werte aus dem RAM bekomme. Da die Adressen immer gleich sind, brauch ich keine Funktion/Prozedur in der auch noch anderes beachtet wird. Am besten wär, Adresse eingeben und Wert bekommen.
Ich hoffe ihr versteht mich und könnt mir helfen.^^

p80286 24. Nov 2009 17:11

Re: Speicheradresse (immer gleich) auslesen
 
Na das mit "Adresse immer gleich" möchte ich stark bezweifeln. Ausserdem sollte Dir Windows ein paar auf die Finger geben wenn Du in Speicherbereichen herum fuhrwerkst, die nicht Deinem Programm gehören.

Wenn Du einem Pointer die bekante Adresse mitteilst hast Du natürlich Zugriff auf den Speicher auf den der Pointer zeigt.

Aber ob das geht?

Gruß
K-H

wicht 24. Nov 2009 17:14

Re: Speicheradresse (immer gleich) auslesen
 
Das sollte mit OpenProcess() gehen. Allerdings würde ich auch nicht davon ausgehen, dass die Adresse wirklich immer gleich ist...

Edit: Vielleicht hilf das hier weiter: Tutorial Spiele-Trainer

HTH

brechi 24. Nov 2009 17:14

Re: Speicheradresse (immer gleich) auslesen
 
Such mal nach ReadProcessMemory hier im Forum.

Namenloser 24. Nov 2009 17:15

Re: Speicheradresse (immer gleich) auslesen
 
Das ist ein bisschen kniffelig. Unter NT kann jedes Programm nur noch auf seinen eigenen, virtuellen Adressraum zugreifen. Du müsstest mit Delphi-Referenz durchsuchenWriteProcessMemory und Delphi-Referenz durchsuchenCreateRemoteThread einen Thread im fremden Prozess erzeugen, und mit diesem den Wert auslesen, und anschließend den Wert irgendwie an dein Hauptprogramm zurückgeben.

Such am besten mal nach den genannten Funktionen, dazu gab's schon des öfteren Threads hier im Forum.

[edit]Öhm joa... oder einfach mit ReadProcessMemory... aber warum einfach wenn's auch umständlich geht :wall: [/edit]

Muellermilchtrinker 24. Nov 2009 17:27

Re: Speicheradresse (immer gleich) auslesen
 
Erstmal danke für die Antworten.
Könnte mir jemand vllt ein Beispiel für ReadProcessMemory geben.
Danke

Namenloser 24. Nov 2009 17:29

Re: Speicheradresse (immer gleich) auslesen
 
Zitat:

Zitat von Muellermilchtrinker
Erstmal danke für die Antworten.
Könnte mir jemand vllt ein Beispiel für ReadProcessMemory geben.
Danke

Nein, aber die Suchfunktion bzw. die Delphi-Referenz kann das: Delphi-Referenz durchsuchenReadProcessMemory

Muellermilchtrinker 24. Nov 2009 18:46

Re: Speicheradresse (immer gleich) auslesen
 
Zitat:

Zitat von wicht
Das sollte mit OpenProcess() gehen. Allerdings würde ich auch nicht davon ausgehen, dass die Adresse wirklich immer gleich ist...

Edit: Vielleicht hilf das hier weiter: Tutorial Spiele-Trainer

HTH

Das Tut hab ich mir schon angeschaut.
Das Problem ist nur das dort in den Speicher geschrieben wird.
Ich will aber nur auslesen.

Muellermilchtrinker 24. Nov 2009 18:59

Re: Speicheradresse (immer gleich) auslesen
 
Habs jetzt so gemacht:
Delphi-Quellcode:
var
  lBuf: PChar;
  lRead,c : Cardinal;
begin
  c:=FindWindow(nil,'sag ich net'); //Get WindowHandle
  if c=0 then
  begin
    MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c,@c); //Get ProcessID and ignore ThreadID
  c:=OpenProcess(PROCESS_ALL_ACCESS,False,c); //Get ProcessHandle
  ReadProcessMemory(c,Ptr($599CD8),lBuf,1,lRead);
  Edit1.Text := lBuf;
  CloseHandle(c);
Nur bekomm ich in Edit1.Text unverständliche Zeichen.

Namenloser 24. Nov 2009 19:06

Re: Speicheradresse (immer gleich) auslesen
 
Sicher, dass an der Stelle ein lesbares Zeichen steht?
Abgesehen davon, würde ich es mal so probieren, bin aber nicht sicher, ob es einen Unterschied macht:
Delphi-Quellcode:
var
  lBuf: string;
  lRead,c : Cardinal;
begin
  c:=FindWindow(nil, 'sag ich net'); //Get WindowHandle
  if c=0 then
  begin
    MessageDlg('...erst spiel starten...dann trainer starten =)',mtwarning,[mbOK],0);
    Exit;
  end;
  GetWindowThreadProcessId(c, @c); //Get ProcessID and ignore ThreadID
  c := OpenProcess(PROCESS_ALL_ACCESS, False, c); //Get ProcessHandle
  SetLength(lBuf, 1);
  ReadProcessMemory(c, Ptr($599CD8), @lBuf[1], 1, lRead);
  Edit1.Text := lBuf;
  CloseHandle(c);


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz