Entwickler-Ecke
Windows API - ReadProcessMemory und PlainText
einbrecher2007 - Di 15.12.09 17:38
Titel: ReadProcessMemory und PlainText
Hi,
Ich benutze folgendermaßen ReadProcessMemory:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var Buffer : Array[0..512] Of Char; N : DWORD; result : String; begin ReadProcessMemory(ProgramToRead, Ptr(0), @Buffer, 512, N); Buffer[512] := #0; Memo1.Text := StrPas(Buffer); end; |
Leider kriege ich in dem Memo nur soclhe Zeichen angezeigt:
|€/ƒ|ÿÿÿÿy/ƒ|ÿq%u
r%u˜ô
Kann ich das Memory nicht irgendwie als PlainText anzeigen lassen?
Oder wie kriege ich den Speicher des Programms brauchbar ausgelesen?
mfg
Gausi - Di 15.12.09 18:26
Naja, wenn an der Stelle im Speicher nunmal kein Text steht, sondern ein Bild, ein Integer, ein sonstwas - was willst du denn dann anzeigen? Einzig sinnvoll wäre dann eine Anzeige der Bytes im Hexadezimal-Format, wie man es von einem Hex-Editor her kennt.
einbrecher2007 - Di 15.12.09 23:46
Habe es jetzt folgendermaßen hinbekommen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button2Click(Sender: TObject); var lBuf: string; lRead,c : Cardinal; begin C := wndMain; GetWindowThreadProcessId(c, @c); c := OpenProcess(PROCESS_ALL_ACCESS, False, c); SetLength(lBuf, 16); ReadProcessMemory(c, Ptr($11546A64), @lBuf[1], 16, lRead); Memo1.Text := lBuf; CloseHandle(c); end; |
Leider bekomme ich immer nur ein einziges Zeichen ausgegeben.
Wenn ich dann auf $11546A66 lese krieg ich auch das 2. und
auf $11546A68 das dritte usw... Kann man das nicht alles mit einem Mal auslesen?
Gausi - Mi 16.12.09 08:45
Da würde ich vermuten, dass der String als WideString im Speicher vorliegt. Wenn der String aus "normalen Zeichen" betsteht, ist dabei jedes zweite Byte 0.
SAiBOT - Mi 16.12.09 09:02
Noch dazu würde ich vermuten, deine IDE-Version liegt unter 2009. :wink:
einbrecher2007 - Mi 16.12.09 09:51
Vielen Dank!
Funktioniert jetzt wunderbar, nachdem ich lBuf als WideString definiert habe =)
Weiß nicht, ob ich dafür extra nen Thread eröffnen sollte, aber:
Kennt sich jemand mit der Funktion CreateToolHelp32SnapShot aus?
Wie kann ich damit die Startadresse eines bestimmten Prozesses/Fensters im Speicher rausfinden?
BenBE - Di 22.12.09 13:43
Dazu gibt's hier im Forum ne ganze Menge Threads. Einfach die zurückgelieferten Strukturen auswerten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!