Format executabil și conectabil

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 iunie 2021; verificările necesită 6 modificări .
ELF
Extensie .axf, .bin, .elf, .o, .prx, .sosau.exe
Semnătură 7f 45 4c 46
Dezvoltator Laboratoarele de sistem Unix
Tip de format binar , executabil , obiect , bibliotecă de link dinamic , memorie dump

ELF ( Engleză  Executable and Linkable Format  - format de fișier executabil și conectabil) este un format de fișier binar utilizat în multe sisteme de operare moderne asemănătoare UNIX , cum ar fi FreeBSD , Linux , Solaris etc.

Istorie

Standardul de format ELF a fost inițial dezvoltat și publicat de USL ca parte a interfeței aplicației binare UNIX System V [1] . Apoi a fost selectat de comitetul TIS și dezvoltat ca format portabil pentru diferite sisteme de operare care rulează pe arhitectura hardware Intel x86 pe 32 de biți . [2] ELF a câștigat rapid popularitate și, după ce HP a extins formatul și a publicat standardul ELF-64, sa răspândit pe platformele pe 64 de biți. [3]

Tipuri

Standardul de format ELF distinge mai multe tipuri de fișiere:

Format

Fiecare fișier ELF este format din următoarele părți:

Antetul fișierului

Antetul fișierului (ELF Header) are o locație fixă ​​la începutul fișierului și conține o descriere generală a structurii fișierului și a principalelor caracteristici ale acestuia, cum ar fi: tipul, versiunea formatului, arhitectura procesorului , adresa punctului de intrare virtual , dimensiunile și offseturile. a altor părți ale dosarului. Antetul are 52 de octeți pentru fișierele pe 32 de biți sau 64 pentru fișierele pe 64 de biți . Această diferență se datorează faptului că antetul fișierului conține trei câmpuri cu dimensiunea pointerului, care este de 4 și 8 octeți pentru procesoarele pe 32 de biți și, respectiv, pe 64 de biți. Aceste câmpuri sunt e_entry, e_phoffși e_shoff.

Câmpurile antet fișierului ELF
Marimea Nume Scop
ELF

32

ELF

64

16 e_ident[16] Caracteristicile generale ale dosarului. Octeți de matricee_ident
Index Nume Scop
0 - 3 EI_MAG0-EI_MAG3 Semnătură fișier: 0x7f 0x45 0x4c 0x46.
patru EI_CLASS Clasa fișier obiect.
Nume Sens Descriere
ELFCLASSNONE 0 Clasa incorecta
ELFCLASS32 unu fișier obiect pe 32 de biți
ELFCLASS64 2 fișier obiect pe 64 de biți
5 EI_DATA Metoda de codificare a datelor dependentă de procesor.
Nume Sens Descriere
ELFDATANONE 0 Tip incorect
ELFDATA2LSB unu Micul Endian
ELFDATA2MSB 2 Big Endian
6 EI_VERSION Versiunea ELF a antetului. În prezent, valoarea acestui octet ar trebui să fie EV_CURRENT.
Nume Sens
EV_CURRENT unu
7 EI_OSABI Sistemul de operare sau extensiile specifice ABI utilizate în fișier. Unele câmpuri din alte structuri de fișiere ELF au steaguri și câmpuri a căror semnificație depinde de sistemul de operare sau de ABI; interpretarea acestor câmpuri este determinată de valoarea octetului dat. Dacă fișierul obiect nu folosește extensii, se recomandă ca acest octet să fie setat la 0. Dacă valoarea pentru acest octet este în intervalul de la 64până la 255, atunci interpretarea sa depinde de valoarea câmpului antet ELF e_machine. În acest interval, fiecare arhitectură își poate defini propriul set de valori.
Nume Sens Descriere
ELFOSABI_NONE 0 UNIX System V ABI
ELFOSABI_HPUX unu HP-UX
ELFOSABI_NETBSD 2 NetBSD
ELFOSABI_GNU 3 Fișierul folosește extensii GNU ELF ( GNU/Linux )
ELFOSABI_SOLARIS 6 Solaris
ELFOSABI_AIX 7 AIX
ELFOSABI_IRIX opt IRIX
ELFOSABI_FREEBSD 9 FreeBSD
ELFOSABI_TRU64 zece Tru64 UNIX
ELFOSABI_MODESTO unsprezece Modesto
ELFOSABI_OPENBSD 12 OpenBSD
ELFOSABI_OPENVMS 13 openvms
ELFOSABI_NSK paisprezece Kernel non-stop
ELFOSABI_AROS cincisprezece Amiga Research OS
ELFOSABI_FENIXOS 16 fenixOS
ELFOSABI_CLOUDABI 17 CloudABI
ELFOSABI_OPENVOS optsprezece OpenVOS
64 - 255 Valori dependente de procesor
opt EI_ABIVERSION Versiunea ABI.
9 EI_PAD T. n. padding bytes (umplutură). Elemente de matrice rezervate pentru utilizare ulterioară e_ident. Instalat de obicei în 0. Cititorii de fișiere obiect ar trebui să le ignore.
zece EI_PAD + 1
unsprezece EI_PAD + 2
12 EI_PAD + 3
13 EI_PAD + 4
paisprezece EI_PAD + 5
cincisprezece EI_PAD + 6
2 e_type Tip fișier.
Nume Sens Descriere
ET_NONE 0 Incert
ET_REL unu Fișier în curs de mutare
ET_EXEC 2 Executabil
ET_DYN 3 Fișier obiect partajat
ET_CORE patru fișier de bază
ET_LOOS-ET_HIOS 65024 - 65279 Valori dependente de sistemul de operare
ET_LOPROC-ET_HIPROC 65280 - 65535 Valori dependente de procesor
2 e_machine Arhitectura platformei hardware pentru care a fost creat fișierul:
Nume Sens Descriere
EM_NONE 0x0 Nedefinit
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 Rezervat pentru utilizare ulterioară
EM_PARISC 0x0F Hewlett-Packard PA-RISC
0x10 Rezervat pentru utilizare ulterioară
EM_960 0x13 Intel 80960
EM_PPC 0x14 PowerPC
EM_PPC64 0x15 PowerPC (64 de biți)
EM_S390 0x16 S390 , inclusiv S390x
EM_SPU 0x17 IBM SPU/SPC
0x18 - 0x23 Rezervat pentru utilizare ulterioară
EM_V800 0x24 NEC V800
EM_FR20 0x25 Fujitsu FR20
EM_RH32 0x26 TRW RH-32
EM_MCOREșiEM_RCE 0x27 Motorola RCE
EM_ARM 0x28 ARM (până la ARMv7/Aarch32)
EM_OLD_ALPHA 0x29 Alfa digitală
EM_SH 0x2A superh
EM_SPARCV9 0x2B SPARC versiunea 9
EM_TRICORE 0x2C Procesor încorporat Siemens TriCore
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 Multimedia Accelerator
EM_PCP 0x37 Siemens PCP
EM_NCPU 0x38 Procesor RISC nCPU încorporat Sony
EM_NDR1 0x39 Microprocesor Denso NDR1
EM_STARCORE 0x3A Procesor Motorola Star*Core
EM_ME16 0x3B procesor Toyota ME16
EM_ST100 0x3C Procesor STMicroelectronics ST100
EM_TINYJ 0x3D Advanced Logic Corp. Familia de procesoare încorporate TinyJ
EM_X86_64 0x3E AMD x86-64
EM_MCST_ELBRUS 0xAF Elbrus (arhitectura procesorului)
EM_TI_C6000 0x8C Familia TMS320C6000
EM_AARCH64 0xB7 ARM pe 64 de biți (ARMv8/Aarch64)
EM_RISCV 0xF3 RISC-V
EM_BPF 0xF7 Filtrul de pachete Berkeley
EM_65816 0x101 WDC 65C816
patru e_version Formatează numărul versiunii. Momentan, o singură valoare este considerată corectă.
Nume Sens Descriere
EV_NONE 0 Valoare incorectă
EV_CURRENT unu Versiune curentă
patru opt e_entry Adresa virtuală a punctului de intrare către care sistemul trece controlul când începe procesul. Dacă fișierul nu are un punct de intrare, acest câmp conține 0.
patru opt e_phoff Offset al tabelului antet programului de la începutul fișierului, în octeți. Dacă fișierul nu are un tabel de antet de program, acest câmp conține 0.
patru opt e_shoff Tabelul antetului secțiunii decalat de la începutul fișierului, în octeți. Dacă fișierul nu are un tabel de antet de secțiune, acest câmp conține 0.
patru e_flags Steaguri specifice procesorului asociate cu fișierul . Dacă acestea sunt absente, acest câmp conține 0.
2 e_ehsize Dimensiunea antetului fișierului în octeți ( 52pentru fișiere pe 32 de biți și 6464 de biți).
2 e_phentsize Dimensiunea unui antet de program. Toate anteturile programelor au aceeași dimensiune ( 32pentru fișierele pe 32 de biți și 56pentru cele pe 64 de biți).
2 e_phnum Numărul de antete de program. Dacă fișierul nu are un tabel de antet de program, acest câmp conține 0.
2 e_shentsize Dimensiunea unui antet de secțiune. Toate anteturile de secțiune au aceeași dimensiune ( 40pentru fișierele pe 32 de biți și 64pentru cele pe 64 de biți).
2 e_shnum Numărul de anteturi de secțiune. Dacă fișierul nu are un tabel de antet de secțiune, acest câmp conține 0.
2 e_shstrndx Indexul unei intrări din tabelul antet de secțiune care descrie tabelul de nume de secțiuni (de obicei, acest tabel se numește .shstrtab și reprezintă o secțiune separată). Dacă fișierul nu conține un tabel cu nume de secțiune, acest câmp conține 0.

Tabel antet program

Tabelul antet programului conține anteturi, fiecare dintre acestea descriind un segment de program separat și atributele acestuia, sau alte informații necesare sistemului de operare pentru a pregăti programul pentru execuție. Acest tabel poate fi localizat oriunde în fișier, locația sa (offset față de începutul fișierului) este descrisă în e_phoffcâmpul antet ELF.

Când analizați structura antetului programului, puteți găsi diferite locații de câmp p_flagspentru fișierele ELF pe 32 și 64 de biți. Această diferență se datorează alinierii structurii pentru a crește eficiența procesării.

Câmpurile antet programului
Marimea Nume Scop
ELF

32

ELF

64

patru p_type Tipul de segment pe care îl descrie acest antet sau cum se interpretează valorile câmpului acestui antet.
Nume Sens Descriere
PT_NULL 0 Titlul nu este folosit, restul câmpurilor nu sunt definite. Acest tip vă permite să includeți elemente ignorate în tabelul antet al programului fișierului.
PT_LOAD unu Segmentul de încărcat, descris de câmpurile p_fileszși p_memsz. Octeții din fișier sunt mapați la un segment din memorie. Dacă dimensiunea segmentului de memorie ( p_memsz) este mai mare decât dimensiunea segmentului de fișier ( p_filesz), octeții suplimentari sunt completați cu zerouri (ei urmează imediat octeții definiți în segment). Dimensiunea unui segment dintr-un fișier ( p_filesz) nu poate fi mai mare decât dimensiunea unui segment din memorie ( p_memsz). Titlurile programelor ale segmentelor descărcabile sunt aranjate în tabelul titlurilor programelor în ordinea crescătoare a valorii câmpului p_vaddr.
PT_DYNAMIC 2 Antetul programului oferă informații despre legarea dinamică.
PT_INTERP 3 Antetul programului oferă dimensiunea și locația căii ( șiruri de caractere în stil C terminate cu nul) pentru a rula ca interpret. Acest tip de segment are sens doar pentru fișierele executabile (deși poate fi și într-un fișier obiect partajat); nu poate apărea de mai multe ori într-un fișier. Dacă este prezent un antet de acest tip, acesta trebuie să precedă orice antet de program al segmentului care este încărcat.
PT_NOTE patru Antetul programului definește locația și dimensiunea informațiilor auxiliare.
PT_SHLIB 5 Acest tip de segment este rezervat, dar sensul său este nedefinit. Programele care conțin un antet de program de acest tip nu respectă ABI.
PT_PHDR 6 Antetul programului, dacă este prezent, specifică locația și dimensiunea tabelului antet programului în sine, atât în ​​fișier, cât și în imaginea de memorie a programului. Acest tip de segment nu poate apărea de mai multe ori într-un fișier. Mai mult, poate apărea numai dacă în fișier există un tabel de antet de program. Dacă este prezent un antet de acest tip, acesta trebuie să precedă orice antet de program al segmentului care este încărcat.
PT_TLS 7 Antetul programului definește modelul Thread-Local Storage. Încărcătoarele ELF nu trebuie să mențină această intrare în tabelul antet programului.
PT_LOOS-PT_HIOS 1610612736 - 1879048191 Valori dependente de sistemul de operare.
PT_LOPROC-PT_HIPROC 1879048192 - 2147483647 Valori dependente de procesor.
patru p_flags Segmentele legate de steaguri (pentru ELF64).
Nume Sens Descriere
PF_X 0x1 Permisiune de executare
PF_W 0x2 Permisiune de scriere
PF_R 0x4 Permisiune de citire
PF_MASKOS 0x0ff00000 Toți biții incluși în acest câmp definesc valori dependente de sistemul de operare.
PF_MASKPROC 0xf0000000 Toți biții incluși în acest câmp definesc valori specifice procesorului.
patru opt p_offset Segment offset de la începutul fișierului.
patru opt p_vaddr Adresa virtuală a segmentului din memorie unde segmentul ar trebui să fie încărcat atunci când este mapat în memorie.
patru opt p_paddr Adresa fizică a segmentului (pentru sistemele în care este importantă).
patru opt p_filesz Dimensiunea segmentului din fișier. Poate fi nulă.
patru opt p_memsz Dimensiunea segmentului din memorie. Poate fi nulă.
patru p_flags Segmentează steaguri (pentru ELF32) (vezi mai sus pentru valori posibile).
patru opt p_align Alinierea segmentelor. 0și 1determina lipsa de aliniere. În caz contrar, trebuie să fie un 2 pozitiv într-o anumită măsură.

Tabel antet secțiuni

Tabelul antet secțiunii conține atributele secțiunii fișierului. Acest tabel este necesar doar de linker, fișierele executabile nu au nevoie de acest tabel (încărcătorul ELF îl ignoră). Informațiile furnizate în tabelul antet secțiunii sunt folosite de linker pentru a aranja optim aceste secțiuni în segmente la compilarea fișierului, ținând cont de atributele acestora.

Câmpurile antetului secțiunii
Marimea Nume Scop
ELF

32

ELF

64

patru sh_name Decalaj al liniei care conține numele acestei secțiuni, relativ la începutul tabelului de nume de secțiuni.
patru sh_type Tip antet.
Nume Sens Descriere
SHT_NULL 0 Titlul nu este folosit, restul câmpurilor nu sunt definite.
SHT_PROGBITS unu Secțiunea conține informații definite de program, formatul și semnificația acestuia sunt determinate numai de program.
SHT_SYMTAB 2 Secțiunea conține tabelul cu simboluri. Nu poate exista decât o astfel de secțiune într-un fișier momentan.
SHT_STRTAB 3 Secțiunea conține un tabel de șiruri. Un fișier poate avea multe secțiuni de acest tip.
SHT_RELA patru Secțiunea conține informații extinse despre mișcări. Un fișier poate avea multe secțiuni de acest tip.
SHT_HASH 5 Secțiunea conține un tabel hash cu simboluri. Nu poate exista decât o astfel de secțiune într-un fișier momentan.
SHT_DYNAMIC 6 Secțiunea conține informații despre conectarea dinamică. Nu poate exista decât o astfel de secțiune într-un fișier momentan.
SHT_NOTE 7 Secțiunea conține informații care marchează fișierul într-un fel.
SHT_NOBITS opt Secțiunea nu ocupă spațiu în fișier, altfel este similară cu SHT_PROGBITS.
SHT_REL 9 Secțiunea conține informații despre mișcări. Un fișier poate avea multe secțiuni de acest tip.
SHT_SHLIB zece Acest tip de secțiune este definit, dar nu are o semnificație specifică.
SHT_DYNSYM unsprezece Secțiunea conține tabelul cu simboluri. Nu poate exista decât o astfel de secțiune într-un fișier momentan.
SHT_INIT_ARRAY paisprezece Secțiunea conține o serie de pointeri către funcțiile de inițializare a programului. Funcțiile nu trebuie să accepte argumente și să nu returneze nimic.
SHT_FINI_ARRAY cincisprezece Secțiunea conține o serie de pointeri către funcțiile de finalizare a programului. Funcțiile nu trebuie să accepte argumente și să nu returneze nimic.
SHT_PREINIT_ARRAY 16 Secțiunea conține o serie de pointeri către funcții care sunt apelate înainte ca funcțiile de inițializare a programului să fie apelate. Funcțiile nu trebuie să accepte argumente și să nu returneze nimic.
SHT_GROUP 17 Această secțiune definește un grup de secțiuni. Un grup de secțiuni este o colecție de secțiuni înrudite care trebuie tratate într-un mod special de către linker. Astfel de secțiuni pot fi doar în fișiere obiect relocabile (al căror câmp e_typeare valoarea ET_REL). Titlul care definește un grup de secțiuni trebuie să fie în tabelul de secțiuni înainte de titlurile tuturor secțiunilor incluse în grupul care este definit.
SHT_SYMTAB_SHNDX optsprezece O secțiune este asociată cu un tabel de simboluri și este necesară dacă orice element al acestui tabel se referă la un antet de secțiune care are un index SHN_XINDEX(acest lucru se întâmplă dacă indexul secțiunii este atât de mare încât nu se încadrează în câmpul st_shndx). Secțiunea conține o serie de numere de tip Elf32_Wordpentru ELF32 și Elf64_Wordpentru ELF64. Fiecare element al acestui tablou corespunde unei intrări în tabelul de simboluri și este plasat în ordinea corespunzătoare. Aceste elemente sunt indici ai titlurilor de secțiuni cărora le sunt asociate simbolurile corespunzătoare. Dacă valoarea câmpului st_shndxelementului corespunzător din tabelul de simboluri este SHN_XINDEX, elementul conține indexul antetului de secțiune real, în caz contrar, elementul conține 0.
SHT_LOOS-SHT_HIOS 1610612736 - 1879048191 Valori dependente de sistemul de operare.
SHT_LOPROC-SHT_HIPROC 1879048192 - 2147483647 Valori dependente de procesor.
SHT_LOUSER-SHT_HIUSER 2147483648 - 4294967295 Valori dependente de program. Aceste valori pot fi utilizate de manipulatorii de fișiere în format ELF fără a intra în conflict cu valorile definite în prezent.
patru opt sh_flags atributele secțiunii.
Nume Sens Descriere
SHF_WRITE 0x1 Permisiune de scriere.
SHF_ALLOC 0x2 Secțiunea ocupă memorie în timp ce procesul rulează. Unele secțiuni de serviciu nu sunt încărcate în memorie la încărcarea unui fișier obiect; pentru astfel de secțiuni, acest indicator este dezactivat.
SHF_EXECINSTR 0x4 Secțiunea conține instrucțiuni de mașină executabile.
SHF_MERGE 0x10 Datele dintr-o partiție pot fi combinate pentru a elimina dublarea. Dacă steagul SHF_STRINGSnu este setat, elementele de date din secțiune au aceeași dimensiune. Mărimea unui element este indicată în câmpul sh_entsize. Dacă indicatorul SHF_STRINGSeste setat, secțiunea constă din matrice de caractere terminate cu nul, iar dimensiunea unui caracter este specificată în câmpul sh_entsize.

Fiecare element dintr-o secțiune este comparat cu alte elemente din secțiuni cu același nume, tip și steaguri. Elementele care vor avea aceeași valoare în timpul execuției programului pot fi combinate. Mișcările care se referă la membrii unor astfel de secțiuni trebuie rezolvate în consecință. Înainte de îmbinare, toate elementele unei secțiuni trebuie analizate pentru a determina dacă valorile vor fi efectiv identice în timpul execuției.

Această asociere nu este o cerință pentru conformitatea ABI.

SHF_STRINGS 0x20 O secțiune constă din matrice de caractere terminate cu nul. Mărimea unui caracter este indicată în câmp sh_entsize.
SHF_INFO_LINK 0x40 Câmpul antet secțiunii sh_infoconține indexul intrării din tabelul antetului secțiunii.
SHF_LINK_ORDER 0x80 Cerințe speciale de locație. Cerințele se aplică dacă sh_linkcâmpul antet al secțiunii se referă la o altă secțiune (secțiune aferentă). Dacă sh_linkcâmpul secțiune legată nu conține 0, secțiunea curentă trebuie să fie în fișierul de ieșire în aceeași ordine în raport cu secțiunea legată, așa cum secțiunea legată este în raport cu secțiunea la care este legată.
SHF_OS_NONCONFORMING 0x100 Secțiunea necesită o gestionare specială, specifică sistemului de operare, pentru a preveni comportamentul incorect.
SHF_GROUP 0x200 Secțiune - un element (posibil singurul) al unui grup de secțiuni
SHF_TLS 0x400 Secțiunea conține Thread-Local Storage, fiecare thread va avea propria sa copie a acestei secțiuni.
SHF_COMPRESSED 0x800 Secțiunea conține date comprimate. Acest flag se aplică numai secțiunilor pentru care memoria nu este alocată la încărcarea unui fișier obiect în memorie. Steagul nu este folosit în combinație cu SHF_ALLOC. Acest steag nu se aplică nici secțiunilor de tip SHT_NOBITS.

Toate mișcările legate de o secțiune comprimată se referă la datele acesteia în starea necomprimată. Prin urmare, decompresia secțiunii este necesară pentru a permite mișcarea. Fiecare secțiune comprimată își definește propriul algoritm de compresie. Este acceptabil ca diferite secțiuni dintr-un fișier obiect ELF să utilizeze diferiți algoritmi de compresie.

Secțiunile comprimate încep cu un antet care identifică algoritmul de compresie.

Câmpuri de antet de secțiune comprimate
Marimea Nume Scop
ELF

32

ELF

64

patru patru ch_type algoritm de compresie.
Nume Sens Descriere
ELFCOMPRESS_ZLIB unu Datele din secțiune sunt comprimate folosind algoritmul Zlib . Datele comprimate urmează imediat după antet și înainte de sfârșitul secțiunii.
ELFCOMPRESS_LOOS-ELFCOMPRESS_HIOS 1610612736 - 1879048191 Valori dependente de sistemul de operare.
ELFCOMPRESS_LOPROC-ELFCOMPRESS_HIPROC 1879048192 - 2147483647 Valori dependente de procesor.
patru ch_reserved Rezervat pentru utilizare ulterioară.
patru opt ch_size Dimensiunea în octeți a secțiunii decomprimate.
patru opt ch_addralign Alinierea necesară pentru secțiunea decomprimată.
SHF_MASKOS 0x0ff00000 Toți biții incluși în acest câmp definesc valori dependente de sistemul de operare.
SHF_MASKPROC 0xf0000000 Toți biții incluși în acest câmp definesc valori specifice procesorului.
patru opt sh_addr Dacă secțiunea urmează să fie încărcată în memorie atunci când fișierul obiect este încărcat, acest câmp specifică adresa de la care se va încărca secțiunea, în caz contrar câmpul conține 0.
patru opt sh_offset Secțiunea decalată de la începutul fișierului în octeți. Secțiunile de tip SHT_NOBITSnu ocupă spațiu în fișier; pentru ele, acest câmp conține locația conceptuală din fișier.
patru opt sh_size Dimensiunea secțiunii în fișier. Poate fi nulă.
patru sh_link Indexul secțiunii asociate. Acest câmp poate avea scopuri diferite în funcție de tipul antetului. Interpretarea câmpurilor sh_linkși sh_infoîn funcție de valoarea câmpuluish_type
sh_type sh_link sh_info
SHT_DYNAMIC Indexul antetului secțiunii tabelului de șiruri care este utilizat de elementele acestei secțiuni. 0
SHT_HASH Indexul antetului secțiunii tabelului de simboluri căreia îi aparține acest tabel hash. 0
SHT_REL,SHT_RELA Indexul antetului de secțiune al tabelului de simboluri asociat. Indexul antetului secțiunii la care urmează să fie aplicate datele de relocare.
SHT_SYMTAB,SHT_DYNSYM Indexul antetului de secțiune al tabelului de șiruri asociat. Unul mai mult decât indexul ultimului simbol local ( STB_LOCAL) din tabelul de simboluri.
SHT_GROUP Indexul antetului de secțiune al tabelului de simboluri asociat. Indicele elementului din tabelul de simboluri asociat. Numele elementului specificat furnizează semnătura grupului de secțiuni.
SHT_SYMTAB_SHNDX Indexul antetului de secțiune al secțiunii asociate tabelului de simboluri. 0
patru sh_info Informații suplimentare despre secțiune (vezi mai sus pentru valorile posibile).
patru opt sh_addralign Alinierea secțiunii necesară.
patru opt sh_entsize Dimensiunea în octeți a fiecărei intrări (dacă secțiunea conține o matrice de intrări de dimensiune fixă, în caz contrar câmpul conține 0).

Conținutul secțiunilor și segmentelor

Utilități

Există multe utilitare pentru lucrul cu fișierele ELF, cele principale sunt conținute în setul de instrumente software GNU Binutils :

Vezi și

Note

  1. System V Application Binary Interface Arhivat 21 mai 2015 la Wayback Machine Edition 4.1 (1997-03-18 )
  2. Specificația ELF Arhivată pe 16 iunie 2012 la  Wayback Machine
  3. ELF-64 Object File Format Arhivat la 1 iulie 2015 la Wayback Machine
  4. FreshPorts -- devel/elfutils . www.freshports.org. Preluat la 31 martie 2018. Arhivat din original la 16 februarie 2018.

Link -uri