Prozessspeicher lesen / schreiben Ergebnis falsch
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
liefert 1242625
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; 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? |
Re: Prozessspeicher lesen Ergebnis falsch
Ließt ReadProcessMemory überhaupt was ... was sagt dessen Result und was sagt dwBytes?
Sicher daß die Adresse $002C3C84 stimmte? ... |
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:
Meldung Kann Speicher nicht lesen
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; |
Re: Prozessspeicher lesen Ergebnis falsch
Siehst du, und schon haben wir die Erklärung für deine Frage. :zwinker:
Zitat:
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)); |
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:
liefert auf jeden fall den korrekten Wert
Showmessage(InttoHex(dwProcID,8));
Zitat:
|
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. |
Re: Prozessspeicher lesen Ergebnis falsch
mach ich das nicht hier
Delphi-Quellcode:
sorry steh grad auf dem Schlauch
hProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
|
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 |
Re: Prozessspeicher lesen Ergebnis falsch
muss bei ReadProcessMemory() nicht das Handle rein, dass du von OpenProcess bekommen hast?
Bernhard |
Re: Prozessspeicher lesen Ergebnis falsch
Man bin ich Doof ja das wars Danke :bouncing4:
|
Re: Prozessspeicher lesen Ergebnis falsch
nun Hab ich ein Ähnliches Problem beim Schreiben
fehler sind unter Windows7 Nur ein Teil der ReadProcessMemory- oder WriteProcessMemory-Anforderung wurde abgeschlossen WinXP Falscher Parameter
Delphi-Quellcode:
hab mir schon einige Delphi und C++ Sourcecodes angeschaut wegen dieser DebugPrivileges welche dort aber nie verwendet werden
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, false, dwProcID); if (hProcess = INVALID_HANDLE_VALUE) then begin Showmessage('Ungültiges Handle :' + Inttostr(hProcess)); exit; end; //if not ReadProcessMemory(hProcess, Pointer($2c3ca4), @Buf, 4, dwBytes) then // ShowMessage(SysErrorMessage(GetLastError)+ ' : '+Inttostr(hProcess)) // else // caption := (inttostr(Buf)); //end; if not WriteProcessMemory(hProcess,Pointer($002C3C84),Pointer($55), 1,dwBytes) then ShowMessage(SysErrorMessage(GetLastError)) else caption := (inttostr(dwBytes)); end; end; |
Re: Prozessspeicher lesen / schreiben Ergebnis falsch
Die Hilfe zu den Parametern von WriteProcessMemory hätte geholfen. :wink:
SizeOf(Pointer($55)) ist bei mir ungleich 1. Btw: CloseHandle fehlt. |
Re: Prozessspeicher lesen / schreiben Ergebnis falsch
Pointer($55) kann nicht stimmen, da einem Programm im Usermode kein Zugriff auf die 64 KB gewährt sind.
Falls du die $55 als Byte schreiben willst, dann muß dieses in eine Variable oder in einen anderen Puffer und dann gibst du den Zeiger auf diesen Puffer dort an. Zitat:
aber hier zeigt der Pointer auf einen ungültigen Speicherbereichen oder er will hier den Pointer, anstatt den Wert speichern. |
Re: Prozessspeicher lesen Ergebnis falsch
Das dies möglich ist weiß ich, nur folgendes hat mich zu der Antwort verleitet:
Zitat:
|
Re: Prozessspeicher lesen Ergebnis falsch
Das ist 'ne Standardmeldung, welche eintritt, wenn Bytes nicht gelesen/geschrieben werden können ... was hier beim letzen und auch rein zufällig beim einzigen Byte passiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr. |
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