stringtranslate.com

Исполняемый и связываемый формат

Файл ELF имеет два представления: заголовок программы показывает сегменты, используемые во время выполнения, тогда как заголовок раздела перечисляет набор разделов .

В вычислительной технике Executable and Linkable Format [2] ( ELF , ранее назывался Extensible Linking Format ) — это общепринятый стандартный формат файлов для исполняемых файлов, объектного кода , разделяемых библиотек и дампов ядра . Впервые опубликованный в спецификации для двоичного интерфейса приложений (ABI) версии операционной системы Unix под названием System V Release 4 (SVR4) [3] , а затем в Tool Interface Standard [1] , он был быстро принят различными поставщиками систем Unix . В 1999 году он был выбран в качестве стандартного двоичного формата файлов для Unix и Unix-подобных систем на процессорах x86 проектом 86open.

По своей конструкции формат ELF является гибким, расширяемым и кроссплатформенным . Например, он поддерживает различные порядки байтов и размеры адресов, поэтому не исключает какую-либо конкретную архитектуру ЦП или набора инструкций . Это позволило принять его во многих различных операционных системах на многих различных аппаратных платформах .

Расположение файла

Каждый файл ELF состоит из одного заголовка ELF, за которым следуют данные файла. Данные могут включать:

Структура файла ELF с выделенными ключевыми записями

Сегменты содержат информацию, необходимую для выполнения файла во время выполнения , в то время как разделы содержат важные данные для связывания и перемещения. Любой байт во всем файле может принадлежать максимум одному разделу, и могут встречаться байты-сироты, которые не принадлежат ни одному разделу.

Заголовок ELF

Заголовок ELF определяет, использовать ли 32-битные или 64-битные адреса. Заголовок содержит три поля, на которые влияет эта настройка, и смещает другие поля, которые следуют за ними. Заголовок ELF имеет длину 52 или 64 байта для 32-битных и 64-битных двоичных файлов соответственно.

Заголовок программы

Таблица заголовков программы сообщает системе, как создать образ процесса. Она находится по смещению файла e_phoff и состоит из записей e_phnum , каждая размером e_phentsize . Макет немного отличается в 32-битном ELF по сравнению с 64-битным ELF, поскольку p_flags находятся в другом месте структуры для выравнивания. Каждая запись структурирована следующим образом:

Заголовок раздела

Инструменты

Приложения

Unix-подобные системы

Формат ELF заменил старые исполняемые форматы в различных средах. Он заменил форматы a.out и COFF в Unix-подобных операционных системах:

Принятие не-Unix

ELF также нашел некоторое применение в операционных системах, отличных от Unix, таких как:

Microsoft Windows также использует формат ELF, но только для своей системы совместимости с подсистемой Windows для Linux . [16]

Игровые консоли

Некоторые игровые консоли также используют ELF:

PowerPC

Другие (операционные) системы, работающие на PowerPC , которые используют ELF:

Мобильные телефоны

Некоторые операционные системы для мобильных телефонов и мобильных устройств используют ELF:

Некоторые телефоны могут запускать файлы ELF с помощью патча , который добавляет код сборки к основной прошивке , что является функцией, известной как ELFPack в культуре андеграундного моддинга . Формат файла ELF также используется с архитектурами микроконтроллеров Atmel AVR (8-бит), AVR32 [21] и Texas Instruments MSP430 . Некоторые реализации Open Firmware также могут загружать файлы ELF, в частности, реализация Apple , используемая почти во всех машинах PowerPC , производимых компанией.

Блокчейн-платформы

Технические характеристики

Linux Standard Base (LSB) дополняет некоторые из вышеперечисленных спецификаций для архитектур, в которых она указана. [23] Например, это касается System V ABI, AMD64 Supplement. [24] [25]

86открыто

86open был проектом по формированию консенсуса по общему двоичному формату файлов для Unix и Unix-подобных операционных систем на общей PC-совместимой архитектуре x86 , чтобы побудить разработчиков программного обеспечения портировать на эту архитектуру. [26] Первоначальная идея состояла в том, чтобы стандартизировать небольшое подмножество Spec 1170, предшественника Single UNIX Specification , и GNU C Library (glibc), чтобы позволить немодифицированным двоичным файлам работать на x86 Unix-подобных операционных системах. Первоначально проект назывался «Spec 150».

В конечном итоге был выбран формат ELF, а точнее реализация ELF для Linux, после того как он стал фактическим стандартом, поддерживаемым всеми вовлеченными поставщиками и операционными системами.

Группа начала проводить обсуждения по электронной почте в 1997 году и впервые встретилась в офисе Santa Cruz Operation 22 августа 1997 года.

Руководящий комитет состоял из Марка Юинга , Диона Джонсона, Эвана Лейбовича, Брюса Перенса , Эндрю Роуча, Брайана Уэйна Спаркса и Линуса Торвальдса . Другими людьми, принимавшими участие в проекте, были Кейт Бостик , Чак Крейнор, Майкл Дэвидсон, Крис Г. Деметриу, Ульрих Дреппер, Дон Даггер, Стив Гинзбург, Джон «maddog» Холл , Рон Холт, Джордан Хаббард , Дэйв Дженсен, Кин Джонстон, Эндрю Джози, Роберт Липе, Бела Лабкин, Тим Марсланд, Грег Пейдж, Рональд Джо Рекорд, Тим Ракл, Джоэл Сильверстайн, Чиа-пи Тиен и Эрик Троан. Были представлены следующие операционные системы и компании: BeOS , BSDI , FreeBSD , Intel , Linux , NetBSD , SCO и SunSoft .

Проект развивался, и в середине 1998 года SCO начала разрабатывать lxrun — слой совместимости с открытым исходным кодом, способный запускать двоичные файлы Linux на OpenServer , UnixWare и Solaris . SCO объявила об официальной поддержке lxrun на LinuxWorld в марте 1999 года. Sun Microsystems начала официально поддерживать lxrun для Solaris в начале 1999 года [27] , а затем перешла к интегрированной поддержке двоичного формата Linux через Solaris Containers for Linux Applications .

Поскольку BSD уже давно поддерживают двоичные файлы Linux (через уровень совместимости ), а основные поставщики x86 Unix добавили поддержку формата, проект решил, что Linux ELF — это формат, выбранный отраслью, и «объявил о своем роспуске» 25 июля 1999 года. [28]

FatELF: универсальные двоичные файлы для Linux

FatELF — это расширение двоичного формата ELF, которое добавляет возможности двоичного формата fat . [29] Он предназначен для Linux и других Unix-подобных операционных систем. Помимо абстракции архитектуры ЦП ( порядок байтов , размер слова , набор инструкций ЦП и т. д.), существует потенциальное преимущество абстракции программной платформы, например, двоичные файлы, которые поддерживают несколько версий ABI ядра . По состоянию на 2021 год FatELF не был интегрирован в основное ядро ​​Linux. [30] [31] [32]

Смотрите также

Ссылки

  1. ^ Спецификация формата исполняемого файла и связывания (ELF) стандарта интерфейса инструмента (TIS) , версия 1.2 (май 1995 г.)
  2. ^ Спецификация переносимых форматов стандарта интерфейса инструмента (TIS), версия 1.1 (октябрь 1993 г.)
  3. System V Application Binary Interface Edition 4.1 (1997-03-18)
  4. ^ "ELF Header". Sco.com. Июль 2000. Получено 2014-02-07 .
  5. ^ "LXR linux/include/linux/elf.h". linux.no . Получено 27 апреля 2015 г. .
  6. ^ "анонс glibc 2.12".
  7. ^ "sourceware.org Git - glibc.git/blob - libc-abis".
  8. ^ "sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h". Архивировано из оригинала 2021-03-07 . Получено 2019-10-28 .
  9. ^ "Program Header". Sco.com. Июль 2000. Получено 2017-04-05 .
  10. ^ "elfutils". sourceware.org . Получено 30 апреля 2017 г. .
  11. ^ "Двоичные форматы". Архивировано из оригинала 2019-03-31 . Получено 2019-03-31 .
  12. ^ "MinixReleases – Minix Wiki". Wiki.minix3.org. Архивировано из оригинала 2013-03-30 . Получено 2014-01-19 .
  13. ^ "Архивная копия" (PDF) . Архивировано из оригинала (PDF) 2020-09-15 . Получено 2016-10-19 .{{cite web}}: CS1 maint: архивная копия как заголовок ( ссылка )
  14. ^ "GCCSDK – RISC OS". Riscos.info. 2012-04-22. Архивировано из оригинала 2014-02-19 . Получено 2014-01-19 .
  15. ^ "Guardian Programmer's Guide" (PDF) . Hewlett Packard Enterprise. Архивировано из оригинала (PDF) 2018-05-30 . Получено 2018-05-30 .стр. 44 архивировано из оригинала 2018-5-30
  16. ^ Фоли, Мэри Джо. «Под капотом подсистемы Windows от Microsoft для Linux». ZDNet . Получено 19 августа 2016 г.
  17. ^ PlayStation Portable использует зашифрованный и перемещенный ELF: PSP
  18. ^ Формат исполняемого файла ОС Symbian
  19. ^ Розен, Кеннет; Хост, Дуглас; Клее, Рэйчел; Росински, Ричард (2007). UNIX: Полный справочник (2-е изд.). McGraw Hill Professional. стр. 707. ISBN 9780071706988. Получено 2017-06-08 . Динамически подключаемые библиотеки также называются разделяемыми объектами (.so).
  20. ^ Томас, Ромен. "Форматы Android". Quarks Lab . Архивировано из оригинала 16 февраля 2023 г. Получено 17 января 2023 г.
  21. ^ "Глава 4: Объектные файлы", System V Application Binary Interface , 2009-10-26, e_machine
  22. ^ "Solana Programs". Solana Foundation. 2024-11-11 . Получено 2024-11-11 . Solana использует инфраструктуру компилятора LLVM для компиляции программ в файлы Executable and Linkable Format (ELF).
  23. ^ "LSB Referenced Specifications". linuxfoundation.org . Получено 27 апреля 2015 г. .
  24. ^ "Executable and Linking Format (ELF)". linuxfoundation.org . Получено 27 апреля 2015 г. .
  25. ^ "Введение". linuxfoundation.org . Получено 27 апреля 2015 г. .
  26. ^ Лейбович, Эван (1997-12-23). ​​"86Open Frequently-Asked Questions". Архивировано из оригинала 2007-03-11 . Получено 2007-06-06 .
  27. Record, Ronald (1998-05-21). "Бюллетень о статусе 86open в SCO". Архивировано из оригинала 2008-12-08 . Получено 2008-05-06 .
  28. ^ Лейбович, Эван (1999-07-25). "The86open Project – Final Update". Архивировано из оригинала 2007-02-27 . Получено 2007-05-06 .
  29. ^ Гордон, Райан. "fatelf-specification v1". icculus.org . Получено 25.07.2010 .
  30. ^ Гордон, Райан. "FatELF: Оказывается, мне больше понравилась неопределенность". icculus.org . Получено 13 июля 2010 г.
  31. ^ Холверда, Том (3 ноября 2009 г.). «Райан Гордон останавливает проект FatELF» . osnews.com . Проверено 5 июля 2010 г.
  32. ^ Брокмейер, Джо (23 июня 2010 г.). "SELF: Анатомия (предполагаемой) неудачи". Linux Weekly News . Получено 2011-02-06 .

Дальнейшее чтение

Внешние ссылки