Исполняемый и связываемый формат
Расширение имени файла | никто, .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_WARNING] | Далее указывается версия 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
- Независимый от позиции код
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б Спецификация стандарта интерфейса инструмента (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 г. на Wayback Machine 30 мая 2018 г.
- ^ Фоли, Мэри Джо. «Под капотом подсистемы Microsoft Windows для Linux | ZDNet» . ЗДНет . Проверено 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 (1 августа 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 г.