Es reicht eigentlich wenn du die Daten direkt ans Ende anhängst. Danach schreibst du noch die Länge der Daten dahinter, damit du sie korrekt ausleste kannst. Der letzte Integer Wert in der Datei beschreibt dann die Länge der Daten. Dann kann man den Stream genau den Startpunkt berechnen.
So in etwa müßte das funktionieren (ungetestet):
Code:
var
l:integer;
Data:array of byte;
st:TFileStream;
begin
st:=TFilestream.Create('',fmsharedenywrite);
st.Seek(-4,sofromend);
st.ReadBuffer(l,4);
st.Seek(-4-l,sofromend);
SetLength(Data,l);
st.ReadBuffer(Data[0],l);
st.Free;
end;
Irgendwo im Forum wurde auch mal beschrieben wie man eine Exe Datei aus dem Speicher laden kann. Die Exe Packer verändern aber tatsächlich den Einsprungspunkt aber die meisten Packer sind den Antivirenprogrammen bekannt.