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; |