Hallo j.,
es gibt ja progs (z.b. 7-Zip) die selbstständig exe-dateien
machen. ich frage mich, wie das geht, bzw. auf welchen
gundsätzen eine exe - datei aufbaut und ob man auch welche
z.b. mit notepad selbermachen kann. ich sehe da nur ein gewirr
aus zahlen und buchstaben.
Also prinzipiell sind das etwa 3 Fragen.
Mit Notepad geht das nicht, da du nicht alle möglichen Zeichen eingeben kannst und das Ganze auch sehr unübersichlich wäre. Zum erstellen verwendet man spezille Programm, Linker oder Binder, welche die ganzen Informationen erstellen.
Grundsätzlich gibt es zwei unterschiedliche Formen .COM und .EXE.
.COM ist das einfachste Format. Eigentlich ist es ein Speicherabbild und wird beim Start ab der Adresse 0100h geladen und der Programm-Einsprung befindet sich immer auch an Adresse 0100h (wenn ich mich jetzt nicht irre, ist schon länger her). Im Priztip ist ein .COM-Programm auf 64KiByte beschränkt.
Das .EXE-Format ist komplexer. Das Programm liegt in einer Form vor, welche eigentlich nur an der Adresse 0 geladen funktioniert. Damit es an aber an jede Speicherstelle geladen werden kann, gibt es in der Datei Tabellen, welche angeben, welche Bytes in der Datei korrigiert werden müssen, damit das Programm an einer beliebigen Stelle im Speicher ausgeführt werden kann. ImPrinzip muss der Loader, also derjenige Teil des Betriebssystems welcher eine .EXE in den Speicher lädt und startet, zu den, in der Tabelle, angegebenen Stellen einfach nur den Wert der tatsächlichen Ladeadresse hunzuaddieren. Zudem ist noch angegeben wie gross der Stack sein muss und die Grösse des benötigten Datenbereichs. Dann gibt es, je nach -EXE-Format, noch angaben über benötigte Bibliotheken.
Mit Windows hat man ein neues Format für eine .EXE eingeführt. Vorne liegt eine Block mit einer „normalen .EXE“, so wie sie DOS auch kennt. Hinter diesem Block liegt dann die eigentliche EXE für Windows. Dadurch kannst du ein Windows-Programm auch unter DOS starten, allerdings gibt das DOS-Programm nur eine Meldungs aus, dass dieses Programm nur unter Win lauffähig ist, dass da ein weiterer Block dahinter liegt, weiss DOS gar nicht.
ImPrinzip kann man eine DOS-Version und eine Win-Version eines Programms in eine einzige EXE-Datei packen.
SO, jetzt kommen wir zu deiner Frage mit selbstentpackenden Archiven.
Hier wird einfach das Archiv hinter die EXE gehängt. Der Loader lädt nur den Ihm bekannten Teil in den Speicher und ignoriert zusätzliche Daten einfach.
Eine Kleinigkeit hab ich noch vergessen: Das Betriebssystem gibt jeden Programm den Pfad und seinen Dateinamen mit, wenn es gestartet wird. Somit kann dann der Archiventpacker seine eigene Datei öffnen und das Archiv entpacken, welches hinter seinem Code steht.
Uff, ist jetzt doch etwas lang geworden obwohl ich nur das prinzipielle geschrieben habe.
MfG Peter(TOO)