Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozessspeicher lesen / schreiben Ergebnis falsch (https://www.delphipraxis.net/147788-prozessspeicher-lesen-schreiben-ergebnis-falsch.html)

Gehstock 16. Feb 2010 12:34


Prozessspeicher lesen / schreiben Ergebnis falsch
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  dwBytes, Buf: DWord;
  dwEngineBase, dwClientBase: DWord;
  dwProcID: Integer;
  hProcess: THandle;
begin
  dwEngineBase := 0;
  dwClientBase := 0;
  hProcess := 0;
  dwProcID := GetProcessID('calc.exe');
  if dwProcID <> 0 then
  begin
    hProcess := OpenProcess(PROCESS_ALL_ACCESS, true, dwProcID);
    if (hProcess = INVALID_HANDLE_VALUE) then
    begin
      Showmessage('Ungültiges Handle :' + Inttostr(hProcess));
      exit;
    end;
    // dwClientBase := GetModuleBaseAddress(dwProcID, 'calc.exe');
    // Showmessage(InttoHex(dwProcID,8));
//    dwBytes := 4;
//  end
//  else
//  begin
//    Showmessage('Finde Prozess nicht');
//  end;
if ReadProcessMemory(dwProcID, Pointer($002C3C84), @Buf, 4, dwBytes) then
    caption := (inttostr(Buf) + '+' + (inttostr(dwBytes)));
end;
end;
liefert 1242625
was mache ich falsch weil lesen sollte ich ja eigentlich 85

habs vor lauter Verzweiflung auch in C++ versucht (obwohl ich das nicht kann) was aber genauso aussieht?

himitsu 16. Feb 2010 12:42

Re: Prozessspeicher lesen Ergebnis falsch
 
Ließt ReadProcessMemory überhaupt was ... was sagt dessen Result und was sagt dwBytes?

Sicher daß die Adresse $002C3C84 stimmte?

...

Gehstock 16. Feb 2010 12:45

Re: Prozessspeicher lesen Ergebnis falsch
 
dwBytes sagt 0, die Adresse ist zumindest die aus CE vieleicht interpretiere ich diese auch falsch?

nein Er liest nichts ich bin da schon seit Tagen dran aber immer das selbe

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  dwBytes, Buf: DWord;
  dwEngineBase, dwClientBase: DWord;
  dwProcID: Integer;
  hProcess: THandle;
begin
  dwEngineBase := 0;
  dwClientBase := 0;
  hProcess := 0;
  dwProcID := GetProcessID('calc.exe');
  if dwProcID <> 0 then
  begin
    hProcess := OpenProcess(PROCESS_ALL_ACCESS, true, dwProcID);
    if (hProcess = INVALID_HANDLE_VALUE) then
    begin
      Showmessage('Ungültiges Handle :' + Inttostr(hProcess));
      exit;
    end;
if not ReadProcessMemory(dwProcID, Pointer($002C3C84), @Buf, 4, dwBytes) then
  ShowMessage(SysErrorMessage(GetLastError))
  else
    caption := (inttostr(Buf) + '+' + (inttostr(dwBytes)));
end;
end;
Meldung Kann Speicher nicht lesen

himitsu 16. Feb 2010 13:01

Re: Prozessspeicher lesen Ergebnis falsch
 
Siehst du, und schon haben wir die Erklärung für deine Frage. :zwinker:
Zitat:

Zitat von Gehstock
was mache ich falsch

Heißt also, daß entweder dwProcID oder Pointer($002C3C84) nicht stimmt
oder daß dein Programm nicht genügend Rechte hat, um Lesen zu dürfen.

Aber mal sehn, ob man eine bessere Fehlermeldung rausbekommt, als dein nichtssagendes "Kann Speicher nicht lesen":
Delphi-Quellcode:
if not ReadProcessMemory(dwProcID, Pointer($002C3C84), @Buf, 4, dwBytes) then
  ShowMessage(SysErrorMessage(GetLastError));

Gehstock 16. Feb 2010 13:07

Re: Prozessspeicher lesen Ergebnis falsch
 
Ergebnis
Das Handle ist ungültig Wert ist 224

sollte er da nicht schon hier anschlagen
Delphi-Quellcode:
      hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
    if (hProcess = INVALID_HANDLE_VALUE) then
    begin
      Showmessage('Finde Handle nicht');
      exit;
    end;
Delphi-Quellcode:
Showmessage(InttoHex(dwProcID,8));
liefert auf jeden fall den korrekten Wert

Zitat:

SysErrorMesssage
mach da mal n s weg der nächste wundert sich :-D

himitsu 16. Feb 2010 13:19

Re: Prozessspeicher lesen Ergebnis falsch
 
Handle ist aber nicht gleich Handle.

http://msdn.microsoft.com/en-us/library/ms680553.aspx
A handle to the process with memory that is being read. The handle must have PROCESS_VM_READ access to the process.


Mit meinem Kellerschlüssel komm ich doch auch nicht in den Tresor der Staatsbank ... obwohl ich ja EINEN Schlüssel hab.

Gehstock 16. Feb 2010 13:23

Re: Prozessspeicher lesen Ergebnis falsch
 
mach ich das nicht hier
Delphi-Quellcode:
hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
sorry steh grad auf dem Schlauch

Astat 16. Feb 2010 13:26

Re: Prozessspeicher lesen Ergebnis falsch
 
Hallo Gehstock für notwendiges DebugPrivilege guckst du da..

http://www.delphipraxis.net/internal...t.php?t=173205

Thread#8

lg. Astat

rollstuhlfahrer 16. Feb 2010 14:09

Re: Prozessspeicher lesen Ergebnis falsch
 
muss bei ReadProcessMemory() nicht das Handle rein, dass du von OpenProcess bekommen hast?

Bernhard

Gehstock 16. Feb 2010 14:47

Re: Prozessspeicher lesen Ergebnis falsch
 
Man bin ich Doof ja das wars Danke :bouncing4:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 Uhr.
Seite 1 von 2  1 2      

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