Що таке ELF Magic?


26

Я раніше бачив дискусію про магію ELF, останнім часом коментарі до цього питання обміну стеками безпеки . Я бачив це раніше, і я бачив це у власних журналах завантаження. Але я не впевнений, що це таке.

Сторінка man на elf трохи перевертає мою голову, так як я не знаю мов C або нижчого рівня.

Як хтось, хто використовує Linux як щоденну операційну систему, що таке ELF?



13
Назва краще підходить для rpg stackexchange.
Cthulhu

Відповіді:


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. У багатьох форматах файлів є "чарівні" байти, які виконують одне і те ж завдання - визначення типу файлу.


8
Справжня магія - це лише перші чотири байти. Наступні поля описують витривалість, архітектуру процесора та різні інші речі.
Саймон Ріхтер

@SimonRichter, що зводиться до семантики. Перші 4 байти - це магія для загальної ідентифікації багатьох типів файлів, але запитувач вказав "магію ELF", яка навіть readelfвизнає 16 байт.
Кейсі

2
Якщо ви хочете отримати справді технічну форму, перші 16 байт - це "ідентифікація" ( e_ident), з яких перші 4 байти - магічне число ( EI_MAG0наскрізь EI_MAG3)
Майкл Мрозек

1
@slebetman Моє використання "магії" походить від специфікації ELF: "Перші 4 байти файлу містять" магічне число ", ідентифікуючи файл як файл об'єкта ELF"
Майкл Мрозек

2
"Однозначно" завищує крихітний шматочок. Якщо ви не знаєте, звідки взявся файл, все - лише здогадки. Файл у /bin, звичайно, це майже напевно бінарний файл ELF. Хоча якийсь завантажений вами файл, однак ... нічого не повідомляється.
cHao

11

"Чарівні числа" - це назва, що надається постійним послідовностям байтів (як правило) на початку файлів, яке використовується для позначення цих файлів як певного формату файлів. Вони служать аналогічною метою для розширення файлів.

Для отримання додаткової інформації див. Запис у файлі жаргону .

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

Отже, магічні числа ELF - це байти на початку файлів ельфів, які ідентифікують їх як такі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.