Исполняемый и связываемый формат - Executable and Linkable Format
Расширение имени файла | никто, .axf, .bin, .elf, .o, .prx, .puff, .ko, .mod и .так |
---|---|
Магическое число | 0x7F 'E' L 'F' |
Разработан | Лаборатории Unix System[1]:3 |
Тип формата | Двоичный, исполняемый файл, объект, общая библиотека, дамп ядра |
Контейнер для | Множество исполняемых двоичных форматов |
В вычисление, то Исполняемый и связываемый формат (ELF, ранее названный Расширяемый формат ссылок), является общепринятым стандартом формат файла за исполняемый файл файлы, объектный код, общие библиотеки, и дампы керна. Впервые опубликовано в спецификации для двоичный интерфейс приложения (ABI) Unix версия операционной системы с именем System V Выпуск 4 (SVR4),[2] и позже в Стандарте интерфейса инструментов,[1] это было быстро принято среди различных поставщиков Unix системы. В 1999 году он был выбран в качестве стандартного формата двоичных файлов для Unix и Unix-подобный системы на x86 процессоры 86открыто проект.
По своей конструкции формат ELF является гибким, расширяемым и кросс-платформенный. Например, он поддерживает разные байты и размеры адресов, чтобы не исключать каких-либо конкретных центральное процессорное устройство (CPU) или архитектура набора команд. Это позволило использовать его во многих операционные системы на разном оборудовании платформы.
Макет файла
Каждый файл 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[3]
Заголовок файла
Заголовок 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 | e_machine | Указывает цель архитектура набора команд. Вот несколько примеров:
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 4 | e_version | Установлен в 1 для оригинальной версии ELF. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 4 | 8 | e_entry | Это адрес памяти входная точка откуда начинается выполнение процесса. Это поле имеет длину 32 или 64 бита в зависимости от формата, определенного ранее. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
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_phentsize | Содержит размер записи таблицы заголовков программы. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x38 | 2 | e_phnum | Содержит количество записей в таблице заголовков программы. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2E | 0x3A | 2 | e_shentsize | Содержит размер записи таблицы заголовков раздела. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x30 | 0x3C | 2 | е_шнум | Содержит количество записей в таблице заголовков раздела. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | Определяет тип сегмента.
PT_LOOS к PT_HIOS (PT_LOPROC к PT_HIPROC) - это включающий зарезервированный диапазон для специфической семантики операционной системы (процессора). | ||||||||||||||||||||||||||||||||||||||
0x04 | 4 | p_flags | Сегментно-зависимые флаги (позиция для 64-битной структуры). | ||||||||||||||||||||||||||||||||||||||
0x04 | 0x08 | 4 | 8 | p_offset | Смещение сегмента в изображении файла. | ||||||||||||||||||||||||||||||||||||
0x08 | 0x10 | 4 | 8 | p_vaddr | Виртуальный адрес сегмента в памяти. | ||||||||||||||||||||||||||||||||||||
0x0C | 0x18 | 4 | 8 | p_paddr | В системах, где важен физический адрес, зарезервирован для физического адреса сегмента. | ||||||||||||||||||||||||||||||||||||
0x10 | 0x20 | 4 | 8 | p_filesz | Размер сегмента изображения в байтах. Может быть 0. | ||||||||||||||||||||||||||||||||||||
0x14 | 0x28 | 4 | 8 | p_memsz | Размер сегмента в памяти в байтах. Может быть 0. | ||||||||||||||||||||||||||||||||||||
0x18 | 4 | p_flags | Флаги, зависящие от сегмента (позиция для 32-битной структуры). | ||||||||||||||||||||||||||||||||||||||
0x1C | 0x30 | 4 | 8 | p_align | 0 и 1 не указывать выравнивания. В противном случае должна быть положительная целая степень двойки, при этом p_vaddr приравнивание 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 | sh_link | Содержит индекс раздела связанного раздела. Это поле используется для нескольких целей в зависимости от типа раздела. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 чисто для линукса.[10]elfdump
- это команда для просмотра информации ELF в файле ELF, доступная в Solaris и FreeBSD.objdump
предоставляет широкий спектр информации о файлах ELF и других форматах объектов.objdump
использует Библиотека дескрипторов двоичных файлов как серверная часть для структурирования данных ELF.- Unix
файл
утилита может отображать некоторую информацию о файлах ELF, включая архитектура набора команд для которого предназначен код в перемещаемом, исполняемом или совместно используемом объектном файле, или на котором ELF дамп ядра был произведен.
Приложения
Unix-подобные системы
Формат ELF заменил старые исполняемые форматы в различных средах. а. выход и COFF форматы в Unix-подобный операционные системы:
- Linux
- Солярис / Иллюмос
- IRIX
- FreeBSD[11]
- NetBSD
- OpenBSD
- Редокс
- DragonFly BSD
- Слог
- HP-UX (за исключением 32-битных программ PA-RISC, которые продолжают использовать SOM )
- QNX Нейтрино
- МИНИКС[12]
Принятие не-Unix
ELF также получил некоторое распространение в операционных системах, отличных от Unix, таких как:
- OpenVMS, в его Itanium и amd64 версии[13]
- BeOS Версия 4 и выше для x86 на базе компьютеров (где он заменил Переносимый исполняемый файл формат; в PowerPC версия осталась с Предпочтительный исполняемый формат )
- Хайку, повторная реализация BeOS с открытым исходным кодом
- ОС RISC[14]
- Stratus VOS, в версиях PA-RISC и x86
- Юбилейное обновление Windows 10 с использованием Подсистема Windows для Linux.[15][16]
- SkyOS
- Фуксия ОС
- Z / TPF
- ОС HPE NonStop[17]
- Деос
Игровые приставки
Некоторые игровые консоли также используют ELF:
- PlayStation портативный,[18] PlayStation Vita, PlayStation 2, PlayStation 3, PlayStation 4
- GP2X
- Dreamcast
- Gamecube
- Wii
- Wii U
PowerPC
Другие (операционные) системы, работающие на PowerPC которые используют ELF:
- AmigaOS 4, исполняемый файл ELF заменил предыдущий Расширенный формат лома (EHF), который использовался на Amigas, оснащенных платами расширения процессора PPC.
- MorphOS
- AROS
Мобильные телефоны
Некоторые операционные системы для мобильных телефонов и мобильных устройств используют ELF:
- Symbian ОС v9 использует E32Image[19] формат, основанный на формате файла ELF;
- Сони Эрикссон, например, W800i, W610, W300, так далее.
- Сименс, платформы SGOLD и SGOLD2: от Siemens C65 к S75 и BenQ-Siemens E71 /EL71;
- Motorola, например, E398, SLVR L7, v360, v3i (и все телефоны LTE2, к которым применен патч).
- Bada, например, Samsung Wave S8500.
- Nokia телефоны или планшеты с ОС Maemo или Meego, например, Nokia N900.
- Android использует ELF .так (общий объект[20]) библиотеки для Собственный интерфейс Java. С Android Runtime (ART), значение по умолчанию с Android 5.0 «Леденец», все приложения при установке компилируются в собственные двоичные файлы ELF.
Некоторые телефоны могут запускать файлы ELF с помощью пластырь это добавляет код сборки На главную прошивка, которая известна как ELFPack в метро моддинг культура. Формат файла ELF также используется с Atmel AVR (8 бит), AVR32[21]и с Инструменты Техаса MSP430 архитектуры микроконтроллеров. Некоторые реализации Открытая прошивка может также загружать файлы ELF, в первую очередь яблоко реализация используется почти во всех PowerPC машины производимые компанией.
Характеристики
- Универсальный:
- Двоичный интерфейс приложения System V Выпуск 4.1 (18 марта 1997 г.)
- Обновление System V ABI (Октябрь 2009 г.)
- AMD64:
- РУКА:
- IA-32:
- IA-64:
- M32R:
- M32R ELF ABI Дополнение Версия 1.2 (26.08.2004)
- MIPS:
- Motorola 6800:
- PA-RISC:
- Дополнение ELF для PA-RISC Версия 1.43 (6 октября 1997 г.)
- PowerPC:
- Система V ABI, Дополнение к PPC
- Двоичный интерфейс встроенного приложения PowerPC 32-битная реализация (1995-10-01)
- Дополнение к двоичному интерфейсу приложения PowerPC ELF для 64-битных приложений Версия 1.9 (2004 г.)
- SPARC:
- S / 390:
- zСерия:
- Symbian ОС 9:
В Стандартная база Linux (LSB) дополняет некоторые из вышеперечисленных спецификаций для архитектур, в которых он указан.[22] Например, это относится к System V ABI, AMD64 Supplement.[23][24]
86открыто
86открыто был проектом по формированию консенсуса по общему двоичный файл формат для Unix и Unix-подобный операционные системы на общем Совместимость с ПК x86 архитектура, чтобы побудить разработчиков программного обеспечения перейти на архитектуру.[25] Первоначальная идея заключалась в стандартизации небольшого подмножества Spec 1170, предшественника Единая спецификация UNIX и библиотека GNU C (glibc), чтобы немодифицированные двоичные файлы могли работать в Unix-подобных операционных системах x86. Первоначально проект получил обозначение «Спец 150».
В конечном итоге был выбран формат ELF, в частности, реализация ELF в Linux, после того, как она оказалась де-факто стандарт поддерживается всеми вовлеченными производителями и операционными системами.
Группа начала обсуждения по электронной почте в 1997 году и впервые встретилась вместе на Операция Санта-Крус офисы 22 августа 1997 г.
Руководящий комитет был Марк Юинг, Дион Джонсон, Эван Лейбович, Брюс Перенс, Эндрю Роуч, Брайан Уэйн Спаркс и Линус Торвальдс. Остальные участники проекта были Кейт Бостик, Чак Крэнор, Майкл Дэвидсон, Крис Дж. Деметриу, Ульрих Дреппер, Дон Даггер, Стив Гинзбург, Джон "Мэддог" Холл, Рон Холт, Джордан Хаббард, Дэйв Дженсен, Кин Джонстон, Эндрю Джози, Роберт Лайп, Бела Лубкин, Тим Марсленд, Грег Пейдж, Рональд Джо Рекорд, Тим Ракл, Джоэл Сильверстайн, Чиа-пи Тьен и Эрик Троан. Представленные операционные системы и компании были BeOS, BSDI, FreeBSD, Intel, Linux, NetBSD, ШОС и SunSoft.
Проект продолжался, и в середине 1998 года ШОС начала развиваться. lxrun, открытый исходный код уровень совместимости возможность запускать двоичные файлы Linux на OpenServer, UnixWare, и Солярис. SCO объявила об официальной поддержке lxrun на LinuxWorld в марте 1999 г. Sun Microsystems начал официально поддерживать lxrun для Solaris в начале 1999 г.,[26] а позже перешел на интегрированную поддержку двоичного формата Linux через Контейнеры Solaris для приложений Linux.
Поскольку BSD уже давно поддерживают двоичные файлы Linux (через уровень совместимости ) и основные поставщики x86 Unix, добавив поддержку этого формата, проект решил, что Linux ELF является форматом, выбранным отраслью, и 25 июля 1999 года «объявил сам [d] распущенным».[27]
FatELF: универсальные двоичные файлы для Linux
FatELF - это расширение двоичного формата ELF, которое добавляет толстый двоичный файл возможности.[28] Он предназначен для Linux и другие Unix-подобный операционные системы. Дополнительно к абстракции архитектуры ЦП (порядок байтов, размер слова, ЦПУ Набор инструкций и т. д.), существует потенциальное преимущество абстракции программной платформы, например двоичные файлы, которые поддерживают несколько ядер. ABI версии. По состоянию на 25 апреля 2020 г.[Обновить], FatELF не был интегрирован в основное ядро Linux.[29][30][31]
Смотрите также
- Бинарный интерфейс приложения
- Сравнение форматов исполняемых файлов
- DWARF - формат отладочных данных
- Стандарт двоичной совместимости Intel
- Переносимый исполняемый файл - формат, используемый Windows
- vDSO - виртуальный DSO
- Независимый от позиции код
Рекомендации
- ^ а б Стандарт интерфейса инструмента (TIS) Спецификация исполняемого файла и формата связывания (ELF) Версия 1.2 (Май 1995 г.)
- ^ Двоичный интерфейс приложения System V Выпуск 4.1 (18 марта 1997 г.)
- ^ «Доступные лексеры - пигменты». pygments.org.
- ^ "Заголовок ELF". Sco.com. Июль 2000 г.. Получено 2014-02-07.
- ^ "LXR linux / include / linux / elf.h". linux.no. Получено 27 апреля 2015.
- ^ "анонс glibc 2.12".
- ^ "sourceware.org Git - glibc.git / blob - libc-abis".
- ^ "sourceware.org Git - glibc.git / blob - sysdeps / gnu / ldsodefs.h".
- ^ «Заголовок программы». Sco.com. Июль 2000 г.. Получено 2017-04-05.
- ^ "эльфутилс". sourceware.org. Получено 30 апреля 2017.
- ^ «Двоичные форматы».
- ^ «MinixReleases - Minix Wiki». Wiki.minix3.org. Архивировано из оригинал на 2013-03-30. Получено 2014-01-19.
- ^ https://vmssoftware.com/pdfs/State_of_Port_20160906.pdf
- ^ «GCCSDK - RISC OS». Riscos.info. 2012-04-22. Получено 2014-01-19.
- ^ «Анонс Windows 10 Insider Preview Build 14316». Блог Windows Experience. 2016-04-06. Получено 2016-04-10.
- ^ Фоли, Мэри Джо. «Под капотом подсистемы Microsoft Windows для Linux | ZDNet». ZDNet. Получено 2016-08-19.
- ^ "Руководство программиста Guardian" (PDF). Hewlett Packard Enterprise. Архивировано из оригинал (PDF) на 2018-05-30. Получено 2018-05-30. п. 44 архивировано из оригинал на 2018-5-30
- ^ PlayStation Portable использует зашифрованный и перемещенный файл ELF: PSP
- ^ Формат исполняемого файла ОС Symbian
- ^ Розен, Кеннет; Ведущий, Дуглас; Клее, Рэйчел; Розински, Ричард (2007). UNIX: полный справочник (2-е изд.). McGraw Hill Professional. п. 707. ISBN 9780071706988. Получено 2017-06-08.
Динамически подключаемые библиотеки также называются общими объектами (.so).
- ^ «Глава 4: Объектные файлы», Двоичный интерфейс приложения System V, 2009-10-26, e_machine
- ^ "Технические характеристики, связанные с LSB". linuxfoundation.org. Получено 27 апреля 2015.
- ^ «Исполняемый и связывающий формат (ELF)». linuxfoundation.org. Получено 27 апреля 2015.
- ^ "Вступление". linuxfoundation.org. Получено 27 апреля 2015.
- ^ Лейбович, Эван (1997-12-23). «86Открытые часто задаваемые вопросы». Архивировано из оригинал на 2007-03-11. Получено 2007-06-06.
- ^ Рекорд, Рональд (1998-05-21). «Бюллетень о статусе 86open в ШОС». Архивировано из оригинал на 2008-12-08. Получено 2008-05-06.
- ^ Лейбович, Эван (1999-07-25). «Проект The86open - Финальное обновление». Архивировано из оригинал на 2007-02-27. Получено 2007-05-06.
- ^ Гордон, Райан. "Fatelf-спецификация v1". icculus.org. Получено 2010-07-25.
- ^ Гордон, Райан. «FatELF: Оказывается, мне больше нравилась неопределенность». icculus.org. Получено 2010-07-13.
- ^ Холверда, Том (3 ноября 2009 г.). «Райан Гордон останавливает проект FatELF». osnews.com. Получено 2010-07-05.
- ^ Брокмайер, Джо (23 июня 2010 г.). «СЕБЯ: анатомия (предполагаемой) неудачи». Еженедельные новости Linux. Получено 2011-02-06.
дальнейшее чтение
- Левин, Джон Р. (2000) [октябрь 1999]. Линкеры и загрузчики. Серия Морган Кауфманн в программной инженерии и программировании (1-е изд.). Сан-Франциско, США: Морган Кауфманн. ISBN 1-55860-496-0. OCLC 42413382. В архиве из оригинала от 05.12.2012. Получено 2020-01-12. Код: [1][2] Опечатки: [3]
- Дреппер, Ульрих (2006-08-20). «Как писать общие библиотеки» (PDF). 4.0. Получено 2007-06-20. Цитировать журнал требует
| журнал =
(помощь) - Незаметный герой: трудолюбивый эльф автор: Peter Seebach, 20 декабря 2005 г., архивировано 24 февраля 2007 г.
- LibElf и GElf - библиотека для управления файлами ELf на Wayback Machine (Архивировано 25 февраля 2004 г.)
- Формат объектного файла ELF путем анализа Эрик Янгдейл (1995-05-01)
- Учебник Whirlwind по созданию действительно маленьких исполняемых файлов ELF для Linux Брайан Рэйтер
- Перенос ELF в неперемещаемые объекты Жюльен Ванег (13.08.2003)
- Встроенная отладка ELF без ptrace от команды ELFsh (2005-08-01)
- Изучение загрузки и релоков в формате ELF Пэт Бейрн (1999-08-03)
внешняя ссылка
- Справочник FreeBSD: Двоичные форматы (заархивированная версия)
- FreeBSD эльфийка (5) страница руководства
- NetBSD ELF FAQ
- Linux эльфийка (5) страница руководства
- Руководство по компоновщику и библиотекам Oracle Solaris
- Проект ERESI: реверс-инжиниринг операционных систем на базе ELF
- Linux Today статья о 86open 26 июля 1999 г.
- Объявление 86open в списке рассылки Debian Announce 10 октября 1997 г., Брюс Перенс
- Декларация Ульриха Дреппера (PDF) в Группа ШОС против IBM, 19 сентября 2006 г.
- 86open и обсуждение ELF на Groklaw, 13 августа 2006 г.