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?
Odpowiedzi:
Bezpośrednio ze strony podręcznika, do której się odwołujesz:
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:
lub
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.
źródło
readelf
potwierdza 16 bajtów.e_ident
), z czego pierwsze 4 bajty to magiczna liczba (EI_MAG0
przezEI_MAG3
)/bin
, na pewno, prawie na pewno jest to plik binarny ELF. Niektóre losowe pliki, które pobrałeś, ale ... nie ma mowy.„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.
źródło