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

Стандартный формат файла для исполняемых файлов, объектного кода, общих библиотек и дампов ядра.
Исполняемый и связываемый формат
Расширение имени файла
none, .axf , .bin , .elf , .o , .out , .prx , .puff , .ko , .mod и .so
Магическое число0x7F 'E' 'L' 'F'
РазработаноЛаборатории систем Unix [1] : 3 
Тип форматаДвоичный , исполняемый , объект , разделяемая библиотека , дамп ядра
Контейнер дляМножество исполняемых двоичных форматов
Файл 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-битных двоичных файлов соответственно.

Заголовок ELF [4]
КомпенсироватьРазмер (байты)ПолеЦель
32-битный64-битный32-битный64-битный
0x004e_ident[EI_MAG0] через e_ident[EI_MAG3]0x7Fза которыми следует ELF( 45 4c 46) в ASCII ; эти четыре байта составляют магическое число .
0x041e_ident[EI_CLASS]Этот байт устанавливается в значение 1или 2для обозначения 32- или 64-битного формата соответственно.
0x051e_ident[EI_DATA]Этот байт устанавливается либо в значение, 1либо 2в значение, указывающее на прямой или обратный порядок байтов , соответственно. Это влияет на интерпретацию многобайтовых полей, начинающихся со смещения 0x10.
0x061e_ident[EI_VERSION]Установите 1для исходной и текущей версии ELF.
0x071e_ident[EI_OSABI]Определяет ABI целевой операционной системы .
ЦенитьАБИ
0x00Система V
0x01HP-UX
0x02NetBSD
0x03Линукс
0x04GNU Херд
0x06Солярис
0x07AIX (Монтерей)
0x08ИРИКС
0x09FreeBSD
0x0AТру64
0x0BNovell Модесто
0x0COpenBSD
0x0DOpenVMS
0x0ENonStop ядро
0x0FАРОС
0x10FenixOS
0x11Nuxi CloudABI
0x12Stratus Technologies OpenVOS
0x081e_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]

0x097e_ident[EI_PAD]Зарезервированные байты заполнения. В настоящее время не используются. Следует заполнить нулями и игнорировать при чтении.
0x102e_typeОпределяет тип объектного файла.
ЦенитьТипЗначение
0x00ET_NONEНеизвестный.
0x01ET_RELПеремещаемый файл.
0x02ET_EXECИсполняемый файл.
0x03ET_DYNОбщий объект.
0x04ET_COREОсновной файл.
0xFE00ET_LOOSЗарезервированный включающий диапазон. Зависит от операционной системы.
0xFEFFET_HIOS
0xFF00ET_LOPROCЗарезервированный инклюзивный диапазон. Зависит от процессора.
0xFFFFET_HIPROC
0x122электронная_машинаУказывает архитектуру набора целевых инструкций . Вот некоторые примеры:
ЦенитьИСА
0x00Нет определенного набора инструкций
0x01AT&T WE 32100
0x02СПАРК
0x03x86
0x04Моторола 68000 (M68k)
0x05Моторола 88000 (M88k)
0x06Микроконтроллер Intel
0x07Интел 80860
0x08MIPS
0x09IBM-система/370
0x0AMIPS RS3000 с прямым порядком байтов
0x0B - 0x0EЗарезервировано для будущего использования
0x0FHewlett-Packard PA-RISC
0x13Интел 80960
0x14PowerPC
0x15PowerPC (64-бит)
0x16S390 , включая S390x
0x17IBM SPU/SPC
0x18 - 0x23Зарезервировано для будущего использования
0x24NEC V800
0x25Fujitsu FR20
0x26TRW РХ-32
0x27Motorola RCE
0x28Arm (до Armv7/AArch32)
0x29Цифровая Альфа
0x2AСуперХ
0x2БSPARC-версия 9
0x2СВстроенный процессор Siemens TriCore
0x2DЯдро Argonaut RISC
0x2EХитачи H8/300
0x2FХитачи H8/300H
0x30Хитачи H8S
0x31Хитачи H8/500
0x32ИА-64
0x33Стэнфордский MIPS-X
0x34Motorola Холодный огонь
0x35Моторола M68HC12
0x36Мультимедийный ускоритель Fujitsu MMA
0x37Siemens PCP
0x38Sony nCPU встроенный RISC-процессор
0x39Микропроцессор Denso NDR1
0x3AПроцессор Motorola Star*Core
0x3БПроцессор Toyota ME16
0x3CПроцессор STMicroelectronics ST100
0x3DAdvanced Logic Corp. Семейство встраиваемых процессоров TinyJ
0x3EAMD x86-64
0x3FПроцессор DSP Sony
0x40Корпорация цифрового оборудования PDP-10
0x41Корпорация цифрового оборудования PDP-11
0x42Микроконтроллер Siemens FX66
0x43Микроконтроллер STMicroelectronics ST9+ 8/16 бит
0x44STMicroelectronics ST7 8-битный микроконтроллер
0x45Микроконтроллер Motorola MC68HC16
0x46Микроконтроллер Motorola MC68HC11
0x47Микроконтроллер Motorola MC68HC08
0x48Микроконтроллер Motorola MC68HC05
0x49Silicon Graphics SVx
0x4ASTMicroelectronics ST19 8-битный микроконтроллер
0x4БЦифровой VAX
0x4C32-битный встроенный процессор Axis Communications
0x4D32-битный встраиваемый процессор Infineon Technologies
0x4E64-битный процессор DSP Element 14
0x4F16-битный DSP-процессор LSI Logic
0x8ССемейство TMS320C6000
0xАФМЦСТ Эльбрус е2к
0xB7Arm 64-бит (Armv8/AArch64)
0xDCЗилог Z80
0xF3RISC-V
0xF7Фильтр пакетов Беркли
0x101МДЦ 65C816
0x102LoongArch
0x144электронная_версияУстановите 1для оригинальной версии ELF.
0x1848e_entryЭто адрес памяти точки входа , с которой процесс начинает выполнение. Это поле имеет длину 32 или 64 бита в зависимости от формата, определенного ранее (байт 0x04). Если файл не имеет связанной точки входа, то это поле содержит ноль.
0x1С0x2048e_phoffУказывает на начало таблицы заголовков программы. Обычно он следует за заголовком файла, следующим сразу за этим, создавая смещение 0x34или 0x40для 32- и 64-битных исполняемых файлов ELF соответственно.
0x200x2848e_shoffУказывает на начало таблицы заголовков раздела.
0x240x304e_flagsИнтерпретация этого поля зависит от целевой архитектуры.
0x280x342e_ehsizeСодержит размер этого заголовка, обычно 64 байта для 64-битного и 52 байта для 32-битного формата.
0x2A0x362e_phentsizeСодержит размер записи таблицы заголовков программ. Как поясняется ниже, это обычно 0x20 (32 бита) или 0x38 (64 бита).
0x2С0x382e_phnumСодержит количество записей в таблице заголовков программы.
0x2E0x3A2e_shentsizeСодержит размер записи таблицы заголовков разделов. Как поясняется ниже, это обычно 0x28 (32 бита) или 0x40 (64 бита).
0x300x3C2e_shnumСодержит количество записей в таблице заголовков разделов.
0x320x3E2e_shstrndxСодержит индекс записи таблицы заголовков разделов, содержащей названия разделов.
0x340x40Конец заголовка ELF (размер).

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

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

Заголовок программы [9]
КомпенсироватьРазмер (байты)ПолеЦель
32-битный64-битный32-битный64-битный
0x004p_типОпределяет тип сегмента.
ЦенитьИмяЗначение
0x00000000PT_NULLЗапись в таблице заголовков программы не используется.
0x00000001PT_LOADЗагружаемый сегмент.
0x00000002ПТ_ДИНАМИЧЕСКИЙДинамическая связывающая информация.
0x00000003PT_INTERPИнформация для переводчика.
0x00000004PT_NOTEВспомогательная информация.
0x00000005ПТ_ШЛИБСдержанный.
0x00000006ПТ_ПХДРСегмент, содержащий собственно таблицу заголовков программы.
0x00000007PT_TLSШаблон локального хранилища потоков.
0x60000000PT_LOOSЗарезервированный включающий диапазон. Зависит от операционной системы.
0x6FFFFFFFPT_HIOS
0x70000000PT_LOPROCЗарезервированный инклюзивный диапазон. Зависит от процессора.
0x7FFFFFFFPT_HIPROC
0x044p_flagsФлаги, зависящие от сегмента (позиция для 64-битной структуры).
ЦенитьИмяЗначение
0x1ПФ_ХИсполняемый сегмент.
0x2ПФ_ВЗаписываемый сегмент.
0x4ПФ_РЧитаемый сегмент.
0x040x0848p_offsetСмещение сегмента в файле изображения.
0x080x1048p_vaddrВиртуальный адрес сегмента в памяти.
0x0C0x1848p_paddrВ системах, где физический адрес имеет значение, зарезервировано для физического адреса сегмента.
0x100x2048p_fileszРазмер сегмента в файле изображения в байтах. Может быть 0.
0x140x2848p_memszРазмер сегмента в памяти в байтах. Может быть 0.
0x184p_flagsФлаги, зависящие от сегмента (позиция для 32-битной структуры). См. вышеприведенное p_flagsполе для определений флагов.
0x1С0x3048p_align0и 1не указывать выравнивание. В противном случае должно быть положительной целой степенью числа 2, с p_vaddr, равным p_offset модулю p_align .
0x200x38Конец заголовка программы (размер).

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

КомпенсироватьРазмер (байты)ПолеЦель
32-битный64-битный32-битный64-битный
0x004sh_nameСмещение строки в разделе .shstrtab , представляющее имя этого раздела.
0x044sh_typeОпределяет тип этого заголовка.
ЦенитьИмяЗначение
0x0SHT_NULLЗапись таблицы заголовков раздела не используется
0x1SHT_PROGBITSДанные программы
0x2SHT_SYMTABТаблица символов
0x3SHT_STRTABТаблица струн
0x4SHT_RELAЗаписи о перемещении с дополнениями
0x5SHT_HASHТаблица хэшей символов
0x6SHT_ДИНАМИЧЕСКИЙДинамическая информация о ссылках
0x7SHT_NOTEПримечания
0x8SHT_NOBITSПрограммное пространство без данных (bss)
0x9SHT_RELЗаписи о перемещении, без дополнений
0x0ASHT_SHLIBСдержанный
0x0BSHT_DYNSYMТаблица символов динамического компоновщика
0x0ESHT_INIT_ARRAYМассив конструкторов
0x0FSHT_FINI_ARRAYМассив деструкторов
0x10SHT_PREINIT_ARRAYМассив предварительных конструкторов
0x11SHT_GROUPГруппа раздела
0x12SHT_SYMTAB_SHNDXРасширенные индексы раздела
0x13SHT_NUMКоличество определенных типов.
0x60000000SHT_LOOSЗапуск для конкретной ОС.
.........
0x0848sh_flagsОпределяет атрибуты раздела.
ЦенитьИмяЗначение
0x1SHF_WRITEЗаписываемый
0x2SHF_ALLOCЗанимает память во время выполнения
0x4SHF_EXECINSTRИсполняемый
0x10SHF_MERGEВозможно объединение
0x20SHF_STRINGSСодержит строки с нулевым завершением
0x40SHF_INFO_LINK'sh_info' содержит индекс SHT
0x80SHF_LINK_ORDERСохраняйте порядок после объединения
0x100SHF_OS_НЕСООТВЕТСТВУЮЩИЙТребуется нестандартная обработка, специфичная для ОС
0x200SHF_GROUPРаздел является членом группы
0x400SHF_TLSРаздел содержит локальные данные потока
0x0FF00000SHF_MASKOSОС-специфический
0xF0000000SHF_MASKPROCПроцессор-специфический
0x4000000SHF_ORDEREDСпециальные требования к заказу (Solaris)
0x8000000SHF_EXCLUDEРаздел исключается, если на него нет ссылки или он не выделен (Solaris)
0x0C0x1048sh_addrВиртуальный адрес раздела в памяти, для загруженных разделов.
0x100x1848sh_offsetСмещение раздела в файле изображения.
0x140x2048sh_sizeРазмер раздела в байтах. Может быть 0.
0x180x284sh_linkСодержит индекс раздела связанного раздела. Это поле используется для нескольких целей, в зависимости от типа раздела.
0x1С0x2С4sh_infoСодержит дополнительную информацию о разделе. Это поле используется для нескольких целей, в зависимости от типа раздела.
0x200x3048sh_addralignСодержит требуемое выравнивание раздела. Это поле должно быть степенью двойки.
0x240x3848sh_entsizeСодержит размер в байтах каждой записи для разделов, содержащих записи фиксированного размера. В противном случае это поле содержит ноль.
0x280x40Конец заголовка раздела (размер).

Инструменты

  • readelf— это двоичная утилита Unix, которая отображает информацию об одном или нескольких файлах ELF. Свободная программная реализация предоставляется GNU Binutils .
  • elfutilsпредоставляет альтернативные инструменты GNU Binutils исключительно для Linux. [10]
  • elfdump— команда для просмотра ELF-информации в ELF-файле, доступная в Solaris и FreeBSD .
  • objdumpпредоставляет широкий спектр информации о файлах ELF и других форматах объектов. objdumpиспользует библиотеку Binary File Descriptor в качестве внутреннего инструмента для структурирования данных ELF.
  • Утилита Unix fileможет отображать некоторую информацию о файлах ELF, включая архитектуру набора инструкций , для которой предназначен код в перемещаемом, исполняемом или общем объектном файле или на основе которого был создан дамп ядра ELF.

Приложения

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

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

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

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

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

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

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

PowerPC

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

  • В AmigaOS 4 исполняемый файл ELF заменил предыдущий формат Extended Hunk Format (EHF), который использовался на компьютерах Amiga, оснащенных платами расширения процессора PPC.
  • MorphOS
  • АРОС
  • 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, на которые применен патч).
  • Bada , например, Samsung Wave S8500 .
  • Телефоны и планшеты Nokia под управлением ОС Maemo или Meego, например, Nokia N900 .
  • Android использует библиотеки ELF .so (shared object [19] ) для Java Native Interface . [ требуется ссылка ] С Android Runtime (ART), используемым по умолчанию с Android 5.0 «Lollipop» , все приложения компилируются в собственные двоичные файлы ELF при установке. [20] Также можно использовать собственное программное обеспечение Linux из менеджеров пакетов, таких как Termux, или компилировать их из исходников через Clang или GCC, которые доступны в репозиториях.

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

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

  • Общий:
    • System V Application Binary Interface Edition 4.1 (1997-03-18)
    • Обновление System V ABI (октябрь 2009 г.)
  • AMD64 :
    • System V ABI, дополнение AMD64
  • Рука :
    • ELF для архитектуры ARM
  • ИА-32 :
    • System V ABI, дополнение к архитектуре процессора Intel386
  • ИА-64 :
    • Руководство по соглашениям и среде выполнения программного обеспечения Itanium (сентябрь 2000 г.)
  • М32Р :
    • Дополнение M32R ELF ABI версии 1.2 (2004-08-26)
  • MIPS-индекс :
    • System V ABI, дополнение к процессору MIPS RISC
    • Документация MIPS EABI Архивировано 01.04.2012 на Wayback Machine (11.06.2003)
  • Моторола 6800 :
    • Motorola 8- и 16-битный встроенный ABI
  • PA-RISC :
    • Дополнение ELF для PA-RISC версии 1.43 (6 октября 1997 г.)
  • PowerPC :
    • Система V ABI, дополнение PPC
    • Реализация 32-битного двоичного интерфейса встроенных приложений PowerPC (1995-10-01)
    • Дополнение к двоичному интерфейсу 64-битного приложения PowerPC ELF, версия 1.9 (2004)
  • RISC-V :
    • Спецификация RISC-V ELF
  • СПАРК :
    • Система V ABI, дополнение SPARC
  • С/390 :
    • Дополнение S/390 32bit ELF ABI
  • zСерия :
    • Дополнение zSeries 64bit ELF ABI
  • ОС Symbian 9:
    • E32Формат файла изображения на Symbian OS 9

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

86открыто

86open был проектом по формированию консенсуса по общему двоичному формату файлов для Unix и Unix-подобных операционных систем на общей PC-совместимой архитектуре x86 , чтобы побудить разработчиков программного обеспечения портировать на эту архитектуру. [25] Первоначальная идея состояла в том, чтобы стандартизировать небольшое подмножество 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 года [26] , а затем перешла к интегрированной поддержке двоичного формата Linux через Solaris Containers for Linux Applications .

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

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

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

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

Ссылки

  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. ^ "LSB Referenced Specifications". linuxfoundation.org . Получено 27 апреля 2015 г. .
  23. ^ "Executable and Linking Format (ELF)". linuxfoundation.org . Получено 27 апреля 2015 г. .
  24. ^ "Введение". linuxfoundation.org . Получено 27 апреля 2015 г. .
  25. ^ Лейбович, Эван (1997-12-23). ​​"86Open Frequently-Asked Questions". Архивировано из оригинала 2007-03-11 . Получено 2007-06-06 .
  26. Record, Ronald (1998-05-21). "Бюллетень о статусе 86open в SCO". Архивировано из оригинала 2008-12-08 . Получено 2008-05-06 .
  27. ^ Лейбович, Эван (1999-07-25). "The86open Project – Final Update". Архивировано из оригинала 2007-02-27 . Получено 2007-05-06 .
  28. ^ Гордон, Райан. "fatelf-specification v1". icculus.org . Получено 25.07.2010 .
  29. ^ Гордон, Райан. "FatELF: Оказывается, мне больше понравилась неопределенность". icculus.org . Получено 13 июля 2010 г.
  30. ^ Холверда, Том (3 ноября 2009 г.). «Райан Гордон останавливает проект FatELF» . osnews.com . Проверено 5 июля 2010 г.
  31. ^ Брокмейер, Джо (23 июня 2010 г.). "SELF: Анатомия (предполагаемой) неудачи". Linux Weekly News . Получено 2011-02-06 .

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

  • Левин, Джон Р. (2000) [октябрь 1999]. Линкеры и загрузчики. Серия Моргана Кауфмана по программной инженерии и программированию (1-е изд.). Сан-Франциско, США: Morgan Kaufmann . ISBN 1-55860-496-0. OCLC  42413382. Архивировано из оригинала 2012-12-05 . Получено 2020-01-12 .Код: [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 в неперемещаемые объекты Жюльена Ванега (2003-08-13)
  • Встроенная отладка ELF без ptrace от команды ELFsh (01.08.2005)
  • Исследование загрузки и перемещения ELF Пэтом Берне (1999-08-03)
  • FreeBSD Handbook: Двоичные форматы (архивная версия)
  • Страница руководства FreeBSD elf(5)
  • Часто задаваемые вопросы по NetBSD ELF
  • Страница руководства Linux elf(5)
  • Руководство по компоновщику и библиотекам Oracle Solaris
  • Проект ERESI: обратная разработка операционных систем на базе ELF. Архивировано 14.03.2021 на Wayback Machine.
  • Статья Linux Today на 86open 26 июля 1999 г.
  • Анонс 86open в списке рассылки Debian Announce 10 октября 1997 г., Брюс Перенс
  • Заявление Ульриха Дреппера (PDF) в деле The SCO Group против IBM , 19 сентября 2006 г.
  • 86open и обсуждение ELF Архивировано 01.02.2019 в Wayback Machine на Groklaw , 13 августа 2006 г.
Получено с "https://en.wikipedia.org/w/index.php?title=Исполняемый_файл_и_ссылаемый_формат&oldid=1251383864"