Hi! Ich hab da ein Problem mit dem MemoryStream. Die API Funktion ReadProcessMemory füllt meinen Buffer mit Daten, dieser wird also komplett gefüllt auch mit den richtigen Werten, nun versuch ich den Inhalt des Buffers in den MemoryStream zu bekommen aber irgendwie funktioniert das nicht. Kann mir jemand sagen weshalb? In meiner Memo wird nichts angezeigt!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| Procedure TForm1.Lese_Speicher(id : LongInt); var prozess_h: THandle; bytes_gelesen : Cardinal; buffer : array of byte; start, ende : LongInt; stream : TMemoryStream; Begin try start:=StrToInt(Edit1.Text); except Application.MessageBox('Gültige Startaddresse eingeben!','Falsche Eingabe',MB_OK); end; try ende:=StrToInt(Edit2.Text); except Application.MessageBox('Gültige Grenze eingeben!','Falsche Eingabe',MB_OK); end; // Buffergröße festlegen SetLength(Buffer,ende-start); // versuche den prozess zu öffnen prozess_h:=OpenProcess(PROCESS_VM_READ,FALSE,id); // Lese aus dem Speicher if prozess_h<>0 then if ReadProcessMemory(prozess_h,Ptr(start),buffer,ende-start,bytes_gelesen)=FALSE then Application.MessageBox('Konnte nich lesen','Fehler',MB_OK); // Schließe den Prozeß CloseHandle(prozess_h); // Kopiere den Buffer in das Memofeld stream:=TMemoryStream.Create; stream.SetSize(sizeof(Buffer)); Move(Buffer,stream.memory^,stream.size); // alternative: stream.Write(buffer,sizeof(buffer)); Memo1.Lines.LoadFromStream(stream); stream.free; end; |
Wie gesagt der Buffer wird komplett mit den richtigen Werten gefüllt nur bekomm ich dessen Inhalt partout nicht in den Stream :(
Moderiert von
Klabautermann: Code-Tags hinzugefügt.