Format wykonywalny i możliwy do połączenia
Rozszerzenie nazwy pliku |
brak, .axf , .bin , .elf , .o , .out , .prx , .puff , .ko , .mod i .so
|
---|---|
magiczny numer | 0x7F 'E' 'L' 'F' |
Opracowany przez | Laboratoria systemów Unix |
Typ formatu | Binarny , wykonywalny , obiektowy , współdzielona biblioteka , zrzut pamięci |
Pojemnik na | Wiele wykonywalnych formatów binarnych |
W informatyce Executable and Linkable Format ( ELF , wcześniej nazywany Extensible Linking Format ) jest powszechnym standardowym formatem plików wykonywalnych , kodu wynikowego , bibliotek współdzielonych i zrzutów pamięci . Po raz pierwszy opublikowany w specyfikacji interfejsu binarnego aplikacji (ABI) systemu operacyjnego Unix w wersji o nazwie System V Release 4 (SVR4), a później w Tool Interface Standard, szybko został zaakceptowany przez różnych dostawców systemów uniksowych . W 1999 roku został wybrany jako standardowy format plików binarnych dla systemów uniksowych i uniksopodobnych na procesorach x86 przez projekt 86open .
Z założenia format ELF jest elastyczny, rozszerzalny i wieloplatformowy . Na przykład obsługuje różne endiany i rozmiary adresów, więc nie wyklucza żadnej konkretnej jednostki centralnej (CPU) ani architektury zestawu instrukcji . Umożliwiło to przyjęcie go przez wiele różnych systemów operacyjnych na wielu różnych platformach sprzętowych .
Układ plików
Każdy plik ELF składa się z jednego nagłówka ELF, po którym następują dane pliku. Dane mogą obejmować:
- Tablica nagłówków programu, opisująca zero lub więcej segmentów pamięci
- Tabela nagłówków sekcji, opisująca zero lub więcej sekcji
- Dane, do których odnoszą się wpisy w tablicy nagłówków programu lub tablicy nagłówków sekcji
Segmenty zawierają informacje potrzebne do wykonania pliku w czasie wykonywania , podczas gdy sekcje zawierają ważne dane do łączenia i relokacji. Dowolny bajt w całym pliku może należeć maksymalnie do jednej sekcji, a mogą wystąpić bajty osierocone, które nie należą do żadnej sekcji.
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF............. |
00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 | ..>......H@..... |
Przykładowy zrzut heksowy nagłówka pliku ELF
Nagłówek pliku
Nagłówek ELF określa, czy używać adresów 32-bitowych , czy 64-bitowych . Nagłówek zawiera trzy pola, na które ma wpływ to ustawienie, oraz inne pola, które za nimi następują. Nagłówek ELF ma długość 52 lub 64 bajty odpowiednio dla 32-bitowych i 64-bitowych plików binarnych.
Zrównoważyć | Rozmiar (bajty) | Pole | Zamiar | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-bitowy | 64-bitowy | 32-bitowy | 64-bitowy | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | e_ident[EI_MAG0] do e_ident[EI_MAG3] |
0x7F , po którym następuje ELF ( 45 4c 46 ) w ASCII ; te cztery bajty stanowią magiczną liczbę . |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 1 | e_identyfikator[EI_CLASS] | Ten bajt jest ustawiony na 1 lub 2 , aby oznaczyć odpowiednio format 32- lub 64-bitowy. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x05 | 1 | e_identyfikator[EI_DATA] | Ten bajt jest ustawiony na 1 lub 2 , aby odpowiednio oznaczać małą lub dużą endianność . Wpływa to na interpretację pól wielobajtowych zaczynających się od offsetu 0x10 . |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x06 | 1 | e_identyfikator[EI_VERSION] | Ustaw na 1 dla oryginalnej i aktualnej wersji ELF. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x07 | 1 | e_identyfikator[EI_OSABI] | Identyfikuje docelowy system operacyjny ABI .
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 1 | e_identyfikator[EI_ABIVERSION] | Dalej określa wersję ABI. Jego interpretacja zależy od docelowego ABI. Jądro Linuksa (po co najmniej 2.6) nie ma jego definicji, więc jest ignorowane w przypadku plików wykonywalnych połączonych statycznie. W takim przypadku przesunięcie i rozmiar EI_PAD wynoszą 8 . glibc 2.12+ w przypadku, gdy e_ident[EI_OSABI] == 3 traktuje to pole jako wersję ABI dynamicznego linkera : definiuje listę funkcji dynamicznego linkera, traktuje e_ident[EI_ABIVERSION] jako poziom funkcji wymagany przez współdzielony obiekt (wykonywalny lub dynamiczny biblioteka) i odmawia załadowania, jeśli wymagana jest nieznana cecha, np. e_ident[EI_ABIVERSION] jest większa niż największa znana cecha. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x09 | 7 | e_identyfikator[EI_PAD] | Zarezerwowane bajty dopełnienia. Obecnie nieużywany. Powinien być wypełniony zerami i ignorowany podczas odczytu. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 2 | e_typ | Identyfikuje typ pliku obiektowego.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x12 | 2 | e_maszyna | Określa docelową architekturę zestawu instrukcji . Niektóre przykłady to:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 4 | e_wersja | Ustaw na 1 dla oryginalnej wersji ELF. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 4 | 8 | e_wpis | Jest to adres pamięci punktu wejścia, od którego rozpoczyna się wykonywanie procesu. To pole ma długość 32 lub 64 bitów, w zależności od wcześniej zdefiniowanego formatu (bajt 0x04). Jeśli plik nie ma powiązanego punktu wejścia, oznacza to zero. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x20 | 4 | 8 | e_phoff | Wskazuje początek tabeli nagłówków programu. Zwykle następuje po nagłówku pliku bezpośrednio po tym, tworząc przesunięcie 0x34 lub 0x40 odpowiednio dla 32- i 64-bitowych plików wykonywalnych ELF. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x28 | 4 | 8 | e_shoff | Wskazuje początek tabeli nagłówków sekcji. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x30 | 4 | e_flagi | Interpretacja tego pola zależy od architektury docelowej. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x34 | 2 | e_ehrozmiar | Zawiera rozmiar tego nagłówka, zwykle 64 bajty dla formatu 64-bitowego i 52 bajty dla formatu 32-bitowego. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2A | 0x36 | 2 | e_fentsize | Zawiera rozmiar pozycji tabeli nagłówka programu. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2C | 0x38 | 2 | e_phnum | Zawiera liczbę wpisów w tablicy nagłówka programu. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x2E | 0x3A | 2 | e_szentrozmiar | Zawiera rozmiar pozycji tabeli nagłówków sekcji. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x30 | 0x3C | 2 | e_sznum | Zawiera liczbę wpisów w tabeli nagłówków sekcji. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x32 | 0x3E | 2 | e_shstrndx | Zawiera indeks wpisu tabeli nagłówków sekcji, który zawiera nazwy sekcji. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x34 | 0x40 | Koniec nagłówka ELF (rozmiar). |
Nagłówek programu
Tablica nagłówka programu informuje system, jak utworzyć obraz procesu. Znajduje się w pliku offset e_phoff i składa się z wpisów e_phnum , z których każdy ma rozmiar e_phentsize . Układ jest nieco inny w 32-bitowym ELF i 64-bitowym ELF, ponieważ p_flags znajdują się w innej lokalizacji struktury ze względu na wyrównanie. Każdy wpis ma strukturę:
Zrównoważyć | Rozmiar (bajty) | Pole | Zamiar | |||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-bitowy | 64-bitowy | 32-bitowy | 64-bitowy | |||||||||||||||||||||||||||||||||||||||
0x00 | 4 | p_typ | Identyfikuje typ segmentu.
|
|||||||||||||||||||||||||||||||||||||||
0x04 | 4 | p_flagi | Flagi zależne od segmentu (pozycja dla struktury 64-bitowej). | |||||||||||||||||||||||||||||||||||||||
0x04 | 0x08 | 4 | 8 | p_przesunięcie | Przesunięcie segmentu w obrazie pliku. | |||||||||||||||||||||||||||||||||||||
0x08 | 0x10 | 4 | 8 | p_vaddr | Adres wirtualny segmentu w pamięci. | |||||||||||||||||||||||||||||||||||||
0x0C | 0x18 | 4 | 8 | p_paddr | W systemach, w których istotny jest adres fizyczny, zarezerwowane dla adresu fizycznego segmentu. | |||||||||||||||||||||||||||||||||||||
0x10 | 0x20 | 4 | 8 | p_filesz | Rozmiar w bajtach segmentu w obrazie pliku. Może być 0. | |||||||||||||||||||||||||||||||||||||
0x14 | 0x28 | 4 | 8 | p_memsz | Rozmiar w bajtach segmentu w pamięci. Może być 0. | |||||||||||||||||||||||||||||||||||||
0x18 | 4 | p_flagi | Flagi zależne od segmentu (pozycja dla struktury 32-bitowej). | |||||||||||||||||||||||||||||||||||||||
0x1C | 0x30 | 4 | 8 | p_wyrównaj |
0
i 1 nie określaj wyrównania. W przeciwnym razie powinna być dodatnią, całkowitą potęgą 2, przy czym p_vaddr równa się p_offset modulus p_align . |
|||||||||||||||||||||||||||||||||||||
0x20 | 0x38 | Koniec nagłówka programu (rozmiar). |
Nagłówek sekcji
Zrównoważyć | Rozmiar (bajty) | Pole | Zamiar | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
32-bitowy | 64-bitowy | 32-bitowy | 64-bitowy | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x00 | 4 | sh_name | Przesunięcie do ciągu w sekcji .shstrtab , który reprezentuje nazwę tej sekcji. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x04 | 4 | sh_type | Identyfikuje typ tego nagłówka.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x08 | 4 | 8 | sh_flags | Identyfikuje atrybuty sekcji.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x0C | 0x10 | 4 | 8 | sh_addr | Wirtualny adres sekcji w pamięci dla załadowanych sekcji. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x10 | 0x18 | 4 | 8 | sh_offset | Przesunięcie sekcji w obrazie pliku. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x14 | 0x20 | 4 | 8 | sh_rozmiar | Rozmiar w bajtach sekcji obrazu pliku. Może być 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x18 | 0x28 | 4 | sh_link | Zawiera indeks sekcji powiązanej sekcji. To pole jest używane do kilku celów, w zależności od typu sekcji. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x1C | 0x2C | 4 | sh_info | Zawiera dodatkowe informacje o sekcji. To pole jest używane do kilku celów, w zależności od typu sekcji. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x20 | 0x30 | 4 | 8 | sh_addralign | Zawiera wymagane wyrównanie przekroju. To pole musi być potęgą dwójki. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x24 | 0x38 | 4 | 8 | sh_entsize | Zawiera rozmiar (w bajtach) każdego wpisu dla sekcji zawierających wpisy o stałym rozmiarze. W przeciwnym razie to pole zawiera zero. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0x28 | 0x40 | Koniec nagłówka sekcji (rozmiar). |
Narzędzia
-
readelf
to binarne narzędzie systemu Unix, które wyświetla informacje o jednym lub większej liczbie plików ELF. Implementacja wolnego oprogramowania jest dostarczana przez GNU Binutils . -
elfutils
zapewnia alternatywne narzędzia do GNU Binutils wyłącznie dla Linuksa. -
elfdump
to polecenie do przeglądania informacji ELF w pliku ELF, dostępne w systemach Solaris i FreeBSD . -
objdump
zapewnia szeroki zakres informacji o plikach ELF i innych formatach obiektowych.objdump
używa biblioteki Binary File Descriptor jako zaplecza do strukturyzowania danych ELF. -
plikowe
systemu Unix może wyświetlać pewne informacje o plikach ELF, w tym architekturę zestawu instrukcji , dla której przeznaczony jest kod w pliku relokowalnym, wykonywalnym lub współużytkowanym, lub na podstawie którego utworzono zrzut pamięci ELF.
Aplikacje
Systemy typu Unix
Format ELF zastąpił starsze formaty plików wykonywalnych w różnych środowiskach. Zastąpił formaty a.out i COFF w systemach operacyjnych typu Unix :
- Linuks
- Solaris / Illumos
- IRIX
- FreeBSD
- NetBSD
- OpenBSD
- redoks
- DragonFly BSD
- Sylaba
- HP-UX (z wyjątkiem 32-bitowych programów PA-RISC, które nadal używają SOM )
- QNX Neutrino
- MINIX
Adopcja inna niż Unix
ELF został również przyjęty w systemach operacyjnych innych niż Unix, takich jak:
- OpenVMS w wersjach Itanium i amd64
- BeOS Revision 4 i nowsze dla komputerów z procesorami x86 (gdzie zastąpił format Portable Executable ; wersja PowerPC pozostała z Preferred Executable Format )
- Haiku , otwarta reimplementacja BeOS-a
- System operacyjny RISC
- Stratus VOS , w wersjach PA-RISC i x86
- SkyOS
- Fuksja OS
- Z/TPF
- System operacyjny HPE NonStop
- Deo
Microsoft Windows również używa formatu ELF, ale tylko dla swojego podsystemu Windows dla systemu zgodności z systemem Linux.
Konsole gier
Niektóre konsole do gier również używają ELF:
- PlayStation Portable , PlayStation Vita , PlayStation (konsola) , PlayStation 2 , PlayStation 3 , PlayStation 4 , PlayStation 5
- GP2X
- Wymarzony skład
- GameCube
- Nintendo 64
- Wii
- Wii U
PowerPC
Inne (operacyjne) systemy działające na PowerPC , które używają ELF:
- AmigaOS 4 , plik wykonywalny ELF zastąpił poprzedni format Extended Hunk Format (EHF), który był używany na Amigach wyposażonych w karty rozszerzeń procesora PPC.
- MorphOS
- AROS
- Café OS (system operacyjny działał na Wii U)
Telefony komórkowe
Niektóre systemy operacyjne dla telefonów komórkowych i urządzeń mobilnych używają ELF:
- Symbian OS v9 używa formatu E32Image, który jest oparty na formacie pliku ELF;
- Sony Ericsson , na przykład W800i , W610 , W300 itp.
- Siemens , platformy SGOLD i SGOLD2: od Siemens C65 do S75 i BenQ-Siemens E71/ EL71 ;
- Motorola , na przykład E398, SLVR L7 , v360, v3i (i wszystkie telefony LTE2, które mają nałożoną łatkę).
- Bada , na przykład Samsung Wave S8500 .
- Nokia z systemem operacyjnym Maemo lub Meego, na przykład Nokia N900 .
- Android używa bibliotek ELF .so (obiekt współdzielony) dla Java Native Interface . [ potrzebne źródło ] Dzięki Android Runtime (ART), domyślnemu systemowi od Androida 5.0 „Lollipop” , wszystkie aplikacje są kompilowane do natywnych plików binarnych ELF podczas instalacji.
Niektóre telefony mogą uruchamiać pliki ELF za pomocą łatki , która dodaje kod asemblera do głównego oprogramowania układowego , co jest funkcją znaną jako ELFPack w podziemnej kulturze modowania . Format pliku ELF jest również używany z architekturami mikrokontrolerów Atmel AVR (8-bit), AVR32 i Texas Instruments MSP430 . Niektóre implementacje Open Firmware mogą również ładować pliki ELF, w szczególności implementacja Apple używana w prawie wszystkich maszynach PowerPC wyprodukowanych przez firmę.
Specyfikacje
- Ogólny:
- Interfejs binarny aplikacji Systemu V, wydanie 4.1 (18.03.1997)
- Aktualizacja ABI Systemu V (październik 2009)
- AMD64 :
- Ramię :
- IA-32 :
- IA-64 :
-
M32R :
- M32R ELF ABI Dodatek Wersja 1.2 (2004-08-26)
- MIPS :
- Motorola 6800 :
-
PA-RISC :
- Dodatek ELF do wersji PA-RISC 1.43 (6 października 1997)
-
PowerPC :
- System V ABI, dodatek PPC
- Interfejs binarny aplikacji PowerPC Embedded 32-bitowa implementacja (1995-10-01)
- 64-bitowy dodatek do interfejsu binarnego aplikacji PowerPC ELF, wersja 1.9 (2004)
- RISC-V :
- SPARC :
- S/390 :
- zSeries :
- Symbian OS 9:
Linux Standard Base (LSB) uzupełnia niektóre z powyższych specyfikacji dla architektur, w których jest określony. Tak jest na przykład w przypadku Systemu V ABI, suplementu AMD64.
86otwarte
86open był projektem mającym na celu osiągnięcie konsensusu w sprawie wspólnego formatu plików binarnych dla systemów operacyjnych Unix i Unix-podobnych na wspólnej architekturze x86 kompatybilnej z komputerami PC , aby zachęcić twórców oprogramowania do portowania na architekturę. Początkowy pomysł polegał na standaryzacji małego podzbioru specyfikacji Spec 1170, poprzednika specyfikacji Single UNIX , oraz biblioteki GNU C (glibc), aby umożliwić uruchamianie niezmodyfikowanych plików binarnych w systemach operacyjnych typu x86 typu Unix. Projekt został pierwotnie oznaczony jako „Spec 150”.
Ostatecznie wybrano format ELF, a konkretnie implementację ELF w Linuksie, po tym, jak okazało się, że jest to de facto standard obsługiwany przez wszystkich zaangażowanych dostawców i systemy operacyjne.
Grupa rozpoczęła dyskusje e-mailowe w 1997 roku i po raz pierwszy spotkała się razem w biurach Santa Cruz Operation 22 sierpnia 1997 roku.
Komitet sterujący był Marc Ewing , Dion Johnson, Evan Leibovitch, Bruce Perens , Andrew Roach, Bryan Wayne Sparks i Linus Torvalds . Inne osoby biorące udział w projekcie to Keith Bostic , Chuck Cranor, Michael Davidson, Chris G. Demetriou, Ulrich Drepper, Don Dugger, Steve Ginzburg, Jon „maddog” Hall , Ron Holt, Jordan Hubbard , Dave Jensen, Kean Johnston, Andrew Josey, Robert Lipe, Bela Lubkin, Tim Marsland, Greg Page, Ronald Joe Record, Tim Ruckle, Joel Silverstein, Chia-pi Tien i Erik Troan. Reprezentowane systemy operacyjne i firmy to BeOS , BSDI , FreeBSD , Intel , Linux , NetBSD , SCO i SunSoft .
Projekt rozwijał się iw połowie 1998 roku SCO rozpoczęło opracowywanie lxrun , warstwy kompatybilności typu open source, zdolnej do uruchamiania plików binarnych Linuksa na OpenServer , UnixWare i Solaris . SCO ogłosiło oficjalne wsparcie lxrun na LinuxWorld w marcu 1999 r. Sun Microsystems zaczął oficjalnie wspierać lxrun dla Solaris na początku 1999 r., A później przeniósł się do zintegrowanej obsługi formatu binarnego Linuksa za pośrednictwem Solaris Containers for Linux Applications .
Ponieważ BSD od dawna wspierały pliki binarne Linuksa (poprzez warstwę kompatybilności ), a główni dostawcy x86 Unix dodali obsługę tego formatu, w ramach projektu zdecydowano, że Linux ELF jest formatem wybranym przez branżę i „zadeklarował [d] samo rozwiązanie” w dniu 25 lipca 1999.
FatELF: uniwersalne pliki binarne dla systemu Linux
FatELF to rozszerzenie formatu binarnego ELF, które dodaje możliwości grubych plików binarnych . Jest przeznaczony dla systemu Linux i innych systemów operacyjnych typu Unix . Oprócz abstrakcji architektury procesora ( kolejność bajtów , rozmiar słowa , zestaw instrukcji procesora itp.) istnieje potencjalna zaleta abstrakcji platformy programowej, np. plików binarnych obsługujących wiele wersji ABI jądra . Od 2021 roku FatELF nie został zintegrowany z głównym jądrem Linuksa.
Zobacz też
- Binarny interfejs aplikacji
- Porównanie formatów plików wykonywalnych
- DWARF – format do debugowania danych
- Standard zgodności binarnej firmy Intel
- Portable Executable – format używany przez system Windows
- vDSO – wirtualny OSD
- Kod niezależny od pozycji
Dalsza lektura
- Levine, John R. (2000) [październik 1999]. Łączniki i ładowarki . Seria Morgana Kaufmanna w inżynierii oprogramowania i programowaniu (1 wyd.). San Francisco, USA: Morgan Kaufmann . ISBN 1-55860-496-0 . OCLC 42413382 . Zarchiwizowane od oryginału w dniu 05.12.2012 . Źródło 2020-01-12 . Kod: [1] [2] Errata: [3]
-
Drepper, Ulrich (2006-08-20). „Jak pisać biblioteki współdzielone” (PDF) . 4,0 . Źródło 2007-06-20 .
{{ cite journal }}
: Cite journal wymaga|journal=
( pomoc ) - Niedoceniany bohater: The pracowity ELF , Peter Seebach, 20 grudnia 2005, zarchiwizowane z oryginału w dniu 24 lutego 2007
- LibElf and GElf - Biblioteka do manipulowania plikami ELF w Wayback Machine (archiwum 25 lutego 2004)
- Format pliku obiektowego ELF: wprowadzenie , format pliku obiektowego ELF według rozbioru, autor: Eric Youngdale (1995-05-01)
- Samouczek Whirlwind na temat tworzenia naprawdę małych plików wykonywalnych ELF dla systemu Linux autorstwa Briana Raitera
- Przeniesienie ELF do obiektów, których nie można przenieść, Julien Vanegue (2003-08-13)
- Wbudowane debugowanie ELF bez ptrace przez zespół ELFsh (2005-08-01)
- Badanie załadunku i relokacji ELF autorstwa Pata Beirne'a (1999-08-03)
Linki zewnętrzne
- Podręcznik FreeBSD: formaty binarne (wersja zarchiwizowana)
- Strona podręcznika FreeBSD elf(5).
- Często zadawane pytania dotyczące NetBSD ELF
- Strona podręcznika systemu Linux elf(5).
- Oracle Solaris Linker i przewodnik po bibliotekach
- Projekt ERESI: inżynieria wsteczna w systemach operacyjnych opartych na ELF Zarchiwizowane 2021-03-14 w Wayback Machine
- Artykuł Linux Today na 86open 26 lipca 1999
- Ogłoszenie 86open na liście dyskusyjnej Debian Announce 10 października 1997, Bruce Perens
- Deklaracja Ulricha Dreppera (PDF) w sprawie The SCO Group vs IBM , 19 września 2006
- 86open i dyskusja ELF Zarchiwizowane 2019-02-01 w Wayback Machine na Groklaw , 13 sierpnia 2006