Что такое ELF Magic?

26

Раньше я видел дискуссию о магии ELF, совсем недавно комментарии в этом вопросе об обмене стека безопасности . Я видел это упомянутое ранее, и я видел это в моих собственных журналах загрузки .. Но я не уверен, что это такое.

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

Как человек, который использует Linux в качестве повседневной операционной системы, что такое ELF?

Митч
источник
3
Что касается магии, см. Также Linux file file классифицирующую файлы
Жиль "ТАК - перестань быть злым"
13
Название лучше подходит для rpg stackexchange.
Ктулху

Ответы:

37

Прямо со справочной страницы, на которую вы ссылаетесь:

elf - format of Executable and Linking Format (ELF) files

ELF определяет двоичный формат исполняемых файлов, используемых Linux. Когда вы вызываете исполняемый файл, ОС должна знать, как правильно загрузить исполняемый файл в память, как разрешить динамические зависимости библиотеки, а затем куда перейти в загруженный исполняемый файл, чтобы начать его выполнение. Формат ELF предоставляет эту информацию. Волшебство ELF используется для идентификации файлов ELF и представляет собой лишь первые несколько байтов файла:

% od -c -N 16 /bin/ls
0000000 177   E   L   F 002 001 001  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000020

или

% readelf -h /bin/ls | grep Magic
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 

Эти 16 байтов однозначно определяют файл как исполняемый файл ELF. Многие форматы файлов имеют «волшебные» байты, которые выполняют одну и ту же задачу - определение типа файла.

Casey
источник
8
Фактическая магия - это только первые четыре байта. Следующие поля описывают порядок байтов, архитектуру процессора и многое другое.
Саймон Рихтер
@SimonRichter, который сводится к семантике. Первые 4 байта являются магическими для общей идентификации многих типов файлов, но запрашивающий действительно указал «магию ELF», которая даже readelfподтверждает, что это 16 байтов.
Кейси
2
Если вы хотите получить действительно техническую информацию, первые 16 байтов - это «идентификация» ( e_ident), из которых первые 4 байта являются магическим числом ( EI_MAG0сквозным EI_MAG3)
Майкл Мрозек
1
@slebetman Мое использование слова «magic» происходит от спецификации ELF: «Первые 4 байта файла содержат« магическое число », идентифицирующее файл как объектный файл ELF»
Майкл Мрозек
2
«Однозначно» преувеличивает чуть-чуть. Если вы не знаете, откуда взялся файл, все это только предположение. Файл /bin, конечно же, почти наверняка является двоичным файлом ELF. Какой-то случайный файл, который вы скачали, хотя ... ничего не сказано
Цао
11

«Магические числа» - это имя, присваиваемое константным последовательностям байтов (обычно) в начале файлов, используемое для обозначения этих файлов как файлов определенного формата. Они служат аналогичной цели расширений файлов.

См. Запись файла жаргона для получения дополнительной информации.

Например, изображения PNG всегда начинаются с одних и тех же восьми байтов: 137 80 78 71 13 10 26 10

Следовательно, магические числа ELF - это байты в начале файлов elf, которые идентифицируют их как таковые.

legolasss
источник