stringtranslate.com

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

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

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

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

Макет файла

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

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

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

00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|

00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 |..>......H@.....|

Пример шестнадцатеричного дампа заголовка файла ELF [4]

Заголовок файла

Заголовок 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 . [17]

Игровые приставки

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

PowerPC

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

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

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

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

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

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

86открыть

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

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

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

В состав руководящего комитета входили Марк Юинг , Дион Джонсон, Эван Лейбович, Брюс Перенс , Эндрю Роуч, Брайан Уэйн Спаркс и Линус Торвальдс . Другими участниками проекта были Кит Бостик , Чак Крэнор, Майкл Дэвидсон, Крис Дж. Деметриу, Ульрих Дреппер, Дон Даггер, Стив Гинзбург, Джон «Бешеный пес» Холл , Рон Холт, Джордан Хаббард , Дэйв Дженсен, Кин Джонстон, Эндрю Джози, Роберт Липе, Бела Лубкин, Тим Марсланд, Грег Пейдж, Рональд Джо Рекорд, Тим Ракл, Джоэл Сильверстайн, Чиа-пи Тьен и Эрик Троан. Представленные операционные системы и компании включали 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 для приложений Linux .

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

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

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

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

Рекомендации

  1. ^ ab Стандарт интерфейса инструмента (TIS) Спецификация формата исполняемых файлов и ссылок (ELF), версия 1.2 (май 1995 г.)
  2. ^ Стандарт интерфейса инструмента (TIS) Спецификация портативных форматов, версия 1.1 (октябрь 1993 г.)
  3. ^ Двоичный интерфейс приложения System V, версия 4.1 (18 марта 1997 г.)
  4. ^ «Доступные лексеры — Пигменты». pygments.org .
  5. ^ "Заголовок ELF" . Sco.com. Июль 2000 года . Проверено 7 февраля 2014 г.
  6. ^ "LXR Linux/include/linux/elf.h". Linux.нет . Проверено 27 апреля 2015 г.
  7. ^ "Анонс glibc 2.12" .
  8. ^ «sourceware.org Git — glibc.git/blob — libc-abis».
  9. ^ «sourceware.org Git — glibc.git/blob — sysdeps/gnu/ldsodefs.h». Архивировано из оригинала 07 марта 2021 г. Проверено 28 октября 2019 г.
  10. ^ «Заголовок программы». Sco.com. Июль 2000 года . Проверено 05 апреля 2017 г.
  11. Ссылки _ исходное программное обеспечение.org . Проверено 30 апреля 2017 г. .
  12. ^ «Двоичные форматы». Архивировано из оригинала 31 марта 2019 г. Проверено 31 марта 2019 г.
  13. ^ "MinixReleases - Minix Wiki" . Wiki.minix3.org. Архивировано из оригинала 30 марта 2013 г. Проверено 19 января 2014 г.
  14. ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 15 сентября 2020 г. Проверено 19 октября 2016 г.{{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  15. ^ "GCCSDK - ОС RISC" . Рискос.инфо. 22 апреля 2012 г. Проверено 19 января 2014 г.
  16. ^ «Руководство программиста Guardian» (PDF) . Хьюлетт Паккард Энтерпрайз. Архивировано из оригинала (PDF) 30 мая 2018 г. Проверено 30 мая 2018 г.п. 44. Архивировано из оригинала. Архивировано 30 мая 2018 г. на Wayback Machine 30 мая 2018 г.
  17. ^ Фоли, Мэри Джо. «Под капотом подсистемы Microsoft Windows для Linux | ZDNet». ЗДНет . Проверено 19 августа 2016 г.
  18. ^ PlayStation Portable использует зашифрованный и перемещенный ELF: PSP
  19. ^ Формат исполняемого файла ОС Symbian.
  20. ^ Розен, Кеннет; Ведущий, Дуглас; Клее, Рэйчел; Росински, Ричард (2007). UNIX: Полный справочник (2-е изд.). МакГроу Хилл Профессионал. п. 707. ИСБН 9780071706988. Проверено 8 июня 2017 г. Динамически подключаемые библиотеки также называются общими объектами (.so).
  21. ^ Томас, Ромен. «Форматы Android». Кварковая лаборатория . Архивировано из оригинала 16 февраля 2023 года . Проверено 17 января 2023 г.
  22. ^ «Глава 4: Объектные файлы», Двоичный интерфейс приложения System V , 26 октября 2009 г., e_machine
  23. ^ «Спецификации, ссылающиеся на LSB» . linuxfoundation.org . Проверено 27 апреля 2015 г.
  24. ^ «Формат исполняемых файлов и ссылок (ELF)» . linuxfoundation.org . Проверено 27 апреля 2015 г.
  25. ^ «Введение». linuxfoundation.org . Проверено 27 апреля 2015 г.
  26. ^ Лейбович, Эван (23 декабря 1997 г.). «86Открытые часто задаваемые вопросы». Архивировано из оригинала 11 марта 2007 г. Проверено 6 июня 2007 г.
  27. ^ Запись, Рональд (21 мая 1998 г.). «Бюллетень о статусе открытия в ШОС». Архивировано из оригинала 8 декабря 2008 г. Проверено 6 мая 2008 г.
  28. ^ Лейбович, Эван (25 июля 1999 г.). «Проект The86open – финальное обновление». Архивировано из оригинала 27 февраля 2007 г. Проверено 6 мая 2007 г.
  29. ^ Гордон, Райан. "Fatelf-спецификация v1". icculus.org . Проверено 25 июля 2010 г.
  30. ^ Гордон, Райан. «FatELF: Оказывается, неопределенность мне нравилась больше». icculus.org . Проверено 13 июля 2010 г.
  31. ^ Холверда, Том (3 ноября 2009 г.). «Райан Гордон останавливает проект FatELF» . osnews.com . Проверено 5 июля 2010 г.
  32. Брокмайер, Джо (23 июня 2010 г.). «САМ: Анатомия (предполагаемой) неудачи». Еженедельные новости Linux . Проверено 6 февраля 2011 г.

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

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