a.out
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 teilweise unterstützt wird.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20150924040037
| {{#ifeq: 20150924040037 | *
| {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20150924040037}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20150924040037}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: Binärformate | {{#invoke:WLink|getEscapedTitle|Binärformate}} | {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20150924040037|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html}}
|| {{#if: || }}
}}{{#if: Binärformate
| {{#if: {{#invoke:WLink|isBracketedLink|Binärformate}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://www.freebsd.org/doc/de/books/handbook/binary-formats.html }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}, Das FreeBSD-Handbuch, aufgerufen am 4. April 2019</ref> Vom Linux-Kernel wurde das Format von Version 1.1.52 (August 1994)<ref>LKML: a.out coredumping: fix or delete?</ref> bis einschließlich Version 5.0 (März 2019)<ref>LKML: x86: Deprecate a.out support (Linus Torvalds)</ref> unterstützt.
Geschichte
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<ref>a.out -- assembler and link editor output Dennis Ritchie, Bell Labs, 3. November 1971. Aufgerufen am 11. März 2014</ref>. 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 es deshalb durch das neue, flexiblere Common Object File Format (COFF) abgelöst.<ref>Gintaras Gircys: Understanding and Using COFF, 1988</ref>
Unter Linux war a.out bis 1995 das Standardformat. Aufgrund der Limitierungen des Formates wurde es unter Linux zunehmend schwerer, moderne Techniken wie z. B. Dynamisches Linken zu unterstützen<ref>How to write shared libraries, Ulrich Drepper, abgerufen am 12. März 2014</ref>. Deshalb wurde mit der Veröffentlichung der Kernel Version 1.2 Unterstützung für das Executable and Linking Format (ELF) eingeführt.<ref>Linux 1.2 und 1.3 Uni Wuppertal, abgerufen am 12. März 2014</ref> Der Linux Loader ld.so unterstützt das a.out Format jedoch bis heute<ref>Manpage von ld.so Linux Programmer's Manual, abgerufen am 12. März 2014</ref>. Da BSD eine flexiblere Variante von a.out implementierte, war der Wechsel nicht so dringend. FreeBSD stellte im Jahr 1998 mit Version 3.0 auf ELF um.<ref>FreeBSD 3.0 Release Notes, FreeBSD Project, abgerufen am 11. März 2014</ref>
Die Ausgabedatei eines Unix-Compilers bzw. Assemblers trägt auch heute noch dann standardmäßig den Dateinamen a.out, wenn sie nicht im Dateiformat a.out, sondern in einem der neueren Dateiformate erzeugt wird.
Aufbau
Ein Programm im a.out-Format besteht aus mehreren Teilen:
- Der Kopfdatenbereich enthält Metainformationen über die Datei, wie zum Beispiel 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.<ref>Maurice J. Bach: The Design of the UNIX Operating System, Prentice-Hall International, Englewood Cliffs, NJ 1986, ISBN 0-13-201757-1. Seite 25
</ref> 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.
Literatur
- Brian W. Kernighan, M. D. McIlroy: UNIX Programmer's Manual, Seventh Edition, Bell Telephone Laboratories, Incorporated, Murray Hill, NJ 1979
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Binärformat für ausführbare Programme, Bibliotheken und/oder Objektcode