a.out

a.out (od ang. assembler output) – format plików wykonywalnych używany szczególnie w Uniksie i innych uniksopodobnych systemach operacyjnych jako format plików wykonywalnych, plików obiektowych oraz bibliotek dzielonych.

Format a.out pojawił się w pierwszej wersji systemu Unix działającej na komputerach PDP-7.

Wypieranie przez ELF

Format a.out został zastąpiony formatem COFF od wydania System V Release 3, który z kolei zastąpiono w wydaniu System V Release 4 formatem ELF. W GNU/Linuksie formatu a.out używano jako domyślnego formatu plików wykonywalnych i biliotek do wydania jądra w wersji 1.2 i biblioteki libc5. Od tamtego czasu domyślnie używa się formatu ELF. FreeBSD przeszło z a.out na ELF przy wersji 3.0; NetBSD przy wersji 1.5.

Odmiany

Istnieje kilka odmian formatu a.out: OMAGIC, NMAGIC, ZMAGIC oraz QMAGIC[1]:

  • OMAGIC – ma ciągłe segmenty po nagłówku, bez żadnej separacji tekstu i danych.
  • NMAGIC – jest podobny do OMAGIC, jednak w nim segment danych jest ładowany na następnej stronie po zakończeniu segmentu tekstu; segment tekstu jest tylko do odczytu.
  • ZMAGIC – dodał wsparcie na stronicowanie na żądanie.
  • QMAGIC – pozwala nagłówkowi na bycie złączonym z pierwszą stroną segmentu tekstu, zazwyczaj oszczędzając jedną stronę pamięci. Pliki wykonywalne QMAGIC z reguły są ładowane jedną stronę przed końcem wirtualnej przestrzeni adresowej, żeby umożliwić wychwycenie dereferencji wskaźnika zerowego poprzez błąd segmentacji.

a.out jako nazwa pliku

a.out jest tradycyjną nazwą pliku, generowanego przez kompilatory (a dokładniej: linkery). Nazwa pliku ("a.out") obecnie nie ma związku z jego formatem (np. ELF). Domyślną nazwę można zmienić stosując, właściwy dla danego kompilatora, przełącznik. Przykładowo, w kompilatorach gcc/g++ jest to -o <nazwa pliku> :

gcc -Wall hello.cpp -o hello

(powstanie plik wykonywalny, o nazwie "hello").

Przypisy

Linki zewnętrzne