- Block Started by Symbol
-
a.out ist das ursprüngliche Dateiformat für ausführbare Dateien und Objektdateien von Unix-ähnlichen Betriebssystemen. In der Praxis wurde dieses Format weitgehend durch seine Nachfolger Common Object File Format (COFF) und Executable and Linking Format (ELF) verdrängt, obwohl es auch heute noch unterstützt wird.
Viele unixoide C-Compiler bzw. die diesen normalerweise automatisch nachgeschalteten Assembler erzeugen eine ausführbare Ausgabedatei mit dem voreingestellten Dateinamen a.out (Abkürzung für Assembler Output), sofern der Benutzer nicht ausdrücklich einen anderen Namen wählt; davon erhielt das zunächst namenlose Format seine Bezeichnung, sobald sich die Notwendigkeit ergab, mehrere verschiedene Formate zu unterscheiden. Verwirrenderweise trägt die Ausgabedatei des Compilers bzw. Assemblers auch dann standardmäßig den Dateinamen a.out, wenn sie nicht im Dateiformat a.out, sondern in einem der neueren Dateiformate erzeugt wird.
Ein Programm im a.out-Format besteht aus mehreren Teilen:
- Der Kopfdatenbereich enthält Metainformationen über die Datei, wie z.B. die Größe der folgenden Segmente.
- Text: Das eigentliche Programm als Maschinencode (nicht zu verwechseln mit dem Quelltext des Programms)
- Data: Initialisierte Daten, wie Konstanten und Variablen, die beim Programmstart bereits einen definierten Anfangswert haben.
- BSS: Uninitialisierte Daten. Das Akronym BSS steht für Block Started by Symbol und ist auf den gleichnamigen Pseudo-Operator zurückzuführen, mit dem in der Assemblersprache des Großrechners IBM 7090 Speicherplatz für uninitialisierte Daten reserviert wurde.[1] Während die Text- und Data-Segmente aus der Datei in den Speicher kopiert werden, ist das BSS-Segment nur als Größenangabe in den Kopfdaten der Datei vorhanden. Der Programmlader legt das Segment in der gewünschten Größe an und initialisiert es meist byteweise mit dem Wert 0.
- Weitere optionale Informationen wie Symboltabelle und, wenn nötig, Relokationstabelle.
Das a.out-Format ist betriebssystemspezifisch, d.h. verschiedene Unix-Versionen verwenden leicht unterschiedliche Dateiformate. Mit der Weiterentwicklung von UNIX wurden die Mängel von a.out immer offensichtlicher, unterstützt das Format doch weder Debugging-Informationen (die deshalb in der Symboltabelle untergebracht werden mussten) noch dynamische Bibliotheken. Mit der Einführung von UNIX System V Release 3 wurde deshalb mit dem Common Object File Format ein zusätzliches, erweitertes Dateiformat für Objektdateien eingeführt.
Literatur
- Brian W. Kernighan, M. D. McIlroy: UNIX Programmer's Manual, Seventh Edition, Bell Telephone Laboratories, Incorporated, Murray Hill, NJ 1979
Einzelnachweise
- ↑ Maurice J. Bach: The Design of the UNIX Operating System, Prentice-Hall International, Englewood Cliffs, NJ 1986, ISBN 0-13-201757-1. Seite 25
Wikimedia Foundation.