| Autor |
Beitrag |
einbrecher2007
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 15.12.09 17:38
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
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
einbrecher2007 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
SAiBOT
      
Beiträge: 323
Erhaltene Danke: 6
XP SP2; 7
D7; D2009
|
Verfasst: Mi 16.12.09 09:02
Noch dazu würde ich vermuten, deine IDE-Version liegt unter 2009. 
_________________ Debuggers don't remove bugs, they only show them in slow-motion.
|
|
einbrecher2007 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 22.12.09 13:43
Dazu gibt's hier im Forum ne ganze Menge Threads. Einfach die zurückgelieferten Strukturen auswerten.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|