Исполняемый и связываемый формат
Расширение имени файла |
никто, .axf , .bin , .эльф , .о , .вне , .prx , .puff , .является , .мод и .так |
---|---|
Магическое число | 0x7F 'E' 'L' 'F' |
Разработано | Системные лаборатории Unix [ 1 ] : 3 |
Тип формата | Двоичный файл , исполняемый файл , объект , общая библиотека , дамп ядра |
Контейнер для | Множество исполняемых двоичных форматов |
В вычислениях формат исполняемый и связываемый [ 2 ] ( ELF , ранее называвшийся Extensible Linking Format ) — общий стандартный формат файлов для исполняемых файлов, объектного кода , общих библиотек и дампов ядра . Впервые опубликовано в спецификации двоичного интерфейса приложения (ABI) Unix версии операционной системы под названием System V Release 4 (SVR4). [ 3 ] и позже в Стандарте интерфейса инструмента, [ 1 ] он был быстро принят различными поставщиками систем Unix . выбрал его в качестве стандартного формата двоичных файлов для Unix и Unix-подобных систем на x86 процессорах В 1999 году проект 86open .
По своей конструкции формат ELF является гибким, расширяемым и кроссплатформенным . Например, он поддерживает разные порядки байтов и размеры адресов, поэтому не исключает какой-либо конкретный процессор или архитектуру набора команд . Это позволило ему быть адаптированным во многих различных операционных системах на многих различных аппаратных платформах .
Макет файла
[ редактировать ]Каждый файл ELF состоит из одного заголовка ELF, за которым следуют данные файла. Данные могут включать в себя:
- Таблица заголовков программы, описывающая ноль или более сегментов памяти.
- Таблица заголовков разделов, описывающая ноль или более разделов.
- Данные, на которые ссылаются записи в таблице заголовков программы или таблице заголовков разделов.
Сегменты содержат информацию, необходимую для во время выполнения выполнения файла , а разделы содержат важные данные для связывания и перемещения. Любой байт во всем файле может принадлежать не более чем одному разделу, но могут встречаться потерянные байты, которые не принадлежат ни одному разделу.
Заголовок файла
[ редактировать ]Заголовок ELF определяет, использовать ли 32-битные или 64-битные адреса. Заголовок содержит три поля, на которые влияет этот параметр, и смещает другие поля, следующие за ними. Заголовок ELF имеет длину 52 или 64 байта для 32-битных и 64-битных двоичных файлов соответственно.
Компенсировать | Размер (байты) | Поле | Цель | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-битный | 64-битная | 32-битный | 64-битная | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | e_ident[EI_MAG0] через e_ident[EI_MAG3] | 0x7F с последующим ELF ( 45 4c 46 ) в ASCII ; эти четыре байта составляют магическое число .
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 1 | e_ident[EI_CLASS] | Этот байт имеет значение либо 1 или 2 для обозначения 32- или 64-битного формата соответственно.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x05 | 1 | e_ident[EI_DATA] | Этот байт имеет значение либо 1 или 2 для обозначения маленького или большого порядка байтов соответственно. Это влияет на интерпретацию многобайтовых полей, начинающихся со смещения. 0x10 .
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x06 | 1 | e_ident[EI_VERSION] | Установить на 1 для исходной и текущей версии ELF.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x07 | 1 | e_ident[EI_OSABI] | целевой операционной системы Идентифицирует ABI .
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 1 | e_ident[EI_ABIVERSION] | Далее указывается версия ABI. Его интерпретация зависит от целевого ABI. Ядро Linux (по крайней мере после версии 2.6) не имеет его определения, [ 5 ] поэтому он игнорируется для статически связанных исполняемых файлов. В этом случае смещение и размер EI_PAD равны 8 .
glibc 2.12+ на всякий случай e_ident[EI_OSABI] == 3 рассматривает это поле как версию ABI динамического компоновщика : [ 6 ] он определяет список функций динамического компоновщика, [ 7 ] лечит e_ident[EI_ABIVERSION] как уровень функции, запрошенный общим объектом (исполняемым файлом или динамической библиотекой), и отказывается загружать его, если запрашивается неизвестная функция, т.е. e_ident[EI_ABIVERSION] больше, чем самый большой известный объект. [ 8 ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x09 | 7 | e_ident[EI_PAD] | Зарезервированные байты заполнения. В настоящее время не используется. Должен быть заполнен нулями и игнорироваться при чтении. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 2 | e_type | Определяет тип объектного файла.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x12 | 2 | электронная машина | Определяет целевую архитектуру набора команд . Некоторые примеры:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 4 | электронная_версия | Установить на 1 для оригинальной версии ELF.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 4 | 8 | e_entry | Это адрес памяти точки входа, с которой процесс начинает выполняться. Это поле имеет длину 32 или 64 бита, в зависимости от формата, определенного ранее (байт 0x04). Если файл не имеет связанной точки входа, то это значение равно нулю. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x20 | 4 | 8 | e_phoff | Указывает на начало таблицы заголовков программы. Обычно он следует за заголовком файла сразу за этим, создавая смещение 0x34 или 0x40 для 32- и 64-битных исполняемых файлов ELF соответственно.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x28 | 4 | 8 | e_shoff | Указывает на начало таблицы заголовков разделов. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x30 | 4 | e_flags | Интерпретация этого поля зависит от целевой архитектуры. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x34 | 2 | e_ehsize | Содержит размер этого заголовка, обычно 64 байта для 64-битного формата и 52 байта для 32-битного формата. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2A | 0x36 | 2 | e_pentsize | Содержит размер записи таблицы заголовков программы. Как объясняется ниже, обычно это 0x20 (32 бита) или 0x38 (64 бита). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x38 | 2 | e_phnum | Содержит количество записей в таблице заголовков программы. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2E | 0x3A | 2 | e_shentsize | Содержит размер записи таблицы заголовков разделов. Как поясняется ниже, обычно это 0x28 (32 бита) или 0x40 (64 бита). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x30 | 0x3C | 2 | e_shnum | Содержит количество записей в таблице заголовков разделов. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x32 | 0x3E | 2 | e_shstrndx | Содержит индекс записи таблицы заголовков разделов, содержащей имена разделов. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x34 | 0x40 | Конец заголовка ELF (размер). |
Заголовок программы
[ редактировать ]Таблица заголовков программы сообщает системе, как создать образ процесса. Он находится по смещению файла e_phoff и состоит из записи e_phnum , каждая имеет размер e_phentsize . Компоновка 32-битного ELF и 64-битного ELF немного отличается, потому что p_flags находятся в другом месте структуры по причинам выравнивания. Каждая запись структурирована следующим образом:
Компенсировать | Размер (байты) | Поле | Цель | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-битный | 64-битная | 32-битный | 64-битная | |||||||||||||||||||||||||||||||||||||||
0x00 | 4 | p_type | Определяет тип сегмента.
| |||||||||||||||||||||||||||||||||||||||
0x04 | 4 | p_flags | Флаги, зависящие от сегмента (позиция для 64-битной структуры).
| |||||||||||||||||||||||||||||||||||||||
0x04 | 0x08 | 4 | 8 | p_offset | Смещение сегмента в файле-изображении. | |||||||||||||||||||||||||||||||||||||
0x08 | 0x10 | 4 | 8 | п_ваддр | Виртуальный адрес сегмента в памяти. | |||||||||||||||||||||||||||||||||||||
0x0C | 0x18 | 4 | 8 | p_paddr | В системах, где важен физический адрес, зарезервирован для физического адреса сегмента. | |||||||||||||||||||||||||||||||||||||
0x10 | 0x20 | 4 | 8 | p_files | Размер сегмента изображения файла в байтах. Может быть 0. | |||||||||||||||||||||||||||||||||||||
0x14 | 0x28 | 4 | 8 | p_memsz | Размер сегмента в памяти в байтах. Может быть 0. | |||||||||||||||||||||||||||||||||||||
0x18 | 4 | p_flags | Флаги, зависящие от сегмента (позиция для 32-битной структуры). См. выше p_flags поле для определений флагов.
| |||||||||||||||||||||||||||||||||||||||
0x1C | 0x30 | 4 | 8 | p_align | 0 и 1 не указывайте выравнивание. В противном случае должна быть положительная целая степень 2, с p_vadr приравнивание p_offset модуль p_align .
| |||||||||||||||||||||||||||||||||||||
0x20 | 0x38 | Конец заголовка программы (размер). |
Заголовок раздела
[ редактировать ]Компенсировать | Размер (байты) | Поле | Цель | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-битный | 64-битная | 32-битный | 64-битная | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | sh_name | Смещение строки в разделе .shstrtab , представляющее имя этого раздела. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 4 | sh_type | Определяет тип этого заголовка.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 4 | 8 | sh_flags | Определяет атрибуты раздела.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0C | 0x10 | 4 | 8 | sh_addr | Виртуальный адрес раздела в памяти для загружаемых разделов. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 0x18 | 4 | 8 | sh_offset | Смещение раздела в файле-изображении. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 0x20 | 4 | 8 | sh_size | Размер в байтах раздела в файле-изображении. Может быть 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 0x28 | 4 | ш_ссылка | Содержит индекс связанного раздела. Это поле используется для нескольких целей, в зависимости от типа раздела. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x2C | 4 | sh_info | Содержит дополнительную информацию о разделе. Это поле используется для нескольких целей, в зависимости от типа раздела. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x30 | 4 | 8 | sh_addralign | Содержит необходимое выравнивание раздела. Это поле должно быть степенью двойки. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x38 | 4 | 8 | sh_entsize | Содержит размер в байтах каждой записи для разделов, содержащих записи фиксированного размера. В противном случае это поле содержит ноль. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x40 | Конец заголовка раздела (размер). |
Инструменты
[ редактировать ]readelf
— это двоичная утилита Unix, которая отображает информацию об одном или нескольких файлах ELF. Свободная программная реализация предоставляется GNU Binutils .elfutils
предоставляет альтернативные инструменты GNU Binutils исключительно для Linux. [ 10 ]elfdump
— это команда для просмотра информации ELF в файле ELF, доступная в Solaris и FreeBSD .objdump
предоставляет широкий спектр информации о файлах ELF и других форматах объектов.objdump
использует библиотеку дескрипторов двоичных файлов в качестве серверной части для структурирования данных ELF.- Юникс
file
Утилита может отображать некоторую информацию о файлах ELF, включая архитектуру набора команд , для которой предназначен код в перемещаемом, исполняемом или общем объектном файле или для которого дамп ядра ELF. был создан
Приложения
[ редактировать ]Unix-подобные системы
[ редактировать ]Формат ELF заменил старые исполняемые форматы в различных средах. Он заменил a.out и COFF форматы в Unix-подобных операционных системах:
- Линукс
- Солярис / Иллюмос
- ИРИКС
- FreeBSD [ 11 ]
- NetBSD
- OpenBSD
- Редокс
- Стрекоза БСД
- Слог
- HP-UX (за исключением 32-битных программ PA-RISC, которые продолжают использовать SOM )
- QNX Нейтрино
- МИНИКС [ 12 ]
Внедрение не-Unix
[ редактировать ]ELF также получил некоторое распространение в операционных системах, отличных от Unix, таких как:
- OpenVMS в Itanium и amd64. версиях [ 13 ]
- BeOS Revision 4 и более поздние версии для x86 компьютеров на базе (где он заменил формат переносимого исполняемого файла ; версия PowerPC осталась с предпочтительным форматом исполняемого файла )
- Haiku — новая реализация BeOS с открытым исходным кодом.
- РИСКИ [ 14 ]
- Stratus VOS , в версиях PA-RISC и x86
- СкайОС
- Фуксия ОС
- З/ТПФ
- ОС HPE NonStop [ 15 ]
- боги
Microsoft Windows также использует формат ELF, но только для своей подсистемы Windows для системы совместимости с Linux. [ 16 ]
Игровые консоли
[ редактировать ]Некоторые игровые консоли также используют ELF:
- Портативная PlayStation , [ 17 ] PlayStation Vita , PlayStation (консоль) , PlayStation 2 , PlayStation 3 , PlayStation 4 , PlayStation 5
- GP2X
- Дримкаст
- GameCube
- Нинтендо 64
- Вий
- Вии Ю
PowerPC
[ редактировать ]Другие (операционные) системы, работающие на PowerPC и использующие ELF:
- AmigaOS 4 , исполняемый файл ELF заменил предыдущий формат Extended Hunk Format (EHF), который использовался на Amigas, оснащенных картами расширения процессора PPC.
- МорфОС
- ЖДАТЬ
- Café OS (операционная система Wii U)
Мобильные телефоны
[ редактировать ]Некоторые операционные системы для мобильных телефонов и мобильных устройств используют ELF:
- Symbian OS v9 использует E32Image [ 18 ] формат, основанный на формате файла ELF;
- Sony Ericsson , например, W800i , W610 , W300 и т. д.
- Siemens , платформы SGOLD и SGOLD2: от Siemens C65 до S75 и BenQ-Siemens E71/ EL71 ;
- Motorola , например, E398, SLVR L7 , v360, v3i (и все телефоны LTE2, на которых установлен этот патч).
- Бада , например, Samsung Wave S8500 .
- Телефоны или планшеты Nokia под управлением ОС Maemo или Meego, например Nokia N900 .
- Android использует ELF .so (общий объект [ 19 ] ) библиотеки для собственного интерфейса Java . [ нужна ссылка ] С помощью Android Runtime (ART), используемого по умолчанию, начиная с Android 5.0 «Lollipop» , все приложения при установке компилируются в собственные двоичные файлы ELF. [ 20 ] Также можно использовать собственное программное обеспечение Linux из менеджеров пакетов, таких как Termux, или скомпилировать их из источников через Clang или GCC, которые доступны в репозиториях.
Некоторые телефоны могут запускать файлы ELF с помощью патча , который добавляет ассемблерный код в основную прошивку . Эта функция известна как ELFPack в подпольной культуре моддинга . Формат файла ELF также используется с Atmel AVR (8-бит), AVR32. [ 21 ] и с архитектурой микроконтроллера Texas Instruments MSP430 . Некоторые реализации открытой прошивки также могут загружать файлы ELF, в первую очередь машинах реализация Apple, используемая почти во всех PowerPC , производимых компанией.
Технические характеристики
[ редактировать ]- Общий:
- Двоичный интерфейс приложения System V , версия 4.1 (18 марта 1997 г.)
- Обновление ABI System V (октябрь 2009 г.)
- AMD64 :
- Рука :
- ИА-32 :
- ИА-64 :
- М32Р :
- Дополнение M32R ELF ABI, версия 1.2 (26 августа 2004 г.)
- МИПС :
- Дополнение к процессору System V ABI, MIPS RISC
- Документация MIPS EABI. Архивировано 1 апреля 2012 г. на Wayback Machine (11 июня 2003 г.).
- Моторола 6800 :
- ПА-РИСК :
- Дополнение ELF для PA-RISC версии 1.43 (6 октября 1997 г.)
- Мощность ПК :
- Система V ABI, дополнение PPC
- двоичного интерфейса встроенного приложения PowerPC 32-битная реализация (1 октября 1995 г.)
- Дополнение к двоичному интерфейсу 64-битного приложения PowerPC ELF, версия 1.9 (2004 г.)
- РИСК-V :
- СПАРК :
- С/390 :
- zСерия :
- ОС Симбиан 9:
Стандартная база Linux (LSB) дополняет некоторые из приведенных выше спецификаций для архитектур, в которых она указана. [ 22 ] Например, так обстоит дело с дополнением System V ABI, AMD64. [ 23 ] [ 24 ]
86открыть
[ редактировать ]86open был проектом по формированию консенсуса по общему формату двоичных файлов для Unix и Unix-подобных операционных систем на общей , совместимой с ПК архитектуре x86 , чтобы побудить разработчиков программного обеспечения перейти на эту архитектуру. [ 25 ] Первоначальная идея заключалась в стандартизации небольшого подмножества 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 года. [ 26 ] а позже перешел на интегрированную поддержку двоичного формата Linux через контейнеры Solaris для приложений Linux .
Поскольку BSD уже давно поддерживают двоичные файлы Linux (через уровень совместимости ), а основные поставщики x86 Unix добавили поддержку этого формата, проект решил, что Linux ELF — это формат, выбранный отраслью, и «объявил [d] о своем распаде» 25 июля 1999 г. [ 27 ]
FatELF: универсальные двоичные файлы для Linux
[ редактировать ]FatELF — это расширение двоичного формата ELF, которое добавляет «толстого» двоичного кода . возможности [ 28 ] Он предназначен для Linux и других Unix-подобных операционных систем. В дополнение к абстракции архитектуры ЦП ( порядок байтов , размер слова , ЦП набор инструкций и т. д.) существует потенциальное преимущество абстракции программной платформы, например двоичные файлы, которые поддерживают несколько ABI версий ядра. По состоянию на 2021 год [update], FatELF не интегрирован в основное ядро Linux. [ 29 ] [ 30 ] [ 31 ]
См. также
[ редактировать ]- Бинарный интерфейс приложения
- Сравнение форматов исполняемых файлов
- DWARF – формат отладочных данных.
- Стандарт двоичной совместимости Intel
- Портативный исполняемый файл - формат, используемый Windows.
- vDSO – виртуальный DSO
- Независимый от позиции код
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Спецификация стандарта интерфейса инструмента (TIS) исполняемого файла и формата связывания (ELF), версия 1.2 (май 1995 г.)
- ^ Стандарт интерфейса инструмента (TIS) Спецификация портативных форматов, версия 1.1 (октябрь 1993 г.)
- ^ Двоичный интерфейс приложения System V , версия 4.1 (18 марта 1997 г.)
- ^ «Заголовок ELF» . Sco.com. Июль 2000 года . Проверено 7 февраля 2014 г.
- ^ «LXR Linux/include/linux/elf.h» . Linux.нет . Проверено 27 апреля 2015 г.
- ^ «анонс glibc 2.12» .
- ^ «sourceware.org Git — glibc.git/blob — libc-abis» .
- ^ «sourceware.org Git — glibc.git/blob — sysdeps/gnu/ldsodefs.h» . Архивировано из оригинала 07 марта 2021 г. Проверено 28 октября 2019 г.
- ^ «Заголовок программы» . Sco.com. Июль 2000 года . Проверено 05 апреля 2017 г.
- ^ «Эльфутилс» . исходное программное обеспечение.org . Проверено 30 апреля 2017 г. .
- ^ «Двоичные форматы» . Архивировано из оригинала 31 марта 2019 г. Проверено 31 марта 2019 г.
- ^ «MinixReleases – Minix Wiki» . Wiki.minix3.org. Архивировано из оригинала 30 марта 2013 г. Проверено 19 января 2014 г.
- ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 15 сентября 2020 г. Проверено 19 октября 2016 г.
{{cite web}}
: CS1 maint: архивная копия в заголовке ( ссылка ) - ^ «GCCSDK – ОС RISC» . Рискос.инфо. 22 апреля 2012 г. Архивировано из оригинала 19 февраля 2014 г. Проверено 19 января 2014 г.
- ^ «Руководство программиста Guardian» (PDF) . Хьюлетт Паккард Энтерпрайз. Архивировано из оригинала (PDF) 30 мая 2018 г. Проверено 30 мая 2018 г. п. 44 заархивировано из оригинала 30 мая 2018 г.
- ^ Фоли, Мэри Джо. «Под капотом подсистемы Microsoft Windows для Linux» . ЗДНет . Проверено 19 августа 2016 г.
- ^ PlayStation Portable использует зашифрованный и перемещенный ELF: PSP
- ^ Формат исполняемого файла ОС Symbian.
- ^
Розен, Кеннет; Ведущий, Дуглас; Клее, Рэйчел; Росински, Ричард (2007). UNIX: Полный справочник (2-е изд.). МакГроу Хилл Профессионал. п. 707. ИСБН 9780071706988 . Проверено 8 июня 2017 г.
Динамически подключаемые библиотеки также называются общими объектами (.so).
- ^ Томас, Ромен. «Форматы Android» . Кварковая лаборатория . Архивировано из оригинала 16 февраля 2023 года . Проверено 17 января 2023 г.
- ^ «Глава 4: Объектные файлы» , Двоичный интерфейс приложения System V , 26 октября 2009 г., e_machine
- ^ «Спецификации, ссылающиеся на LSB» . linuxfoundation.org . Проверено 27 апреля 2015 г.
- ^ «Формат исполняемых файлов и ссылок (ELF)» . linuxfoundation.org . Проверено 27 апреля 2015 г.
- ^ "Введение" . linuxfoundation.org . Проверено 27 апреля 2015 г.
- ^ Лейбович, Эван (23 декабря 1997 г.). «86Открытые часто задаваемые вопросы» . Архивировано из оригинала 11 марта 2007 г. Проверено 6 июня 2007 г.
- ^ Рекорд, Рональд (21 мая 1998 г.). «Бюллетень о статусе открытия в ШОС» . Архивировано из оригинала 8 декабря 2008 г. Проверено 6 мая 2008 г.
- ^ Лейбович, Эван (25 июля 1999 г.). «Проект The86open – финальное обновление» . Архивировано из оригинала 27 февраля 2007 г. Проверено 6 мая 2007 г.
- ^ Гордон, Райан. "fatelf-спецификация v1" . icculus.org . Проверено 25 июля 2010 г.
- ^ Гордон, Райан. «FatELF: Оказывается, неопределенность мне нравилась больше» . icculus.org . Проверено 13 июля 2010 г.
- ^ Холверда, Том (3 ноября 2009 г.). «Райан Гордон прекращает проект FatELF» . osnews.com . Проверено 5 июля 2010 г.
- ^ Брокмайер, Джо (23 июня 2010 г.). «САМ: Анатомия (предполагаемой) неудачи» . Еженедельные новости Linux . Проверено 6 февраля 2011 г.
Дальнейшее чтение
[ редактировать ]- Левин, Джон Р. (2000) [октябрь 1999 г.]. Линкеры и загрузчики . Серия Моргана Кауфмана по разработке программного обеспечения и программированию (1-е изд.). Сан-Франциско, США: Морган Кауфманн . ISBN 1-55860-496-0 . OCLC 42413382 . Архивировано из оригинала 5 декабря 2012 г. Проверено 12 января 2020 г. Код: [1] [2] Ошибки: [3]
- Ульрих Дреппер , Как писать общие библиотеки, версия 4.1.2 (2011 г.). Опубликовано на веб-странице автора https://www.akkadia.org/drepper .
- Невоспетый герой: трудолюбивый ЭЛЬФ Питера Сибаха, 20 декабря 2005 г., заархивировано из оригинала 24 февраля 2007 г.
- LibElf и GElf — библиотека для управления файлами ELf на Wayback Machine (архивировано 25 февраля 2004 г.)
- Формат объектного файла ELF: Введение , Формат объектного файла ELF, автор Dissection, Эрик Янгдейл (1995-05-01)
- Быстрое руководство по созданию действительно маленьких исполняемых файлов ELF для Linux от Брайана Райтера
- Перемещение ELF в неперемещаемые объекты Жюльена Ванега (13 августа 2003 г.)
- Встроенная отладка ELF без ptrace, выполненная командой ELFsh (01 августа 2005 г.)
- Исследование загрузки и перемещения ELF, проведенное Пэтом Бейрном (3 августа 1999 г.)
Внешние ссылки
[ редактировать ]- Справочник FreeBSD: Бинарные форматы (архивная версия)
- FreeBSD elf(5) страница руководства
- Часто задаваемые вопросы по NetBSD ELF
- Линукс elf(5) страница руководства
- Руководство по компоновщику и библиотекам Oracle Solaris
- Проект ERESI: реверс-инжиниринг операционных систем на базе ELF. Архивировано 14 марта 2021 г. на Wayback Machine.
- Статья Linux Today на 86открыта 26 июля 1999 г.
- Объявление о 86open в списке рассылки Debian Announce, 10 октября 1997 г., Брюс Перенс
- Заявление Ульриха Дреппера (PDF) в деле Группы ШОС против IBM , 19 сентября 2006 г.
- 86open и обсуждение ELF. Архивировано 1 февраля 2019 г. в Wayback Machine на Гроклау , 13 августа 2006 г.