Co to jest ELF Magic?

26

Wcześniej widziałem dyskusję na temat magii ELF, ostatnio komentarze w tym pytaniu dotyczącym wymiany stosu zabezpieczeń . Widziałem o tym wcześniej i widziałem to we własnych dziennikach rozruchowych .. Ale nie jestem pewien, co to jest.

Strona podręcznika na elfie jest trochę ponad moją głową, ponieważ nie używam języków C ani niższych poziomów.

Jako ktoś, kto używa Linuksa jako codziennego systemu operacyjnego, czym jest ELF?

Mitch
źródło
3
Jeśli chodzi o magię, zobacz także klasyfikację plików Linux-a
Gilles „SO- przestań być zły”
13
Tytuł lepiej nadaje się do wymiany stosu rpg.
Cthulhu,

Odpowiedzi:

37

Bezpośrednio ze strony podręcznika, do której się odwołujesz:

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

ELF definiuje binarny format plików wykonywalnych używanych przez Linuksa. Gdy wywołujesz plik wykonywalny, system operacyjny musi wiedzieć, jak poprawnie załadować plik wykonywalny do pamięci, jak rozwiązać dynamiczne zależności bibliotek, a następnie gdzie wskoczyć do załadowanego pliku wykonywalnego, aby go uruchomić. Format ELF zapewnia te informacje. Magia ELF służy do identyfikowania plików ELF i jest zaledwie pierwszymi kilkoma bajtami pliku:

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

lub

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

Te 16 bajtów jednoznacznie identyfikuje plik jako plik wykonywalny ELF. Wiele formatów plików ma „magiczne” bajty, które spełniają to samo zadanie - identyfikują typ pliku.

Casey
źródło
8
Rzeczywista magia to tylko cztery pierwsze bajty. Następujące pola opisują endianness, architekturę procesora i różne inne rzeczy.
Simon Richter,
@ SimonRichter sprowadza się do semantyki. Pierwsze 4 bajty są magiczne do ogólnej identyfikacji wielu typów plików, ale pytający określił „magię ELF”, która nawet readelfpotwierdza 16 bajtów.
casey
2
Jeśli chcesz uzyskać naprawdę techniczne, pierwsze 16 bajtów to „identyfikacja” ( e_ident), z czego pierwsze 4 bajty to magiczna liczba ( EI_MAG0przez EI_MAG3)
Michael Mrozek
1
@slebetman Moje użycie „magii” pochodzi ze specyfikacji ELF: „Pierwsze 4 bajty pliku zawierają„ magiczną liczbę ”, identyfikującą plik jako plik obiektowy ELF”
Michael Mrozek
2
„Jednoznacznie” nieco przesadza. O ile nie wiesz, skąd pochodzi plik, wszystko jest tylko zgadywaniem. Plik /bin, na pewno, prawie na pewno jest to plik binarny ELF. Niektóre losowe pliki, które pobrałeś, ale ... nie ma mowy.
cHao
11

„Liczby magiczne” to nazwa nadawana ciągłym sekwencjom bajtów (zwykle) na początku plików, służąca do oznaczania tych plików jako określonego formatu. Służą one podobnie do rozszerzeń plików.

Zobacz wpis pliku żargonu, aby uzyskać więcej informacji.

Na przykład obrazy PNG zawsze zaczynają się od tych samych ośmiu bajtów: 137 80 78 71 13 10 26 10

Stąd magiczne liczby ELF są bajtami na początku plików elfów, które identyfikują je jako takie.

legolasy
źródło