а.аут
Расширение имени файла | нет, .о, .so, .out |
---|---|
Магическое число | 0407 , 0410 , 0413 (в восьмеричном формате) ; 0107 , 0108 , 010B (в шестнадцатеричном формате) |
Разработано | АТ&Т |
Тип формата | Двоичные , исполняемые файлы , объекты , общие библиотеки |
a.out — это формат файла, используемый в старых версиях Unix-подобных компьютерных операционных систем для исполняемых файлов , объектного кода и, в более поздних системах, общих библиотек . Это сокращенная форма « вывода ассемблера », имени файла вывода Кена Томпсона ассемблера PDP-7 . [1] Впоследствии этот термин был применен к формату полученного файла в отличие от других форматов объектного кода.
«a.out» остается именем выходного файла по умолчанию для исполняемых файлов, созданных определенными компиляторами и компоновщиками , если выходное имя не указано, даже если созданные файлы на самом деле не имеют формата a.out. [2]
Поддержка формата a.out была удалена в ядре Linux версии 5.18. [3]
История [ править ]
Формат a.out для PDP-7 , аналогичный формату a.out , используемому в PDP-11 , появился в первой редакции UNIX. [4] Он был заменен форматом COFF в AT&T Unix System V , который, в свою очередь, был заменен форматом ELF в System V Release 4 . Файлы a.out идентифицируются магическими числами с восьмеричными кодами 0407, 0410 или 0413. [5]
Хотя Berkeley Unix некоторое время продолжала использовать формат a.out , современные системы BSD с тех пор перешли на ELF. NetBSD/i386 формально перешел с a.out на ELF в выпуске 1.5 (декабрь 2000 г.). FreeBSD/i386 перешла на ELF в качестве стандартного формата во время перехода с 2.2 на 3.0 в 1998 году, однако поддержка a.out осталась в системе. [6]
MINIX 3 перешел на ELF в версии 3.2.0 (февраль 2012 г.).
Linux также использовал a.out только до ядра 1.2 (март 1995 г.), когда он был заменен ELF и для этой платформы. [7] Поддержка ELF была добавлена в экспериментальное ядро 1.1.52. Переход Linux на ELF был более или менее вынужденным из-за сложного характера создания разделяемых библиотек a.out на этой платформе, что включало необходимость регистрации виртуального адресного пространства, в котором располагалась библиотека, в центральном органе управления, поскольку a.out . ld.so в Linux не смог переместить общие библиотеки. [8] Различные варианты BSD могли продолжать использовать двоичные файлы a.out еще долго после того, как Linux был вынужден переключиться на ELF, из-за несколько более гибкой природы формата BSD a.out по сравнению с форматом Linux. [9] [10] Формат файла a.out в Linux был объявлен устаревшим с выпуском ядра Linux 5.1, а последние части исходного кода, обрабатывающие его, были удалены в версии 5.18. [11] [12] [13]
Отладка [ править ]
Поддержка a.out для отладочной информации осуществляется посредством использования специальных записей в таблице символов, называемых stabs . Формат stabs также использовался во многих вариантах COFF и ELF .
См. также [ править ]
Ссылки [ править ]
- ^ Ричи (1993) : «Ассемблер PDP-7 Томпсона превзошел даже DEC по простоте; он оценивал выражения и выдавал соответствующие биты. Не было ни библиотек, ни загрузчика, ни редактора ссылок: ассемблеру был представлен весь исходный код программы, и возникший выходной файл с фиксированным именем был непосредственно исполняемым (это имя, a.out, немного объясняет этимологию Unix; это результат работы ассемблера. Даже после того, как система получила компоновщик и средства. если явно указать другое имя, оно будет сохранено как исполняемый результат компиляции по умолчанию.)"
- ^ Вуд, Руперт (8 апреля 2002 г.). «Что делать с a.out» . gcc-help (список рассылки) . Проверено 28 апреля 2007 г.
- ^ «Выход на выход [LWN.net]» . lwn.net . Проверено 12 сентября 2022 г.
- ^ Ричи, Деннис (3 ноября 1971 г.). a.out — выходные данные ассемблера и редактора ссылок (PDF) . Лаборатории Белла . Проверено 24 ноября 2006 г.
- ^ "страница a.out из раздела 5 8-го руководства unix" . man.cat-v.org . Проверено 12 октября 2022 г.
- ^ Лукас, Майкл В. (2019). Absolute FreeBSD: полное руководство по FreeBSD (3-е изд.). Сан-Франциско. п. 408. ИСБН 9781593278922 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Барлоу, Дэниел (14 июля 1996 г.). «Linux ELF HOWTO (v1.29)» . Архивировано из оригинала 13 июля 2004 года . Проверено 28 марта 2008 г.
- ^ Дреппер, Ульрих (20 августа 2006 г.). «Как писать общие библиотеки» (PDF) . 4.0. Раздел 1.1 (Немного истории). Архивировано (PDF) из оригинала 16 июня 2007 года . Проверено 20 июня 2007 г.
При внедрении разделяемых библиотек необходимо было принять определенные проектные решения, чтобы работать с ограничениями a.out. (...) По всем этим и многим другим причинам Linux рано перешел на использование ELF (формата исполняемых ссылок) в качестве двоичного формата.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Янгдейл, Эрик (1 апреля 1995 г.). «Формат объектного файла ELF: Введение» . Архивировано из оригинала 10 марта 2009 года . Проверено 6 мая 2012 г.
(...) вполне возможно разработать реализации разделяемой библиотеки, которые работают с a.out. Текущие разделяемые библиотеки Linux, безусловно, являются одним из примеров; Другим примером являются общие библиотеки в стиле SunOS, которые в настоящее время используются BSD-du-jour. Общие библиотеки в стиле SunOS содержат во многом те же концепции, что и общие библиотеки ELF (...)
- ^ «Мифы о БСД» . Архивировано из оригинала 17 апреля 2007 года . Проверено 10 апреля 2007 г.
Никаких серьезных причин для перехода раньше не было. В частности, во FreeBSD не было (и нет) проблем с созданием разделяемых библиотек, которые стимулировали переход Linux с a.out на ELF.
- ^ «Ядро Linux наконец прекращает поддержку A.out» . Фороникс . Проверено 1 сентября 2020 г.
- ^ Петков, Борислав (5 марта 2019 г.). «x86: прекращена поддержка a.out» . Проверено 5 марта 2019 г.
Linux поддерживает двоичные файлы ELF уже около 25 лет. Дамп ядра a.out значительно ухудшился, и потребуется некоторое исправление, чтобы снова привести его в форму, но, учитывая, что даже цепочки инструментов не могут создавать исполняемые файлы a.out в конфигурации по умолчанию, давайте объявим поддержку a.out устаревшей и удалим ее через пару выпусков. , вместо.
- ^ Корбет, Джонатан (22 мая 2022 г.). «Выпущено ядро 5.18» . ЛВН . Проверено 22 мая 2022 г.
удалены последние остатки поддержки a.out
- Ричи, Деннис М. (20–23 апреля 1993 г.). Развитие языка Си . Вторая конференция ACM SIGPLAN по истории языков программирования (HOPL-II) . Кембридж, Массачусетс: ACM . стр. 201–208. дои : 10.1145/154766.155580 . ISBN 0-89791-570-4 .