a.out

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

Linki zewnętrzne[edytuj | edytuj kod]