Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unicode-Text per ReadProcessMemory auslesen (https://www.delphipraxis.net/118899-unicode-text-per-readprocessmemory-auslesen.html)

infY2k7 17. Aug 2008 16:34


Unicode-Text per ReadProcessMemory auslesen
 
Hi Leutz. Ich bins mal wieder, mit einem readprocessmemory-Problem, was auch sonst :lol:
Folgendes: So liest man für gewöhnlich normale Zahlen wie z.B. 139687 aus dem Speicher:
Delphi-Quellcode:
var p : pointer;
      BytesRead: DWord;
      HandleWindow:longint;

begin
PID:=0;
Wnd := FindWindow(nil,Pchar(windowname));//windowname wurde vorher definiert
GetWindowThreadProcessId(Wnd, @PID);
HandleWindow := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
     ReadProcessMemory(HandleWindow,adresse,@ausgabe,4,BytesRead);//adresse auch vorher definiert
end;
Nunja, nun brauch ich nen Unicode-Text aus dem Speicher. Nach stundenlangem googlen stellte ich fest, das ich so ziemlich der einzige Mensch auf dieser Welt mit diesem Problem bin!
Im Bsp. oben ist ausgabe vom typ dword(für normale Zahlen eben)
Wie lese ich nun Unicode aus? Sicher müsste ausgabe ein anderer Typ sein, die Frage ist welcher und wie groß müsste er sein, wie müsste ich die ReadProcessMemory abändern usw...

Danke im Vorraus, mfg infY

Luckie 17. Aug 2008 16:55

Re: Unicode-Text per ReadProcessMemory auslesen
 
ReadProcessMemory interessiert nicht was die Bytes an der betreffenden Adresse bedeuten. Und im Speicher stehen nur Zahlen. Die Interpretation musst du schon machen.

infY2k7 18. Aug 2008 10:56

Re: Unicode-Text per ReadProcessMemory auslesen
 
Na.. man kann im Speicher auch Text auslesen! Oder brauch ich dafür ne andere Funktion?? o.O

Neutral General 18. Aug 2008 11:06

Re: Unicode-Text per ReadProcessMemory auslesen
 
Hast du es nicht verstanden?

ReadProcessMemory liest dir einfach die Bytes der Adresse aus, die du übergeben hast.

Wie diese Bytes zu interpretieren sind (z.B. als unicode text) weiß und interessiert ReadProcessMemory nicht.

Was du mit den erhaltenen Bytes anstellst, ist deine Sache.

Luckie 18. Aug 2008 11:26

Re: Unicode-Text per ReadProcessMemory auslesen
 
Noch mal, im Speicher stehen nur Zahlen bzw. Werte von Zahlen. Zum Beispiel in Hexadezimalschreibweise:
Code:
6F 62 6A 0D
Das liest du mit ReadProcessMemory aus und nichts anderes. Ob diese vier Byte nun einen Integerwert repräsentieren oder vier ASCII Zeichen codieren, das entscheidet die Software.

infY2k7 18. Aug 2008 16:25

Re: Unicode-Text per ReadProcessMemory auslesen
 
Ah ok habs anders interpretiert vorhin. Ja die Frage ist nur, wie mach ich aus dem ganzem ein Unicode-String?

brechi 18. Aug 2008 17:53

Re: Unicode-Text per ReadProcessMemory auslesen
 
Delphi-Quellcode:
var
  buf: array of char;
ws: widestring;
x: char;
begin
  addr := start;
  repeat
   Readprocessmemory(addr,@x)
   inc(addr,2);
  until x = #0;

  setlength(buf, addr-start);

  ReadprocessMemory(@buf, addr-start);

  ws := PWideChar(buf);
end;
pseudocode :) (bzw besser word einlesen)

der 1. Teil schaut nach der Länge des widestrings (#0 als word = ende)
der zweite liest dann das ganze in einen Buffer
und am schluss hast du das als widestring

infY2k7 18. Aug 2008 18:53

Re: Unicode-Text per ReadProcessMemory auslesen
 
ty, ma schaun ob ichs hinkrieg!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.

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