Futtatható és linkelhető formátum

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. június 7-én felülvizsgált verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
MANÓ
Kiterjesztés .axf, .bin, .elf, .o, .prx, .sovagy.exe
Aláírás 7f 45 4c 46
Fejlesztő Unix System Laboratories
Formátum típusa bináris , végrehajtható , objektum , dinamikus hivatkozási könyvtár , memória kiíratása

Az ELF ( angolul  végrehajtható és linkelhető formátum  - végrehajtható és linkelhető fájlformátum) egy bináris fájlformátum, amelyet számos modern UNIX-szerű operációs rendszerben használnak, mint például a FreeBSD , Linux , Solaris stb.

Történelem

Az ELF formátumszabványt eredetileg az USL fejlesztette ki és tette közzé a UNIX System V bináris alkalmazási felület részeként [1] . Ezt követően a TIS bizottság kiválasztotta, és hordozható formátumként fejlesztette ki a 32 bites Intel x86 hardverarchitektúrán futó különféle operációs rendszerek számára . [2] Az ELF gyorsan népszerűvé vált, és miután a HP kiterjesztette a formátumot és közzétette az ELF-64 szabványt, elterjedt a 64 bites platformokra. [3]

Típusok

Az ELF formátumszabvány többféle fájltípust különböztet meg:

Formátum

Minden ELF fájl a következő részekből áll:

Fájl fejléce

A fájlfejléc (ELF Header) rögzített helyen található a fájl elején, és általános leírást tartalmaz a fájl szerkezetéről és főbb jellemzőiről, mint például: típus, formátum verzió, processzor architektúra , virtuális belépési pont címe , méretek és eltolások a fájl többi részéhez. A fejléc 52 bájt 32 bites fájlok esetén, vagy 64 bájt 64 bites esetén . Ez a különbség abból adódik, hogy a fájlfejléc három mezőt tartalmaz mutatómérettel, ami 4, illetve 8 bájt a 32, illetve 64 bites processzoroknál . Ezek a mezők e_entry, e_phoffés e_shoff.

ELF fájl fejléc mezői
A méret Név Célja
MANÓ

32

MANÓ

64

16 e_ident[16] A fájl általános jellemzői. Tömbbájtoke_ident
Index Név Célja
0-3 EI_MAG0-EI_MAG3 Fájl aláírása: 0x7f 0x45 0x4c 0x46.
négy EI_CLASS Objektumfájl osztály.
Név Jelentése Leírás
ELFCLASSNONE 0 Helytelen osztály
ELFCLASS32 egy 32 bites objektumfájl
ELFCLASS64 2 64 bites objektumfájl
5 EI_DATA Processzorfüggő adatkódolási módszer.
Név Jelentése Leírás
ELFDATANONE 0 Helytelen típus
ELFDATA2LSB egy Kis Endian
ELFDATA2MSB 2 Big Endian
6 EI_VERSION A fejléc ELF verziója. Jelenleg ennek a bájtnak az értéknek kell lennie EV_CURRENT.
Név Jelentése
EV_CURRENT egy
7 EI_OSABI A fájlban használt operációs rendszer vagy ABI - specifikus kiterjesztések. Más ELF fájlstruktúrák egyes mezőihez jelzők és mezők tartoznak, amelyek jelentése az operációs rendszertől vagy az ABI-tól függ; ezeknek a mezőknek az értelmezését az adott bájt értéke határozza meg. Ha az objektumfájl nem használ kiterjesztést, javasoljuk, hogy ezt a bájtot értékre állítsa 0. Ha ennek a bájtnak az értéke a -tól ig terjedő tartományban van 64, 255akkor az értelmezése az e_machine ELF fejléc mezőjének értékétől függ. Ebben a tartományban minden architektúra meghatározhatja a saját értékkészletét.
Név Jelentése Leírás
ELFOSABI_NONE 0 UNIX System V ABI
ELFOSABI_HPUX egy HP-UX
ELFOSABI_NETBSD 2 NetBSD
ELFOSABI_GNU 3 A fájl GNU ELF kiterjesztést használ ( GNU/Linux )
ELFOSABI_SOLARIS 6 Solaris
ELFOSABI_AIX 7 AIX
ELFOSABI_IRIX nyolc IRIX
ELFOSABI_FREEBSD 9 FreeBSD
ELFOSABI_TRU64 tíz Tru64 UNIX
ELFOSABI_MODESTO tizenegy Modesto
ELFOSABI_OPENBSD 12 OpenBSD
ELFOSABI_OPENVMS 13 openvms
ELFOSABI_NSK tizennégy Non Stop Kernel
ELFOSABI_AROS tizenöt Amiga Research OS
ELFOSABI_FENIXOS 16 fenixOS
ELFOSABI_CLOUDABI 17 CloudABI
ELFOSABI_OPENVOS tizennyolc OpenVOS
64-255 Processzor függő értékek
nyolc EI_ABIVERSION ABI verzió.
9 EI_PAD T. n. padding byte (töltelék). A jövőbeni használatra fenntartott tömbelemek e_ident. Általában telepítve van 0. Az objektumfájl-olvasók figyelmen kívül hagyják őket.
tíz EI_PAD + 1
tizenegy EI_PAD + 2
12 EI_PAD + 3
13 EI_PAD + 4
tizennégy EI_PAD + 5
tizenöt EI_PAD + 6
2 e_type Fájltípus.
Név Jelentése Leírás
ET_NONE 0 Bizonytalan
ET_REL egy Fájl áthelyezése folyamatban
ET_EXEC 2 Végrehajtható
ET_DYN 3 Megosztott objektumfájl
ET_CORE négy core fájl
ET_LOOS-ET_HIOS 65024-65279 Operációs rendszertől függő értékek
ET_LOPROC-ET_HIPROC 65280 - 65535 Processzor függő értékek
2 e_machine Annak a hardverplatformnak az architektúrája, amelyhez a fájlt létrehozták:
Név Jelentése Leírás
EM_NONE 0x0 Meghatározatlan
EM_M32 0x01 AT&T WE 32100
EM_SPARC 0x02 SPARC
EM_386 0x03 Intel 80386
EM_68K 0x04 Motorola 68000 (M68k)
EM_88K 0x05 Motorola 88000 (M88k)
EM_IAMCU 0x06 Intel MCU
EM_860 0x07 Intel 80860
EM_MIPS 0x08 MIPS
EM_S370 0x09 IBM_System/370
EM_MIPS_RS3_LE 0x0A MIPS R3000 Little-endian
0x0B - 0x0E Fenntartva későbbi használatra
EM_PARISC 0x0F Hewlett-Packard PA-RISC
0x10 Fenntartva későbbi használatra
EM_960 0x13 Intel 80960
EM_PPC 0x14 PowerPC
EM_PPC64 0x15 PowerPC (64 bites)
EM_S390 0x16 S390 , beleértve az S390x-et
EM_SPU 0x17 IBM SPU/SPC
0x18 - 0x23 Fenntartva későbbi használatra
EM_V800 0x24 NEC V800
EM_FR20 0x25 Fujitsu FR20
EM_RH32 0x26 TRW RH-32
EM_MCOREésEM_RCE 0x27 Motorola RCE
EM_ARM 0x28 ARM (ARMv7/Aarch32-ig)
EM_OLD_ALPHA 0x29 Digitális Alpha
EM_SH 0x2A szuperh
EM_SPARCV9 0x2B SPARC 9-es verzió
EM_TRICORE 0x2C Siemens TriCore beágyazott processzor
EM_ARC 0x2D Argonaut RISC Core
EM_H8_300 0x2E Hitachi H8/300
EM_H8_300H 0x2F Hitachi H8/300H
EM_H8S 0x30 Hitachi H8S
EM_H8_500 0x31 Hitachi H8/500
EM_IA_64 0x32 IA-64
EM_MIPS_X 0x33 Stanford MIPS-X
EM_COLDFIRE 0x34 Motorola ColdFire
EM_68HC12 0x35 Motorola M68HC12
EM_MMA 0x36 Fujitsu MMA multimédiás gyorsító
EM_PCP 0x37 Siemens PCP
EM_NCPU 0x38 Sony nCPU beágyazott RISC processzor
EM_NDR1 0x39 Denso NDR1 mikroprocesszor
EM_STARCORE 0x3A Motorola Star*Core processzor
EM_ME16 0x3B Toyota ME16 processzor
EM_ST100 0x3C STMicroelectronics ST100 processzor
EM_TINYJ 0x3D Advanced Logic Corp. TinyJ beágyazott processzorcsalád
EM_X86_64 0x3E AMD x86-64
EM_MCST_ELBRUS 0xAF Elbrus (processzor architektúra)
EM_TI_C6000 0x8C TMS320C6000 család
EM_AARCH64 0xB7 ARM 64 bites (ARMv8/Aarch64)
EM_RISCV 0xF3 RISC-V
EM_BPF 0xF7 Berkeley csomagszűrő
EM_65816 0x101 WDC 65C816
négy e_version Formázza meg a verziószámot. Jelenleg csak egy érték tekinthető helyesnek.
Név Jelentése Leírás
EV_NONE 0 Helytelen érték
EV_CURRENT egy Jelenlegi verzió
négy nyolc e_entry A belépési pont virtuális címe, amelyre a rendszer a folyamat indulásakor átadja az irányítást. Ha a fájlnak nincs belépési pontja, ez a mező a következőt tartalmazza: 0.
négy nyolc e_phoff A programfejléc táblázat eltolása a fájl elejétől, bájtban. Ha a fájlnak nincs programfejléc-táblázata, ez a mező tartalmazza a következőt: 0.
négy nyolc e_shoff A szakaszfejléc táblázat eltolása a fájl elejétől, bájtban. Ha a fájlnak nincs szakaszfejléc-táblázata, ez a mező tartalmazza a következőt: 0.
négy e_flags A fájlhoz társított processzorspecifikus jelzők . Ha hiányoznak, ez a mező tartalmazza a következőt: 0.
2 e_ehsize Fájlfejléc mérete bájtban ( 5232 bites és 6464 bites fájlokhoz).
2 e_phentsize Egy programfejléc mérete. Minden programfejléc azonos méretű ( 32 bites és 64 32bites fájlokhoz ).56
2 e_phnum A programfejlécek száma. Ha a fájlnak nincs programfejléc-táblázata, ez a mező tartalmazza a következőt: 0.
2 e_shentsize Egy szakaszfejléc mérete. Minden szakaszfejléc azonos méretű ( 32 bites és 64 40bites fájlokhoz ).64
2 e_shnum A szakaszfejlécek száma. Ha a fájlnak nincs szakaszfejléc-táblázata, ez a mező tartalmazza a következőt: 0.
2 e_shstrndx A szakaszfejléc-tábla bejegyzésének indexe, amely leírja a szakasznevek táblázatát (általában ezt a táblát .shstrtab -nak hívják , és egy külön szakaszt jelent). Ha a fájl nem tartalmaz szakasznévtáblázatot, akkor ez a mező tartalmazza a 0.

Programfejléc táblázat

A programfejléc-tábla fejléceket tartalmaz, amelyek mindegyike egy külön programszegmenst és annak attribútumait ír le, vagy az operációs rendszernek a program végrehajtásra való felkészítéséhez szükséges egyéb információkat. Ez a táblázat a fájlban bárhol elhelyezhető, helye (a fájl elejéhez képest eltolás) az e_phoffELF fejléc mezőben van leírva.

A programfejléc szerkezetének elemzésekor a p_flags32 bites és a 64 bites ELF fájlok különböző mezőinek helyét találhatjuk. Ez a különbség a szerkezet összehangolásának köszönhető, hogy növelje a feldolgozási hatékonyságot.

Programfejléc mezők
A méret Név Célja
MANÓ

32

MANÓ

64

négy p_type A fejléc által leírt szegmens típusa, vagy a fejléc mezőértékeinek értelmezése.
Név Jelentése Leírás
PT_NULL 0 A cím nincs felhasználva, a többi mező nincs megadva. Ez a típus lehetővé teszi figyelmen kívül hagyott elemek felvételét a fájl programfejléc-táblázatába.
PT_LOAD egy A betöltendő szegmens, amelyet a p_fileszés mezők írnak le p_memsz. A fájl bájtjai egy szegmenshez vannak leképezve a memóriában. Ha a memóriaszegmens mérete ( p_memsz) nagyobb, mint a fájlszegmens mérete ( p_filesz), a plusz bájtok nullákkal vannak kitöltve (azonnal követik a szegmensben meghatározott bájtokat). A fájlban lévő szegmens mérete ( p_filesz) nem lehet nagyobb, mint a memóriában lévő szegmens mérete ( p_memsz). A letölthető szegmensek programcímei a programcímek táblázatban a mező értékének megfelelően növekvő sorrendben vannak elrendezve p_vaddr.
PT_DYNAMIC 2 A programfejléc a dinamikus linkelésről nyújt információt.
PT_INTERP 3 A programfejléc megadja az értelmezőként futtatandó elérési út méretét és helyét (null végű C -stílusú karakterláncok). Ez a fajta szegmens csak végrehajtható fájlok esetén értelmezhető (bár lehet megosztott objektumfájlban is); nem fordulhat elő többször egy fájlban. Ha van ilyen típusú fejléc, annak meg kell előznie a betöltendő szegmens bármely programfejlécét.
PT_NOTE négy A programfejléc határozza meg a segédinformációk helyét és méretét.
PT_SHLIB 5 Ez a szegmenstípus le van foglalva, de jelentése nincs meghatározva. Az ilyen típusú programfejlécet tartalmazó programok nem felelnek meg az ABI-nak.
PT_PHDR 6 A programfejléc, ha van, megadja magának a programfejléc-táblázatnak a helyét és méretét, mind a fájlban, mind a program memóriaképében. Ez a szegmenstípus nem fordulhat elő többször egy fájlban. Sőt, csak akkor fordulhat elő, ha a fájlban van programfejléc tábla. Ha van ilyen típusú fejléc, annak meg kell előznie a betöltendő szegmens bármely programfejlécét.
PT_TLS 7 A program fejléce határozza meg a Thread-Local Storage mintát. Az ELF betöltőknek nem szabad megtartaniuk ezt a bejegyzést a programfejléc-táblázatban.
PT_LOOS-PT_HIOS 1610612736 - 1879048191 Operációs rendszertől függő értékek.
PT_LOPROC-PT_HIPROC 1879048192 - 2147483647 Processzor függő értékek.
négy p_flags Szegmenshez kapcsolódó jelzők (ELF64-hez).
Név Jelentése Leírás
PF_X 0x1 Engedély a végrehajtásra
PF_W 0x2 Írási engedély
PF_R 0x4 Olvasási engedély
PF_MASKOS 0x0ff00000 A mezőben szereplő összes bit operációs rendszertől függő értékeket határoz meg.
PF_MASKPROC 0xf0000000 A mezőben szereplő összes bit processzor-specifikus értékeket határoz meg.
négy nyolc p_offset Szegmens eltolás a fájl elejétől.
négy nyolc p_vaddr Annak a szegmensnek a virtuális címe a memóriában, ahová a szegmenst be kell tölteni, amikor a memóriába van leképezve.
négy nyolc p_paddr A szegmens fizikai címe (olyan rendszerek esetében, ahol ez fontos).
négy nyolc p_filesz A szegmens mérete a fájlban. Lehet nulla.
négy nyolc p_memsz A szegmens mérete a memóriában. Lehet nulla.
négy p_flags Szegmenshez kapcsolódó jelzők (ELF32-hez) (a lehetséges értékeket lásd fent).
négy nyolc p_align Szegmensigazítás. 0és 1meghatározza az igazítás hiányát. Ellenkező esetben egy bizonyos mértékig pozitív 2-nek kell lennie.

Szakaszfejléc táblázat

A szakaszfejléc táblázat tartalmazza a fájl szakasz attribútumait. Erre a táblára csak a linkernek van szüksége, a futtatható fájloknak nincs szüksége erre a táblára (az ELF betöltő figyelmen kívül hagyja). A szakaszfejléc-táblázatban megadott információkat a linker használja fel arra, hogy a fájl összeállítása során optimálisan szegmensekbe rendezze ezeket a szakaszokat, figyelembe véve azok attribútumait.

Szakaszfejléc mezők
A méret Név Célja
MANÓ

32

MANÓ

64

négy sh_name A szakasz nevét tartalmazó sor eltolása a szakasznevek táblázatának elejéhez képest.
négy sh_type Fejléc típusa.
Név Jelentése Leírás
SHT_NULL 0 A cím nincs felhasználva, a többi mező nincs megadva.
SHT_PROGBITS egy A rész a program által meghatározott információkat tartalmaz, formátumát és jelentését egyedül a program határozza meg.
SHT_SYMTAB 2 A szakasz a szimbólumtáblázatot tartalmazza. Egy fájlban jelenleg csak egy ilyen szakasz lehet.
SHT_STRTAB 3 A szakasz egy karakterlánc-táblázatot tartalmaz. Egy fájl több ilyen típusú szakaszt tartalmazhat.
SHT_RELA négy A szakasz részletes információkat tartalmaz a mozgásokról. Egy fájl több ilyen típusú szakaszt tartalmazhat.
SHT_HASH 5 A szakasz egy szimbólum hash táblázatot tartalmaz. Egy fájlban jelenleg csak egy ilyen szakasz lehet.
SHT_DYNAMIC 6 A szakasz a dinamikus linkelésről tartalmaz információkat. Egy fájlban jelenleg csak egy ilyen szakasz lehet.
SHT_NOTE 7 A szakasz olyan információkat tartalmaz, amelyek valamilyen módon megjelölik a fájlt.
SHT_NOBITS nyolc A szakasz nem foglal helyet a fájlban, különben hasonló a fájlhoz SHT_PROGBITS.
SHT_REL 9 A rész a mozgásokról tartalmaz információkat. Egy fájl több ilyen típusú szakaszt tartalmazhat.
SHT_SHLIB tíz Ez a szakasztípus meghatározott, de nincs konkrét jelentése.
SHT_DYNSYM tizenegy A szakasz a szimbólumtáblázatot tartalmazza. Egy fájlban jelenleg csak egy ilyen szakasz lehet.
SHT_INIT_ARRAY tizennégy A szakasz a program inicializálási függvényeire mutató mutatók tömbjét tartalmazza. A függvények nem vehetnek fel argumentumot, és nem adhatnak vissza semmit.
SHT_FINI_ARRAY tizenöt Ez a szakasz egy sor mutatót tartalmaz a programzáró függvényekre. A függvények nem vehetnek fel argumentumot, és nem adhatnak vissza semmit.
SHT_PREINIT_ARRAY 16 A szakasz mutatók tömbjét tartalmazza olyan függvényekre, amelyeket a program inicializálási függvényeinek meghívása előtt hívnak meg. A függvények nem vehetnek fel argumentumot, és nem adhatnak vissza semmit.
SHT_GROUP 17 Ez a szakasz szakaszok csoportját határozza meg. A szakaszcsoport olyan kapcsolódó szakaszok gyűjteménye, amelyeket a linkernek speciális módon kell kezelnie. Az ilyen szakaszok csak áthelyezhető objektumfájlokban lehetnek (amelynek mezője e_typea értékű ET_REL). A szakaszok csoportját meghatározó címsornak a szakasztáblázatban a definiálandó csoportban szereplő összes szakasz fejléce előtt kell lennie.
SHT_SYMTAB_SHNDX tizennyolc Egy szakasz egy szimbólumtáblázathoz van társítva, és akkor szükséges, ha a táblázat bármely eleme olyan szakaszfejlécre hivatkozik, amely indexel rendelkezik SHN_XINDEX(ez akkor történik, ha a szakaszindex olyan nagy, hogy nem fér el a mezőben st_shndx). Elf32_WordA szakasz ELF32 és ELF64 típusú számok tömbjét tartalmazza Elf64_Word. Ennek a tömbnek minden eleme megfelel egy bejegyzésnek a szimbólumtáblázatban, és a megfelelő sorrendbe kerül. Ezek az elemek azon szakaszcímsorok indexei, amelyekhez a megfelelő szimbólumok vannak társítva. Ha a st_shndxszimbólumtábla megfelelő elemének mezőjének értéke SHN_XINDEX, akkor az elem tartalmazza a valós szakaszfejléc indexet, ellenkező esetben az elem tartalmazza a -t 0.
SHT_LOOS-SHT_HIOS 1610612736 - 1879048191 Operációs rendszertől függő értékek.
SHT_LOPROC-SHT_HIPROC 1879048192 - 2147483647 Processzor függő értékek.
SHT_LOUSER-SHT_HIUSER 2147483648 - 4294967295 Programfüggő értékek. Ezeket az értékeket az ELF formátumú fájlkezelők használhatják anélkül, hogy ütköznének az aktuálisan meghatározott értékekkel.
négy nyolc sh_flags szakasz attribútumait.
Név Jelentése Leírás
SHF_WRITE 0x1 Írási engedély.
SHF_ALLOC 0x2 A szakasz memóriát foglal a folyamat futása közben. Egyes szolgáltatási szakaszok nem töltődnek be a memóriába egy objektumfájl betöltésekor; ilyen szakaszok esetében ez a jelző le van tiltva.
SHF_EXECINSTR 0x4 A szakasz végrehajtható gépi utasításokat tartalmaz.
SHF_MERGE 0x10 A partíción lévő adatok kombinálhatók a duplikáció kiküszöbölése érdekében. Ha a zászló SHF_STRINGSnincs beállítva, akkor a szakasz adatelemei azonos méretűek. Egy elem mérete a mezőben látható sh_entsize. Ha a jelző SHF_STRINGSbe van állítva, a szakasz null-végű karakterek tömbjéből áll, és egy karakter mérete a mezőben van megadva sh_entsize.

A szakasz minden elemét összehasonlítja az azonos nevű, típusú és zászlókkal rendelkező szakaszok többi elemével. A program végrehajtása során azonos értékű elemek kombinálhatók. Az ilyen szekciók tagjaira vonatkozó lépéseket ennek megfelelően kell megoldani. Egyesítés előtt a szakasz összes elemét elemezni kell, hogy meghatározzuk, hogy az értékek ténylegesen azonosak lesznek-e a futásidőben.

Ez a társítás nem feltétele az ABI-megfelelésnek.

SHF_STRINGS 0x20 Egy szakasz null-végű karakterek tömbjéből áll. Egy karakter mérete a mezőben van megadva sh_entsize.
SHF_INFO_LINK 0x40 A szakaszfejléc mező sh_infotartalmazza a szakaszfejléc táblázat bejegyzésének indexét.
SHF_LINK_ORDER 0x80 Különleges elhelyezési követelmények. A követelmények akkor érvényesek, ha a sh_linkszakaszfejléc mező egy másik szakaszra (kapcsolódó szakaszra) hivatkozik. Ha a sh_linkcsatolt szakasz mezője nem tartalmazza 0a -t, akkor az aktuális szakasznak a kimeneti fájlban kell lennie a hivatkozott szakaszhoz képest abban a sorrendben, ahogyan a hivatkozott szakasz ahhoz a szakaszhoz képest, amelyhez kapcsolódik.
SHF_OS_NONCONFORMING 0x100 A szakasz speciális, operációs rendszer-specifikus kezelést igényel a helytelen viselkedés elkerülése érdekében.
SHF_GROUP 0x200 Szakasz – szakaszok csoportjának egy eleme (talán az egyetlen).
SHF_TLS 0x400 A szakasz Thread-Local Storage-t tartalmaz, minden szálnak megvan a saját másolata ebből a szakaszból.
SHF_COMPRESSED 0x800 A szakasz tömörített adatokat tartalmaz. Ez a jelző csak azokra a szakaszokra vonatkozik, amelyekhez nincs memória lefoglalva, amikor objektumfájlt tölt be a memóriába. A zászlót nem használják együtt a -val SHF_ALLOC. Ez a jelző szintén nem vonatkozik a típusú szakaszokra SHT_NOBITS.

A tömörített szakaszhoz kapcsolódó összes mozgás annak tömörítetlen állapotban lévő adataira vonatkozik. Ezért a szakaszok dekompressziója szükséges a mozgás lehetővé tételéhez. Minden tömörített szakasz meghatározza a saját tömörítési algoritmusát. Elfogadható, hogy egy ELF objektumfájl különböző szakaszai különböző tömörítési algoritmusokat használnak.

A tömörített szakaszok a tömörítési algoritmust azonosító fejléccel kezdődnek.

Tömörített szakaszfejlécek
A méret Név Célja
MANÓ

32

MANÓ

64

négy négy ch_type tömörítési algoritmus.
Név Jelentése Leírás
ELFCOMPRESS_ZLIB egy A szakasz adatait a Zlib algoritmussal tömörítjük . A tömörített adatok közvetlenül a fejléc után és a szakasz vége előtt következnek.
ELFCOMPRESS_LOOS-ELFCOMPRESS_HIOS 1610612736 - 1879048191 Operációs rendszertől függő értékek.
ELFCOMPRESS_LOPROC-ELFCOMPRESS_HIPROC 1879048192 - 2147483647 Processzor függő értékek.
négy ch_reserved Fenntartva későbbi használatra.
négy nyolc ch_size A kicsomagolt szakasz mérete bájtban.
négy nyolc ch_addralign Szükséges igazítás a tömörített szakaszhoz.
SHF_MASKOS 0x0ff00000 A mezőben szereplő összes bit operációs rendszertől függő értékeket határoz meg.
SHF_MASKPROC 0xf0000000 A mezőben szereplő összes bit processzor-specifikus értékeket határoz meg.
négy nyolc sh_addr Ha a szakaszt be kell tölteni a memóriába az objektumfájl betöltésekor, ez a mező azt a címet adja meg, ahonnan a szakasz betöltődik, ellenkező esetben a mező tartalmazza: 0.
négy nyolc sh_offset A szakasz eltolása a fájl elejétől bájtban. A típusszakaszok SHT_NOBITSnem foglalnak helyet a fájlban, számukra ez a mező tartalmazza a fogalmi helyet a fájlban.
négy nyolc sh_size A szakasz mérete a fájlban. Lehet nulla.
négy sh_link A kapcsolódó szakasz indexe. Ennek a mezőnek a fejléc típusától függően különböző céljai lehetnek. A mezők értelmezése sh_linkés sh_infoa mező értékétől függőensh_type
sh_type sh_link sh_info
SHT_DYNAMIC A karakterlánc-tábla szakaszfejlécének indexe, amelyet a szakasz elemei használnak. 0
SHT_HASH A szimbólumtábla szekció fejlécének indexe, amelyhez ez a hash tábla tartozik. 0
SHT_REL,SHT_RELA A kapcsolódó szimbólumtábla szakaszfejléc-indexe. A szakaszfejléc indexe, amelyre az áthelyezési adatokat alkalmazni kell.
SHT_SYMTAB,SHT_DYNSYM A kapcsolódó karakterlánc-tábla szakaszfejlécének indexe. Eggyel több, mint az utolsó helyi szimbólum ( STB_LOCAL) indexe a szimbólumtáblázatban.
SHT_GROUP A kapcsolódó szimbólumtábla szakaszfejléc-indexe. Az elem indexe a kapcsolódó szimbólumtáblázatban. A megadott elem neve adja a szakaszcsoport aláírását.
SHT_SYMTAB_SHNDX A kapcsolódó szimbólumtábla szakasz szakaszfejléc-indexe. 0
négy sh_info További információk a szakaszról (a lehetséges értékeket lásd fent).
négy nyolc sh_addralign Szükséges szakaszigazítás.
négy nyolc sh_entsize Az egyes bejegyzések mérete bájtban (ha a szakasz rögzített méretű bejegyzések tömbjét tartalmazza, ellenkező esetben a mező tartalmazza a -t 0).

A szakaszok és szegmensek tartalma

Segédprogramok

Számos segédprogram létezik az ELF fájlokkal való munkavégzéshez, a főbbeket a GNU Binutils szoftver eszközkészlete tartalmazza :

Lásd még

Jegyzetek

  1. System V Application Binary Interface archiválva 2015. május 21-én a Wayback Machine Edition 4.1-es verziójában (1997-03-18 )
  2. ↑ Az ELF specifikáció archiválva : 2012. június 16. a  Wayback Machine -nél
  3. ELF-64 objektumfájl formátum archiválva : 2015. július 1. a Wayback Machine -nél
  4. FreshPorts -- devel/elfutils . www.freshports.org. Letöltve: 2018. március 31. Az eredetiből archiválva : 2018. február 16.

Linkek