a.out(4) a.out(4)
NAME
a.out - ELF (Executable and Linking Format)-Dateien
SYNTAX
#include <elf.h>
BESCHREIBUNG
Der Dateiname a.out ist die Standard-Ausgabedatei des Binders ld(1).
Der Binder macht eine a.out-Datei ausführbar, wenn beim Binden keine
Fehler auftraten.
Programme, die ELF-Dateien verändern, sollten die Bibliothek verwen-
den, die in elf(3E) beschrieben wird. Es folgt ein Überblick über das
Dateiformat. Ausführliche Informationen finden Sie auch in der angege-
benen Literatur.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
a.out(4) a.out(4)
Sichtweise des Sichtweise der
Binders Programmausführung
_________________________ _________________________
| | | |
| ELF-Kopf | | ELF-Kopf |
|_______________________| |_______________________|
| | | |
| Programmkopftabelle | | Programmkopftabelle |
| optional | | |
|_______________________| |_______________________|
| | | |
| Abschnitt 1 | | |
|_______________________| | Segment 1 |
| | | |
| . . . | | |
|_______________________| |_______________________|
| | | |
| Abschnitt n | | |
|_______________________| | Segment 2 |
| | | |
| . . . | | |
|_______________________| |_______________________|
| | | |
| . . . | | . . . |
|_______________________| |_______________________|
| | | |
| Abschnittskopftabelle | | Abschnittskopftabelle |
| | | optional |
|_______________________| |_______________________|
Der ELF-Kopf steht am Anfang und enthält eine Beschreibung des Datei-
aufbaus. Abschnitte enthalten Informationen eines Objekts für den Bin-
der: Anweisungen, Daten, Symboltabellen, Verschiebe-Informationen usw.
Segmente enthalten die notwendigen Informationen, um eine Objektdatei
auszuführen. Ein Segment kann mehrere Abschnitte enthalten.
Eine Programmkopftabelle gibt dem System an, wie der Prozeß zu erzeu-
gen ist. Dateien, die als Prozeß ablaufen sollen, müssen eine Pro-
grammkopftabelle haben. Verschiebbare Dateien müssen keine solche
Tabelle haben. In einer Abschnittskopftabelle werden die Abschnitte
der Datei beschrieben. Jeder Abschnitt hat hier einen Eintrag. Dieser
Eintrag enthält den Abschnittsnamen, die Abschnittsgröße usw. Dateien,
die gebunden werden sollen, müssen eine Abschnittskopftabelle beinhal-
ten. Andere Objektdateien müssen diese Tabelle nicht haben.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
a.out(4) a.out(4)
In der Abbildung steht die Programmkopftabelle direkt hinter dem ELF-
Kopf und die Abschnittskopftabelle hinter den Abschnitten. Diese Rei-
henfolge ist nicht zwingend. Segmente und Abschnitte haben keine vor-
gegebene Reihenfolge. Nur der ELF-Kopf muß am Anfang der Datei stehen.
Wenn eine a.out-Datei ausgeführt wird, werden drei logische Segmente
eingerichtet: das Textsegment, das Datensegment (nichtinitialisierte
Daten stehen hinter initialisierten Daten, wobei nichtinitialisierte
Daten mit Null initialisiert werden) und das Stapelsegment. Das Text-
segment kann nicht vom Programm beschrieben werden. Wird das gleiche
a.out nochmal aufgerufen, greifen die Prozesse auf das gleiche Text-
segment zu.
Das Datensegment beginnt an der nächsten maximalen Seitengrenze hinter
dem Textsegment. Wenn ein Prozeß erzeugt wird, kann der Teil der
Datei, in dem das Ende des Textsegments und der Anfang des Datenseg-
ments stehen, zweimal geladen werden. Der doppelte Teil des Textseg-
ments, der am Anfang des Datensegments steht, wird nie ausgeführt. Er
wird einfach dupliziert, damit das Betriebssystem den Datenbereich in
ganzen Seiten einlagern kann, ohne den Datenabschnitt auf eine Seiten-
grenze schieben zu müssen. Die erste Datenadresse ist daher die näch-
ste Seitengrenze hinter dem Textsegment plus die Größe des Textseg-
ments modulo der maximalen Seitengröße. Falls das Textsegment ein
Vielfaches der maximalen Seitengröße ist, muß kein Teil des Textseg-
ments dupliziert werden. Der Stapel wird automatisch den Erfordernis-
sen entsprechend erweitert. Das Datensegment wird durch Aufrufe des
brk(2)-Systemaufrufs erweitert.
SIEHE AUCH
cc(1), ld(1), brk(2), elf(3E).
Kapitel "Objektdateien" im Leitfaden und Werkzeuge für die Programmie-
rung mit C.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98