You are on page 1of 60

I

Executable and Linkable Format (ELF)


Contents

Preface

1 OBJECT FILES
Introduction 1-1
ELF Header 1-3
Sections 1-8
String Table 1-16
Symbol Table 1-17
Relocation 1-21

2 PROGRAM LOADING AND DYNAMIC LINKING


Introduction 2-1
Program Header 2-2
Program Loading 2-7
Dynamic Linking 2-10

3 C LIBRARY
C Library 3-1

I Index
Index I-1

              ! " #$ " &%(')" +*, *
i
ELF: Executable and Linkable Format

      ! " # " &%(')" -*, *        
ii
Figures and Tables

Figure 1-1: Object File Format 1-1


Figure 1-2: 32-Bit Data Types 1-2
Figure 1-3: ELF Header 1-3
Figure 1-4: e_ident[ ] Identification Indexes 1-5
Figure 1-5: Data Encoding ELFDATA2LSB 1-6
Figure 1-6: Data Encoding ELFDATA2MSB 1-6
Figure 1-7: 32-bit Intel Architecture Identification, e_ident 1-7
Figure 1-8: Special Section Indexes 1-8
Figure 1-9: Section Header 1-9
Figure 1-10: Section Types, sh_type 1-10
Figure 1-11: Section Header Table Entry: Index 0 1-11
Figure 1-12: Section Attribute Flags, sh_flags 1-12
Figure 1-13: sh_link and sh_info Interpretation 1-13
Figure 1-14: Special Sections 1-13
Figure 1-15: String Table Indexes 1-16
Figure 1-16: Symbol Table Entry 1-17
Figure 1-17: Symbol Binding, ELF32_ST_BIND 1-18
Figure 1-18: Symbol Types, ELF32_ST_TYPE 1-19
Figure 1-19: Symbol Table Entry: Index 0 1-20
Figure 1-20: Relocation Entries 1-21
Figure 1-21: Relocatable Fields 1-22
Figure 1-22: Relocation Types 1-23
Figure 2-1: Program Header 2-2
Figure 2-2: Segment Types, p_type 2-3
Figure 2-3: Note Information 2-4
Figure 2-4: Example Note Segment 2-5
Figure 2-5: Executable File 2-7
Figure 2-6: Program Header Segments 2-7
Figure 2-7: Process Image Segments 2-8
Figure 2-8: Example Shared Object Segment Addresses 2-9
Figure 2-9: Dynamic Structure 2-12
Figure 2-10: Dynamic Array Tags, d_tag 2-12
Figure 2-11: Global Offset Table 2-17
Figure 2-12: Absolute Procedure Linkage Table 2-17
Figure 2-13: Position-Independent Procedure Linkage Table 2-18
Figure 2-14: Symbol Hash Table 2-19
Figure 2-15: Hashing Function 2-20
Figure 3-1: libc Contents, Names without Synonyms 3-1
Figure 3-2: libc Contents, Names with Synonyms 3-1
Figure 3-3: libc Contents, Global External Data Symbols 3-2

              #! $" " &%(')" +*, *
iii
Preface

ELF: Executable and Linking Format


.0/2143657198;:0<>=@? AB14=C2DFE0GBC2HIGBC2JLKIM(NOP=<2QR=STM NGBJ GBCU=ABABVD61&WX19ABM Y19DF=C2DFY:Z? ABGBS@/U1&D-?VL[]\R^`_baZVIS@<c19OdE0=@? M(N=e
<cM(NGB19STf`[]aE0gU=STY=N<2M(hU<c/214i+YYABGB8;=<cGBM CRj0GBCU=N$VL^`C2<c1&Nhc=814fci+j0^`glkT.0/214.6M(M A(^`C2<c19N$h`=8;14a<c=C2D0=N$D0S8M(OmOPGB<c<>191
fc.6^cag2/2=SS@19AB198<>19DF<c/21419WXM(ABWXGBC2JL30E0KLS@<c=C2D0=NDF=ST=nY0M(N<>=@? AB14Mo?Ipq198;<2rA 14hcM(NOP=<2<c/2=<2QRM N$HISTM CRsteu? GB<2^cC2<c19A
i+N$8/2GB<c1&8<>:0N$1v1&CUWIGBNM(CUOP19C2<cSTh`M(Nw=xWI=NGB19<>VLM h2M Y19N=<>GBC2JLSyV Sy<>19OmSk
.0/21436E0KSy<>=C2D6=N$DFGBSGBC2<c19C2D019DF<>MS@<cN1&=OmABGBC214S@M hc<cQR=N14D019WI19ABM YOP19C2<?VLYNM(WXGBD0GBC2JLD019WI19ABM Y19N$SQRGB<c/R=nSy1&<2M h
?GBCU=N$VLGBC2<c19N$hc=814D019rC2G <>GBM C2ST<c/2=<21957<c19C2DF=8N$M S@SOP:AB<cGBYAB14M Y19N$=<cGBC2JL19C2WIG N$M C2OP19C2<cSk@.6/2GBSTSy/2M :ABDFN19D0:8;14<c/21
C2:OL?19NwM(hUD0GBhchc19N19C2<2GBC2<c1&Nhc=814GBOPYAB19OP19CU<>=<cGBM(CUS@z<c/219N$1? VN19D0:8GBC2JL<>/214CU1&19D{hcM N N198;M D0GBC2JL=C2DFN198;M OPYGBABGBC2J
8;M D01Ik

About This Document


.0/2G STD0M 8;:Om19C2<XGBSGBC2<c19C2D019DFhcM N D019WX19ABM(Y01&NSTQ|/2M=N$148;N19=<>GBCUJM&? p>1&8<XM Nw1&5Z198;:0<>=@? AB14rAB19STM CRWX=N$GBM :Ssteu?GB<
19C2WXGBN$M C2OP19C2<2M Y19N=<>GBC2JLSyV Sy<>19OmSk^c<2GBSD0GBWIG D01&D{GBC2<cM-<c/214hcM ABABM QRGBC2JL<c/2N$1914Y=N<cS}
~=N<2z€€‚)?Ipq198;<2KIGBAB19S@ƒƒD019S@8N$G ? 19ST<c/21430E0KLM&? p>1&8<2rAB14h`M(NOP=<2hcM Nw<>/21v<>/2N1914OP=GBC|<>VIY19SM(hUMo?Ipq198;<2r0AB19Sk
~=N<Utz7€„€~0N$M J N=O E0M =D0GBC2JL=C2DF†]VIC2=OPGB8)E0GBC2HIGBC2J ƒƒD019S@8N$G ? 19ST<c/214M&? pq198<Xr0AB14GBC2hcM NOP=<>G M(CR=CUDFS@VIS@<c19O
=8;<cGBM C2S<>/U=<28;N1&=<c14N:C2CUGBC2JLYNM(JIN$=OmSk
~=N<2sz7€€‡ˆE0G ?N$=NV ƒƒA GBS@<cST<>/U1‰SyV OL?M ABST8;M C2<c=GBC219DFGBC z<c/21vS@<c=C2D0=N$D{i+\RaZ^|‡ˆ=C2D NM(:<cGBC219Syz
=C2DF<c/214JIABM&?=A(D0=<c=nS@VIO? M(ABSN$19ŠI:0GBN$19D+? V<c/21 NM(:<cGBC219S7k
libsys libc
libc

References to X86 architecture have been changed to Intel Architecture.


NOTE

              ! " #$ " &%(')" +*, *
1
1 OBJECT FILES

Introduction 1-1
File Format 1-1
Data Representation 1-2

ELF Header 1-3


ELF Identification 1-5
Machine Information 1-7

Sections 1-8
Special Sections 1-13

String Table 1-16

Symbol Table 1-17


Symbol Values 1-20

Relocation 1-21
Relocation Types 1-22

              ! " #$ " &%(')" +*, *
i
Introduction
~=N<2nD019S@8;NG ?19S<>/U14GBi]j6^2M&? p>198;<2rAB14hcM NOP=<>z78;=ABAB19DF30E0KLfc3657198;:0<>=@? AB14=C2DFE0GBCUH GBC2JLKIM(NOP=<cglkT.0/U19N$1v=N$1v<>/UN$191
OP=GBC|<>VIY19STM h2M&? pq198<Xr0AB19Sk
iŒ‹$$Ž;l‘;’c‘“oŽ9”Ž /2M ABD0S8;M D014=C2DFD0=<c=nS@:0GB<>=@? AB14hcM N ABGBCUH GBCUJQ|GB<>/|M(<c/219NwMo? p>198;<2rA 1&S<cM-8N$19=<c14=CR1957198:<ce
=@?AB14M Nw=nS@/2=N19DFM&? pq198<2rAB1Ik
i+CR$•$–I’c‘“oŽ—”Ž /2M ABD0S=nYN$M J N=OdSy:GB<c=@?AB14h`M(Nw1957198:<>G M(C2˜<c/214r0AB14S@Y198GBr19S/2M Q fcj0i ‚-aZgU8N$19=<c19S
_
=nYNM J N=OPƒSTY0N$M 8;19S@SGBOm=J 1Ik exec

iŒ™$š‘;‹$$›n“œžl’y”Ž /2M ABD0ST8M(D61‰=CUDFD0=<c=nS@:GB<c=@?AB14h`M(NwABGBC2HIGBC2JLGBCR<cQRM8;M C2<>195Z<cSkK GBNS@<cz<c/214ABGBCUH19D0G <>M N‰Ÿ S@191


fca† ‡¢¡£†+gc¤UOP=VLYN$M 8;19SySTGB<2Q|GB<>/|M(<c/219NwN$19ABM 8;=<c=@?AB14=CUDFS@/2=N19DFM&? pq198<2rAB19S<>M8;N19=<>1v=C2M(<c/219NwMo?Ipq198;<
ld
r0AB1 ka19_8;M C2D0z<c/214D0V CU=OPGB8¥A GBC2H 19Nw8;M O?G C219STGB<2QRGB<c/R=CR195Z198;:<c=@?AB14r0AB14=C2DFM <>/U19N S@/U=N$19DFM&? pq198<>S<>M
8;N19=<>14=xYN$M 8;19SySTGBOm=J 1Ik

‡¢N$19=<c19D+? VL<>/21v=S@S@19OL?AB19Nw=C2DFABG C2HL19D0GB<>M NzMo?Ipq198;<2r0AB19S=N$1w? GBC2=NVN19YN$19Sy19C2<>=<cGBM C2SM(hUYNM(JIN$=OmSTGBCU<>19C2D019D{<>M


1957198:<c14D0GBN198;<cABVLM(C|=xYN$M 8;19S@SyM(N9k~NM(JIN$=OmST<c/2=<XN19ŠI:GBN1‰M <c/219N =@?Sy<>N=8;<2OP=8;/UGBC219S@zSy:8;/R=SS@/219ABA(Sy8;NGBY<>Syz=N$1
19578AB:D019D¥k
i+hc<c19N <c/214GBCU<>NM(D0:08;<cM(NVLOP=<c19N$GB=ABz7~=N$<2xhcM 8;:Sy19STM CR<c/214r0AB14hcM NOP=<2=C2DF/UM(Q¦GB<2Y19N$<c=GBC2S<cM¢? :GBABD0GBCUJY0N$M e
JIN$=OPS7k~=N$<2tn=ABSyMD019S@8;NG ?19SY=N$<cSM(hU<>/21vMo? p>198;<2rAB19z78;M C28;19C2<cN$=<cGBC2JLM CR<c/214GBC2hcM NOP=<>G M(C|C2198;19S@Sy=N$VL<cM-195Z198;:<c1
=xY0N$M J N=Oˆk

File Format
‚¢? pq198<Xr0AB19SY=N$<cGB8;GBY=<c14GBC|YN$M JIN$=O§ABGBC2HIGBC2JLfu?:0GBABD0GBC2JL=nYNM(JIN=OPg2=CUDFYNM(JIN$=O§1957198:<>G M(C|fcN$:0C2C2GBC2JL=nY0N$M e
JIN$=OPg@kKIM N 8;M C2WX19C2GB19C28;14=C2DF19h`r8;G 1&CU8;VIz<>/214M&? pq198<Xr0AB14hcM N$OP=<2YN$M WXGBD019STY=N=ABAB19A(WIGB19Q|STM(hU=nrAB19ƒST8M(C2<c19C2<cS@z
N1&¨0198;<cGBC2JL<c/214D0GBhch`1&NGBC2JLC21919D0STM h2<c/219S@14=8<>GBWXGB<cGB19SkKIGBJ :0N$14ecnSy/2M QRST=C|Mo? p>198;<2rAB19ƒSTM NJ =C2GB©=<cGBM Cªk

Figure 1-1: Object File Format


E0GBC2HIGBC2J«4GB19Q 305Z198;:0<>GBM C¬«4GB19Q
______________________ _______________________
30E0KL/U19=D019N
______________________  30E0KL/U19=D019N
_______________________ 
 ~NM(JIN=O§/219=D019Nw<c=@?AB1   ~0N$M J N=Od/219=D019Nw<c=@?AB1 
 ;­’`®„¯ ‘Ž   
______________________ _______________________
a1&8<>GBM C|
______________________   
kkk a1&JIOP19C2<U
   
______________________
a1&8<>GBM C|¯  _______________________
______________________ kkk   a1&JIOP19C2<Ut 
   
______________________ kkk  _______________________kkk 
______________________ _______________________
 a1&8<>GBM C|/219=D019Nw<c=@?AB1   aZ198<>GBM CR/219=D019Nw<c=@?AB1 
   ;­’`®„¯ ‘Ž 
______________________ _______________________

i+CR°0±I²Lš$‘;›$‹ N1&SyGBD019ST=<2<c/21w?19JIGBC2C2G C2JL=C2DF/2M ABD0S=n€€„NM(=D{OP=YƒƒD019S@8N$G ? GBC2JL<>/U14rAB19ƒSTM NJ =C2GB©=<cGBM CªkT³Il´


’c®;¯I™ /2M ABDF<c/21w?:A HM h2M&? pq198<Xr0AB14GBC2h`M(NOP=<cGBM(C|hcM(Nw<c/214ABGBC2HIGBC2JLWIGB19Qb}@GBC2S@<cN$:08;<cGBM(CUS@zD0=<c=zS@VIO?M A(<c=@?AB19zN19ABM(8=e
<cGBM(C|GBC2hcM N$Om=<>GBM C2z=CUDFS@MM Cªkª†+19S@8;NGBY<cGBM(CUSTM h2S@Y198GB=A(S@198<>GBM C2ST=Y0Y19=N AB=<c19N GBCR~0=N$<22kT~0=N$<XtvD0GBS@8:S@Sy19ST™$qµ2´
¶ $¯ ’`™ =C2D{<>/21vYN$M J N=Od195Z198;:<cGBM CRWXGB19Q·M hU<>/214r0AB1Ik

              ! " #$ " &%(')" +*, *
1-1
ELF: Executable and Linkable Format

iŒ­‹$žµ2‹$‘ ¶ š$‘;›$‹’`‘;“oŽ&zGBhUYN$19Sy1&CU<>z<c19ABABST<c/214SyV Sy<>19O§/2M(Q¦<>M8N$19=<c14=nYN$M 8;19SySTGBOP=JI1IkTK G AB19ST:Sy19DF<>M‰?:GBA DF=vY0N$M e


8;19SySTGBOm=J 14f`1957198;:0<>14=xYN$M J N=OPgUOP:Sy<X/U=WI14=nYNM J N=Od/219=D019Nw<>=@? AB19˜N$19ABM 8;=<c=@?AB1vrAB19SD0M-CUM(<2C21919DFM C21IkTi
™$$’`®;¯š$‘›$‹’`‘;“oŽ 8;M C2<c=GBC2STGBCUhcM N$OP=<cGBM CRD019S@8N$G ?G C2J<c/214rAB19ƒSTSy198;<cGBM(CUSkT36WI19N$VLS@198<>GBM CR/2=S=CR19C2<cN$VLGBCR<c/21
<c=@?AB19˜19=8;/R19C2<cN$VLJ G WI19STGBCUhcM(NOP=<cGBM CRS@:8/R=ST<c/214S@198;<cGBM CRC2=OP19z<c/214S@198;<cGBM CRS@GB©19z19<c8ZkTKIGBAB19ST:S@19DFD0:0N$GBC2JLABGBC2HIe
GBC2JLOP:0S@<2/2=WI14=xS@198;<cGBM CR/219=D019Nw<>=@?A 1&˜7M(<c/219NwMo? p>198;<2rAB19SOP=VLM(NwOP=VLC2M <2/2=WI14M C21Ik

Although the figure shows the program header table immediately after the ELF header, and the section
NOTE header table following the sections, actual files may differ. Moreover, sections and segments have no
specified order. Only the ELF header has a fixed position in the file.

Data Representation
i+STD019Sy8;NG ?19DF/219N1&z7<>/214M&? p>1&8<2rAB1X¸;;‹ ¶ ‘;’2S@:0YYM(N<cSTWI=NGBM(:0STYNM(81&SyS@M N$SQRGB<c/R¹eu?GB<?VI<>19ST=CUDFsteu?GB<2=N$8/2GB<>198e
<c:N$19S7kT\R19WI19N<>/219AB19SyS@zGB<2GBSGBC2<c19C2D019DF<cM‰?14195Z<>19C2SyG ?AB14<cMAB=N$JI19NwfcM N SyOP=ABAB19Ng2=N8;/2GB<c198;<c:N19SkT‚)?Ipq198;<2r0AB19S<>/219N19e
hcM N$14N19YN$19Sy19C2<2S@M OP148;M C2<cN$M A(D0=<c=nQRGB<c/R=xOP=8;/2G C219ecGBC2D019Y19C2D61&CU<Xh`M(NOP=<czOP=HIGBC2JLGB<2YM(SyS@G ? AB14<>MGBD019C2<cGBhcV
M&? pq198<Xr0AB19ST=CUDFGBC2<c19N$YN19<X<c/219GBNw8;M C2<c19C2<>SGBCR=n8M(OmOPM CRQR=V kTºT1&Om=GBC2GBC2JLD0=<c=nGBCR=CRMo?Ipq198;<2rA 1‰:0S@14<>/U141&CU8;M D0e
GBC2JLM h2<c/214<c=N$JI19<XYNM 8;19S@SyM(NzN$19JI=N$D6AB19S@STM hU<>/214Om=8;/2GBCU14M(C|QR/2GB8/R<c/214rA 14QR=S8;N$19=<c19D¥k

Figure 1-2: 32-Bit Data Types


\R=OP1 aZGB©1 i+ABGBJIC2OP19C2< ~:0N$YM S@1
_____________________________________________________________
Elf32_Addr  »  »t  [+C2S@GBJIC219D{YN$M J N=O§=D0D0N$19SyS
 t   [+C2S@GBJIC219DFOP19D0G :OdGBCU<>19JI19N
Elf32_Half
   [+C2S@GBJIC219DFr0AB14M hchcSy1&<
Elf32_Off  »  »  aZGBJIC219D{AB=NJ 1vGBCU<>19JI19N
Elf32_Sword  »  »  [+C2S@GBJIC219D{AB=NJ 1vGBCU<>19JI19N
Elf32_Word  »  » 
   [+C2S@GBJIC219DFSyOP=ABA(GBCU<>19JI19N
unsigned char  
_____________________________________________________________
  

i+ABA(D0=<c=nS@<cN$:08;<c:N1&S<c/2=<2<>/214M&? p>198;<2rAB14h`M(NOP=<2D019rCU1&ShcM ABABM Q·<c/214€€C2=<c:N$=ABƒƒSyGB©14=C2DF=ABGBJIC2OP19CU<XJI:GBD019ABGBCU19S


hcM N <c/214N1&A 1&WX=C2<28;AB=SySkT^`h2C219819S@S@=NV z7D0=<>=nSy<>N:8<>:N19ST8M(CU<>=GBC|1957YABGB8GB<2Y=D0D0GBC2JL<cM-19C2Sy:N1 eu?VI<>14=A GBJ C2Om19C2<2hcM N
eu? V <c14Mo?Ipq198;<cS@z<cMhcM N$814S@<cN$:8<>:0N$14SyGB©19ST<cM-=nOm:AB<cGBYAB14M h z19<c8ZkT†]=<c=n=ABS@M/2=WX1‰Sy:GB<c=@?AB14=AB» GBJIC2OP19C2<2hcNM(Od<c/21
»?19JIGBC2C2GBCUJM hU<>/21vrAB1Ikª.0/2:0S@zhcM Nw1957=OmYAB19z=nS@<cN$:08;<c:N148;M » C2<>=G C2GBC2JL=C OP19O? 19N QRGBABAo?14=ABGBJIC219D
M CR= eu? V <c1w?M :C2D6=N$VLQRGB<c/2GBC|<>/21vrAB1Ik Elf32_Addr
»
KIM(NwYM N$<c=@?GBABGB<cVLN$19=SyM(C2Syz30E0KL:0S@19SC2M‰?GB<cecr19ABD6Sk

      ! " # " &%(')" -*, *        
1-2
ELF Header
aM(OP14M&? p>198;<2rAB148M(C2<cNM(A(Sy<>N:8<>:N19ST8=CRJIN$M QRz@?198=:S@14<c/21430E0KL/219=D019Nw8;M C2<c=GBC2ST<c/219GBNw=8;<c:=A(SyGB©19SkT^`h2<c/21
M&? pq198<2rAB1vhcM(NOP=<28/2=C2JI19S@z=xYN$M JIN$=O§OP=VL19C28M(:0C2<>19Nw8M(C2<cNM(A S@<cN$:8<>:0N$19S<c/2=<2=N$1vAB=N$JI19NwM(NwSyOP=ABAB19Nw<c/2=C
1957Y01&8<>19D¥k¥~NM(JIN$=OmSOPG J /2<U<c/219N$19hcM N1vGBJ C2M N1v€„€195Z<>N=ƒƒ(GBC2hcM N$Om=<>GBM CªkT.0/214<cN$19=<cOP19C2<2M h2€€OPGBSyS@GBC2JIƒƒGBC2hcM N$Om=e
<cGBM(CRD61&Y01&CUD0STM CR8;M C2<c1&5Z<2=C2DFQRGBABAo? 14S@Y198;G r19DFQR/U1&C|=C2DFGBh2195Z<>19C2SyGBM(CUST=N$14D019r0C219D¥k

Figure 1-3: ELF Header

#define EI_NIDENT 16

typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;

.0/214GBCUGB<>GB=Ao? V <c19STOm=N$HL<>/214r0AB14=ST=CRM&? pq198<Xr0AB14=C2DFYNM(WXGBD014OP=8;/UGBC219ecGBC2D019Y19CUD019C2<XD0=<c=


e_ident
QRGB<c/RQ|/2GB8/R<>MD0198M(D014=CUDFGBC2<c19N$YN19<X<c/214r0AB19ƒST8;M C2<c19C2<cSk‡)M OPYA 1&<c14D019S@8N$GBY<cGBM C2ST=YY01&=N
?19ABM QRz7GBC|€„€30E0KL^`D019C2<cGBr08;=<cGBM(Cªk ƒƒ
.0/2G STOP19OL?19N GBD61&CU<>GBr019ST<c/214M&? pq198<Xr0AB14<>VIY1Ik
e_type
\R=OP1 «‰=AB:1 ¡¼19=C2GBC2J
________________________________________
 \RMLrAB1v<>VIY1
ET_NONE 0 
 ºT19ABM(8=<>=@? AB1vrAB1
ET_REL 1 
  305Z198;:<c=@?AB1vrAB1
ET_EXEC 2 
 a/2=N$19D{Mo?Ipq198;<UrAB1
ET_DYN  3 
‡¢M(N1nrAB1
ET_CORE  4 
~NM(819S@SyM(NecS@Y198GBr8
ET_LOPROC  0xff00 
ET_HIPROC 0xffff   ~NM(819S@SyM(NecS@Y198GBr8
________________________________________
 
i+AB<>/UM(:0J /|<>/U148;M N$1vrAB148M(CU<>19C2<cS=N$1v:C2S@Y01&8GBr19D0z7<>VIY1 GBSN$19Sy19N$WX1&D{<cMOP=N$HL<c/21
r0AB1 kT«‰=AB:019STh`N$M O <c/2N$M :JI/ fcET_CORE
GBCU8;AB:SyGBWI19g2=N1‰N19S@19N$WX19DFhcM N
YNM(81&SyS@M N$e`S@Y198;G r8ET_LOPROC
S@19OP=CU<>GB8Sk‚-<>/U19N WI=AB:0 19ST=N$14N$19Sy19N$WX19D½=CUDFQRGBABAo?14=S@SyGBJIC219DF<>MC219Q
ET_HIPROC
M&? pq198<Xr0AB14<>VIY19ST=SC2198;19S@Sy=N$V k

              ! " #$ " &%(')" +*, *
1-3
ELF: Executable and Linkable Format

.0/2G STOP19O? 1&NƒSTWX=AB:14S@Y198;GBr019ST<c/214N$19ŠI:GBN19DF=N$8/2GB<c1&8<>:0N$14hcM N =CRGBC2D6GBWIGBD0:0=A(rAB1Ik


e_machine
\R=OP1 «‰=AB:1 ¡¼19=C2GBC2J
____________________________________
R
\ -
M P
O =8/2GBC21
EM_NONE  0 
 1  +
i 0
. +
¾ F
. ¿À3FstÁÁ
EM_M32
  
a 
~ +
i ª
º ‡
EM_SPARC  2  ^`C2<>19A ¹Ás¹Â
EM_386  3  ¡¼M(<cM(NM(A =]¹ÁÁÁ
EM_68K  4 
EM_88K  5  ¡¼M(<cM(NM(A =]¹¹ÁÁÁ
EM_860  7  ^`C2<>19A ¹Á¹ÂÁ
  ¡¼^c~0a-ºTaZsÁÁÁ
EM_MIPS 8
____________________________________
 
‚-<>/219NwWI=AB:19S=N$14N$19S@19NWI19DF=C2DFQ|GBABAo?14=S@S@G J C219DF<cM-C219Q·Om=8;/2GBC219S=STC2198;19SyS@=N$V k
~NM(819S@SyM(NecS@Y198GBr8¥36E0KC2=OP19ST:0S@1‰<c/214OP=8;/UGBC21‰CU=OP1‰<cM-D0GBSy<>G C2J :0GBS@/R<c/219OˆkKIM N 195Z=OPYAB19z
<c/214¨0=J SOP19C2<cGBM C219D+?19ABM Q¦:S@14<c/214Y0N$19r5 ˜=n¨0=JLC2=OP19D hcM Nw<c/21
OP=8/2GBC21‰Q|M(:0ABD]?1‰8=ABAB19D EF_
k WIDGET EM_XYZ
EF_XYZ_WIDGET
.0/2G STOP19O? 19N GBD019C2<cGBr19S<>/U1‰M&? p>198;<Xr0AB14WI19NS@GBM Cªk
e_version
\R=OP1 «‰=AB:1 ¡¼19=C2GBC2J
______________________________________
EV_NONE  0  ^`C2WI=ABG D½WI19NS@GBM C
EV_CURRENT 1   ‡¢:NN$19C2<UWI19NS@GBM C
______________________________________
 
.0/21‰WX=AB:1 S@GBJIC2GBr019ST<c/214M N$GBJIGBC2=A(r0AB14hcM N$Om=<>˜195Z<>19C2SyGBM C2STQ|GBABA(8;N19=<>14CU19Q·WX1&NS@GBM C2SQRGB<c/
/2GBJI/219N C2:0O1?19NSkT.0/214WI=AB:01‰M h z<c/2M(:0J /RJIGBWX1&C|=S =@?M WI19zQRGBABA(8;/2=CUJ 14=S
C2198;19SyS@=NVL<>MN1&¨0198<X<c/2148:NN$19C2<2EV_CURRENT WX1&NS@GBM CRCU:O? 1&N9k 1

.0/2G STOP19O? 19N JIGBWI19S<>/214WXGBN$<c:=A(=D0D0N19S@S<>MQR/2GB8/R<c/214S@VIS@<c19OdrNS@<2<>N=C2S@h`19N$S8;M C2<>NM(A z<>/2:0S


e_entry
S@<c=N$<cGBC2J¬<>/21vYN$M 8;19SySkT^`h2<c/214rA 14/2=STCUM-=SyS@M 8;GB=<c19DF19C2<cN$VLYM GBC2<cz<>/2G STOP19OL?19N /UM(ABD0S©19N$Mk
.0/2G STOP19OL?19N /UM(ABD0S<>/U14YN$M J N=Od/219=D019Nw<c=@?AB19ƒSTr0AB14M(h`hcS@19<2GBCn? V <c19SkT^`h2<c/214rAB14/U=STC2M
e_phoff
YNM(JIN$=O§/219=D019Nw<>=@? AB19z<c/2GBSOP19O? 1&Nw/2M ABD0S©19N$Mk
.0/2G STOP19O? 19N /2M ABD0ST<c/214S@198<>GBM CR/219=D019Nw<>=@?A 1&ƒSrAB14M hchcSy1&<2GBCn? V <c19SkT^`h2<>/U1‰r0AB14/2=STCUM-S@198e
e_shoff
<cGBM(C|/219=D019N <c=@?AB19z7<>/2GBSOP19OL?19N /UM(ABD0S©19N$Mk
.0/2G STOP19O? 1&Nw/2M ABD0STYN$M 8;19SyS@M N$e`S@Y198;GBr08¥¨0=JIST=S@SyM(8GB=<>19DFQRGB<c/R<c/214rAB1IkK AB=JLC2=Om1&S<c=H 1
e_flags
<c/214h`M(NO ‘;lš®¯  ‘žµwkaZ191v€„€¡¼=8;/2GBCU14^`C2hcM N$Om=<>GBM C2ƒƒh`M(Nw¨0=JLD019r0C2GB<cGBM(CUSk
EF_¶ _Ã
.0/2G STOP19O? 19N /2M ABD0ST<c/21430E0K/219=D019NƒSTS@GB©14GBCn? V <c19Sk
e_ehsize
.0/2G STOP19OL?19N /UM(ABD0S<c/214S@GB©14GBCx?VI<>19SM(hUM(C21419CU<>NVGBC|<>/U14rAB19ƒSTYNM J N=Od/219=D019Nw<>=@? AB19˜=ABA
e_phentsize
19C2<cN$GB19S=N$14<c/214S@=Om14S@GB©1Ik
.0/2G STOP19OL?19N /UM(ABD0S<>/U14C2:O? 19N M h219C2<cN$GB19SGBCR<c/214YN$M JIN$=Od/U19=D019N <c=@?AB1Ikª.0/2:0ST<c/214Y0N$M e
e_phnum
D0:8<XM h =C2D JIGBWI19ST<c/214<>=@? AB19ƒSTS@GB©14GBCn? V <c19SkT^`h2=nr0AB14/2=SC2MYN$M e
JIN$=O§/219e_phentsize
=D019Nw<c=@?AB19z /2M ABD0ST<c/214WX=AB:14©19N$Mk
e_phnum
e_phnum
.0/2G STOP19O? 1&Nw/2M(A D0ST=nS@198;<cGBM C¬/U19=D019N$ƒSTS@G ©1‰GBCn? V <c19SkTiŒSy1&8<>G M(C|/219=D019N GBSM C21419C2<>NVLGBC
e_shentsize
<c/214S@198;<cGBM CR/219=D019Nw<>=@? AB19˜=ABA(19C2<cN$GB19S=N$14<c/214S@=Om14S@GB©1Ik
.0/2G STOP19O? 19N /2M ABD0ST<c/214C2:OL?19N M h219C2<cN$GB19SGBCR<>/U1‰Sy198;<cGBM(C|/219=D019N <c=@?AB1Ikª.0/2:0ST<c/214Y0N$M D0:8;<
e_shnum
M h =C2D JIGBWI19ST<c/214S@198<>GBM CR/219=D019Nw<>=@? AB19ƒ„SS@GB©14GBCn? V <c19SkT^`h2=xrAB1
/2=S C2M-Sy198;<cGBM(C|/219=D019N <ce_shnum
e_shentsize
=@?AB19z /2M ABD0ST<c/214WX=AB:14©19N$Mk
e_shnum

      ! " # " &%(')" -*, *        
1-4
ELF: Executable and Linkable Format

.0/2G STOP19O? 19N /2M ABD0ST<c/214S@198<>GBM CR/219=D019Nw<>=@? AB14GBC2D0195xM h2<c/21419C2<cN$VL=S@S@M 8;G =<>19DFQ|GB<>/R<c/214S@198e
e_shstrndx
<cGBM(C|C2=OP14Sy<>NGBC2JL<c=@?AB1IkT^`h2<c/214rAB14/2=SC2M-Sy198;<cGBM(C|C2=OP14S@<cN$G C2J<c=@?AB19z<c/2GBSTOm19O?19Nw/2M(A D0S
<c/21‰WX=AB:1 kaZ1914€€a1&8<>GBM C2Syƒ„ƒ(=C2DF€€aZ<cNGBC2JL.0=@?A 1&ƒƒ? 19ABM(Q¦hcM NwOPM N$1vGBC2hcM N$Om=e
<cGBM(Cªk SHN_UNDEF

ELF Identification
i+STOm1&CU<>GBM C219DF=@? M(WX19z30E0KLYN$M WIGBD019S=CRM&? pq198<Xr0AB14hcN=OP19QRM NH<cMS@:YYM N<XOm:AB<cGBYAB14YN$M 8;19SyS@M N$SyzOP:AB<cGBYAB14D0=<c=
19C28;M D0GBC2JIS@z=C2D½OP:0AB<>GBY0AB1‰8;AB=SyS@19SªM h2OP=8;/2G C219SkT.0MSy:YYM N$<2<>/UGBSTM&? p>1&8<2rAB14hc=OmGBABVIz<>/214G C2GB<>G =Ao?VI<>19SM(hU<>/21vrAB1
S@Y198GBhcVL/2M Q·<cM-GBCU<>19NYN$19<2<>/214r0AB19zGBC2D019Y19C2D61&CU<XM h2<c/214YNM(81&SyS@M N M CRQ|/2GB8;/R<c/214GBCUŠI:GBN$VLGBSOP=D014=C2DFGBC2D61&Y01&CUe
D019C2<2M h2<c/214r0AB19ƒ„SN$19Om=GBC2GBC2JL8;M C2<c19C2<cSk
.0/214G C2GB<>G =Ao?VI<>19SM(hU=CR30E0KL/219=D019N f`=C2DF=CRM&? p>198;<2rAB19gU8;M N$N19S@YM C2DF<cM-<c/21 OP19O? 19N&k
e_ident

Figure 1-4: e_ident[ ] Identification Indexes


\R=OP1 «‰=AB:1 ~:0N$YM S@1
___________________________________________
 KIGBAB1vGBD019C2<cGBr8=<>GBM C
EI_MAG0 0 
  KIGBAB1vGBD019C2<cGBr8=<>GBM C
EI_MAG1 1
  KIGBAB1vGBD019C2<cGBr8=<>GBM C
EI_MAG2 2 
 KIGBAB1vGBD019C2<cGBr8=<>GBM C
EI_MAG3  3 
KIGBAB1‰8;AB=SyS
EI_CLASS  4 
 †]=<c=n19C28;M D0GBC2J
EI_DATA 5 
  KIGBAB14WI19NS@GBM C
EI_VERSION 6
  a<>=N<2M(hUY=D6D0GBC2J4? V <c19S
EI_PAD 7 
 aGB©14M h
EI_NIDENT  16  e_ident[]
___________________________________________
 

.0/219Sy1‰GBCUD0195719ST=88;19S@SU? V <c19ST<c/2=<X/2M ABDF<>/U1‰hcM ABABM QRGBCUJWI=AB:019Sk


<cM
EI_MAG0 EI_MAG3
iŒrA 1&ƒSrNS@< ?VI<c19ST/2M ABDF=n€€OP=JIGB8)C2:O? 19N$zuƒƒGBD019C2<cGBhcVIGBC2JL<>/U14rAB14=S=CR30E0KLM&? pq198<2rAB1Ik
»
\R=OP1 «‰=AB:1 ~M S@G <>GBM C
_______________________________________
ELFMAG0  0x7f  e_ident[EI_MAG0]
ELFMAG1  ’E’  e_ident[EI_MAG1]
 
ELFMAG2  ’L’  e_ident[EI_MAG2]
ELFMAG3  ’F’  e_ident[EI_MAG3]
_______________________________________
 

.0/21vC2195Z<?VI<>19z zGBD019C2<cGBr01&S<>/U14rAB19ƒST8AB=S@SyzM(Nw8;=Y=8GB<>V k
EI_CLASS e_ident[EI_CLASS]

              ! " #$ " &%(')" +*, *
1-5
ELF: Executable and Linkable Format

\R=OP1 «‰=AB:1 ¡¼19=C2GBC2J


______________________________________
ELFCLASSNONE  0  ^`C2WI=ABG D|8;AB=SyS
ELFCLASS32  1  steu? GB<IM&? p>198;<cS
  Â eu? GB<IM&? p>198;<cS
_ELFCLASS64  »
_____________________________________
 2
.0/214r0AB14hcM N$Om=<XGBSD019S@GBJIC219DF<>M‰?14YM N$<c=@?AB14=OPM C2JLOP=8;/UGBC219STM h2WX=N$GBM :STSyGB©19S@zQ|GB<>/UM(:<
GBOPYM S@G C2J<c/214S@GB©19SM(h2<c/214AB=NJ 19S@<2OP=8/2GBC214M CR<>/214SyOP=ABAB19S@<lkª‡¢AB=SyS S@:0YYM(N<cS
OP=8/2GBC219STQ|GB<>/Rr0AB19ST=C2DFWXGBN$<c:=A(=D0D0N1&SySTS@Y0=8;19ST:Y½<cM JIGBJ =@? V <c19S@˜ELFCLASS32 GB<X:0S@19ST<c/21 ? =S@GB8¥<cVIY19S
D019rCU19DF=@?M WI1Ik »
‡¢AB=S@S GBSN$19S@19NWI19DFh`M(Nw eu?G <X=N8;/2GB<c198;<c:N19SkT^`<cST=YY19=N$=CU8;14/219N$14S@/UM(Q|ST/2M Q
pq198;<2rAB14Om=V8/2=C2JI19z@?:<2<>/U1‰Â » e ?GB<2hcM N$OP=<2GBSM(<c/219N$Q|GBS@14:CUS@Y198;G r19D¥k‚-<>/U19N68AB=S@Sy19S
<c/214Mo?IELFCLASS64
QRGBA Ao?14D019rC219DF=STCU1&819S@Sy=N$VIzQRGB<c/RD0GB» hchc19N19C2<—? =S@GB8¥<cVIY19ST=C2DFS@G ©1&ShcM N M&? pq198<XrA 1‰D0=<c=2k
j0VI<>1 S@Y198GBr19S<>/214D0=<c=n19C28;M D0GBC2JLM h2<c/214YN$M 8;19S@SyM(NecSyY198;GBr08¥D0=<c=nGBC
EI_DATA
<c/214M&? e_ident[EI_DATA]
pq198<2rAB1IkT.0/214h`M(ABABM QRGBCUJL1&CU8;M D0GBC2JIST=N148;:0N$N19C2<>ABVLD019r0C219D¥k
\R=OP1 «‰=AB:1 ¡¼19=C2GBC2J
____________________________________________
ELFDATANONE  0  ^`C2WI=ABG D½D6=<>=n19C28;M D0GBC2J
ELFDATA2LSB  1  a1&1ª?19ABM Q
  a1&1ª?19ABM Q
_ELFDATA2MSB
___________________________________________
 2 
¡¼M(N14GBC2hcM NOP=<>G M(C|M(C|<>/219Sy1419C28;M D0GBC2JIST=Y0Y19=N$S?19ABM QÄk‚-<>/U1&NwWI=AB:019ST=N$14N19S@19N$WX19DF=C2D
QRGBA A? 1‰=SyS@GBJIC219DF<>M-CU1&Q¦1&CU8;M D0GBC2JIST=STC2198;19SyS@=N$V k
j0VI<>1 S@Y198GBr19S<>/21430E0KL/219=D019N WX19N$SyGBM(C|C2:O? 19N&k‡¢:0N$N19C2<>ABVIz<>/UGBS
EI_VERSION
WX=AB:1‰e_ident[EI_VERSION]
OP:0S@<—?1 z=ST195ZYAB=GBC219DF=@? M(WX14hcM N k
EV_CURRENT e_version
.0/2G STWI=AB:01‰Om=N$HIST<>/U1 ? 1&JIGBC2CUGBC2JM h2<>/U1‰:0C2:S@19D+?VI<c19STGBC kª.6/219S@1w? V <c19S=N$1
EI_PAD
N1&Sy19N$WX19DF=C2D{S@19<2<cM©1&NM ˜YN$M JIN$=OPS<c/2=<2N1&=D{Mo?Ipq198;<2r0AB19Se_identS@/2M :ABD{GBJ CUM(N14<c/219OˆkT.0/21‰WX=AB:1
M h QRGBA A(8;/2=C2JI14GBCR<>/U1‰h`:<c:N$14GBh28:NN$19C2<cABV:0C2:S@19D+? V <c19ST=N$14JIGBWI19CROm19=C2GBC2JISk
EI_PAD
iŒrAB19ƒSD0=<>=n19CU8;M D0GBC2JLS@Y198;GBr019ST/UM(Q¦<>MGBC2<c19N$YN19<X<c/21w?=SyGB8¥M&? p>198;<cSTGBCR=nr0AB1IkTi+SªD019Sy8;NG ?19D½=@?M WX1&z8;AB=SyS
r0AB1&S:S@14M&? p>1&8<>S<>/U=<XM 8;8;:0YVztz=C2D ? V <c19Sk[]CUD019N <c/214D019rC219DF19CU8;M D0GBC2JIS@zM&? pq198<>S=N$1
1&YN19S@19C2<c19DF=STS@/UM(Q|Cn?19ABM QÄkj0VI<>14C2:0O?19NST=YY19=Nw» GBCR<c/214:YY19NwAB19hc<28;M N$C219NSk
NELFCLASS32
30C28M(D0GBCUJ S@Y198GBr19Stƒ„S8;M OPYAB19OP19C2<2WI=AB:01&SyzQRGB<c/R<>/U1‰AB19=Sy<XSyGBJ C2G r8;=CU<—?VI<c1‰M 8;8:YVIGBC2J<c/21
ABM QR19S@<2=D0D0ELFDATA2LSB
N$19SySk

Figure 1-5: Data Encoding ELFDATA2LSB

Å
0x01 01
Å Æ
0x0102 02 01
Å Æ Ç È
0x01020304 04 03 02 01

      ! " # " &%(')" -*, *        
1-6
ELF: Executable and Linkable Format

30C28M(D0GBCUJ S@Y198GBr19Stƒ„S8;M OPYAB19OP19C2<2WI=AB:019S@zQRGB<c/R<>/U1‰OmM(Sy<XS@G J C2GBr08;=CU<—?VI<>14M 8;8:YVIGBC2J<c/21


ABM QR19S@<2=D0D0ELFDATA2MSB
N$19SySk

Figure 1-6: Data Encoding ELFDATA2MSB

Å
0x01 01
Å Æ
0x0102 01 02
Å Æ Ç È
0x01020304 01 02 03 04

Machine Information
KIM(Nwr0AB1vGBD019C2<cGBr8=<>GBM C|GBC z<c/214steu? GB<X^`C2<c19A(i+N$8/2GB<c1&8<>:0N$14N19ŠI:GBN$19S<c/214hcM ABABM(Q|GBC2JLWI=AB:019Sk
e_ident

Figure 1-7: 32-bit Intel Architecture Identification, e_ident


~M S@GB<cGBM C «‰=AB:1
_____________________________________
e_ident[EI_CLASS]  ELFCLASS32
e_ident[EI_DATA]  ELFDATA2LSB
_____________________________________

~NM(819S@SyM(NwGBD019C2<cGBr8=<>GBM CRN19S@GBD019SGBCR<c/21430E0KL/219=D019NƒS OP19O? 19N =C2DFOP:Sy<X/2=WI14<c/21‰WX=AB:1


k e_machine
EM_386
.0/21436E0K/219=D019NƒS OP19O? 19N /2M ABD0SU? GB<X¨0=JIST=SyS@M 8;GB=<c19DFQRGB<c/R<>/U14rAB1IkT.0/214ste ?GB<2^`C2<>19A i+N$8/2GB<>198<>:0N$1
D019rCU19STC2M¨0=J Sy˜S@M <>/UGBSTOP19OL?19N 8M(CU<>=GBCUST©19N$Mk
e_flags

              ! " #$ " &%(')" +*, *
1-7
Sections
i+CRM&? pq198<Xr0AB19ƒSTSy1&8<>G M(CR/U1&=D61&Nw<c=@?AB14AB19<cSTM C214ABM 8;=<c14=ABA(<>/U14rAB19ƒSTSy198;<cGBM(CUSkT.0/214S@198<>GBM CR/219=D019Nw<>=@?A 1‰GBS=C
=NN$=V¬M h S@<cN$:08;<c:N1&ST=STD61&Sy8;NG ?19D+?19ABM QÄkTiŒS@198<>GBM CR/219=D019N <c=@?AB14GBCUD0195xGBST=nSy:Z?Sy8;NGBY<XGBCU<>M<>/UGBS
=NN$=V k.0/2Elf32_Shdr
1430E0KL/219=D019NƒS OP19O? 19N JIGBWX1&S<c/21w?VI<>14M hchcSy19<Xh`N$M Od<c/21w?19JIGBC2C2G C2JM h2<c/214r0AB14<>M<c/214S@198e
<cGBM(C|/219=D019Nw<c=@?AB19˜ <c1&A ABST/2M Q·Om=C2V19CU<>NGB19ST<c/214S@198;<cGBM CR/219=D019Nw<>=@?A 1‰8M(CU<>=GBCUS@˜
e_shoff
JIGBWI19S<>/214SyGB©14GBCn?VIe_shnum
<>19SM(hU19=8;/R19C2<cN$V k e_shentsize

aM(OP14Sy198;<cGBM(C|/219=D019N <c=@?AB14GBC2D0195Z19ST=N14N$19S@19NWI19D0˜=C|Mo? p>198;<2rAB14Q|GBABA(C2M <X/U=WI14S@198<>GBM C2ShcM(Nw<c/219S@14S@Y198GB=A


GBC2D0195Z19Sk

Figure 1-8: Special Section Indexes


\R=OP1 «‰=AB:1
__________________________
SHN_UNDEF  0
SHN_LORESERVE  0xff00

SHN_LOPROC  0xff00
SHN_HIPROC  0xff1f
SHN_ABS  0xfff1
SHN_COMMON  0xfff2
SHN_HIRESERVE  0xffff
__________________________

.0/2G STWI=AB:01‰Om=N$HIST=CR:C2D019r0C219D0zOPGBSyS@GBC2JIzGBN$N19AB19WI=C2<czM(NwM(<c/219N$Q|GBS@14OP19=C2GBCUJ AB19SySTS@198<>GBM C


SHN_UNDEF
N1&h`19N$19C281 k¥KIM N 195Z=OPYAB19z=nSyV OL?M A(€€D01&r0C219D0ƒƒN$19AB=<cGBWX14<>MSy1&8<>G M(CRCU:O? 1&N
GBST=CR:C2D61&r0C219DFS@VIO?M Ak SHN_UNDEF

Although index 0 is reserved as the undefined value, the section header table contains an entry for
NOTE index 0. That is, if the e_shnum member of the ELF header says a file has 6 entries in the section
header table, they have the indexes 0 through 5. The contents of the initial entry are specified later in
this section.

. /2G STWI=A :14S@Y198;G r19ST<c/214ABM QR19NI? M(:0C2DFM(hU<>/214N=C2JI1‰M h2N19S@19N$WX19DFGBC2D0195Z19Sk


0
SHN_LORESERVE
<c/2N$M :JI/
SHN_LOPROC
«‰=SHN_HIPROC
AB:01&SGBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk
.0/2G STWI=AB:01‰SyY198;GBr019ST=@?SyM(AB:0<>14WI=AB:019SThcM N <c/2148;M N$N1&SyYM C2D0GBC2JLN$19hc19N19C28;1IkKIM N 195Z=OPYAB19z
SHN_ABS
S@VIO? M(ABSD019rC219DFN19AB=<cGBWI14<cM-Sy198;<cGBM(C|C2:O? 1&N /2=WX1‰=@?SyM(A :<>14WI=A :19ST=C2DF=N$1
C2M <2=hchc198<>19D-?VLN1&A M(8=<>GBM Cªk SHN_ABS

aV O? M(ABSD019rC219DFN19AB=<cGBWI14<cM-<c/2GBSS@198;<cGBM CR=N$148M(OPOmM(C|S@VIO?M ABS@zSy:8;/|=STKI‚+ºT.0ºTi+\


SHN_COMMON
M N :0C2=ABABM 8;=<c19DF‡ˆ195Z<>19NC2=A(WX=N$GB=@? AB19Sk
COMMON
.0/2G STWI=AB:014S@Y198;GBr019ST<c/214:YY19NX?M(:0C2DFM h2<>/U1‰N=C2JI1‰M h2N19S@19N$WX19DFGBC2D0195Z19SkT.0/214S@VIS@<c19O
SHN_HIRESERVE
N1&Sy19N$WX19STGBC2D0195Z19SU?19<cQR1919C =C2D z—GBC28AB:SyGBWI19˜—<c/21
WX=AB:19STD0MC2M <2N$19hc19N19C28;14<c/214 S@198<>GBM CR/U1&=D61&Nw<c=@?AB1IkTSHN_HIRESERVE
SHN_LORESERVE
.0/2=<2GBSyz<>/214Sy198;<cGBM(CR/U19=D019N <c=@?AB1
D0M 19ST¯I;’28;M C2<c=GBCR19C2<cNGB19STh`M(Nw<>/U14N$19Sy19N$WX1&D{GBC2D0195Z19Sk

a1&8<>GBM 2C S8;M C2<c=GBCR=ABA GBC2hcM N$Om=<>GBM CRG CR=CRM&? p>198;<2rAB19z71&5Z8;19Y<2<c/21430E0KL/219=D019Nz<c/214YNM(JIN$=O§/219=D019Nw<>=@? AB19z=C2DF<c/21


S@198<>GBM CRU/ 1&=D61&Nw<c=@?AB1Ik¥¡¼M(N19M(WX19N$zMo?Ipq198;<2rAB19SyƒZSy1&8<>G M(C2SS@=<cGBS@hcVLS@19WI19N=A(8;M C2D0GB<cGBM(CUSk

      ! " # " &%(')" -*, *        
1-8
ELF: Executable and Linkable Format

30WX1&NVLS@198;<cGBM CRGBCR=CRM&? p>198;<2rAB14/2=S1957=8<>ABVLM C214S@198;<cGBM CR/219=D019NwD019S@8;NG ?GBCUJGB<lkaZ198;<cGBM CR/219=D019NSTOP=V


1957G S@<2<>/U=<XD0MC2M <2/2=WX14=nS@198;<cGBM Cªk
30=8;/RSy198;<cGBM(CRM 8;8:YGB19STM C2148;M C2<>G J :M :STf`YM(SyS@G ? ABV19OPY<cVIg2S@19ŠI:19C281‰M h?VI<>19STQ|GB<c/2GBCR=nrAB1Ik
a1&8<>GBM C2SGBCR=xrAB14Om=VLC2M(<2M WI19NAB=YkT\RM‰?VI<c14GBCR=nr0AB14N$19S@G D019STGBCROmM(N14<>/U=CRM C214S@198;<cGBM Cªk
i+CRMo?Ipq198;<2rAB14OP=V/U=WI14GBC2=8;<cGBWX1‰SyY=8;1IkT.0/214WX=N$GBM :S/219=D019N$S=C2DF<c/214S@198<>GBM C2SOPGBJI/2<XCUM(<2€€8;M WI19N$ƒƒ
19WI19NV4?V <c14GBC|=CRM&? pq198<2rAB1IkT.0/2148;M C2<c19C2<>SM(hU<>/214GBCU=8;<cGBWI14D0=<c=n=N$14:CUS@Y198;G r19D¥k
iŒS@198<>GBM CR/219=D019Nw/2=S<>/214h`M(ABA M(Q|GBC2JLS@<cN$:8<>:0N$1Ik

Figure 1-9: Section Header

typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;

.0/2G STOP19O? 1&NwS@Y198;G r19ST<c/214C2=OP14M(h2<c/214S@198<>GBM CªkT^`<cSTWI=AB:014GBST=CRGBC2D0195]GBC2<cM-<c/214S@198<>GBM C


sh_name
/219=D019NwS@<cN$GBC2JL<c=@?AB14Sy1&8<>G M(Cğ S@1914€€aZ<cN$GBCUJ.6=@?AB19ƒƒ?19ABM(Q|¤czJIGBWIG C2J<c/214ABM 8;=<cGBM CRM h2=nC2:A ABe
<c1&NOPGBCU=<>19DPS@<cN$GBC2J k
.0/2G STOP19O? 1&Nw8;=<c19J M N$GB©19ST<c/214S@198<>GBM C2ƒST8;M C2<c19C2<cST=C2DFS@19OP=CU<>GB8SkaZ198<>GBM CR<cV Y01&S=C2D{<>/U1&G N
sh_type
D019S@8N$GBY<cGBM C2ST=YY19=NX?19ABM QÄk
a1&8<>GBM C2SS@:YY0M(N<Xeu? GB<X¨0=JIST<c/2=<2D019S@8;NG ?14OPGBSy8;19ABAB=CU1&M :S=<><cN$G ?:<c19SkK AB=JLD019r0C2GB<cGBM(CUS
sh_flags
=YY19=NX?19ABM QÄk
^`h2<c/214S@198;<cGBM CRQRGBABA =YY19=N GBCR<c/214OP19OmM(NVGBOm=J 14M h2=nYNM(819S@S@z<c/2GBSOP19O?19NwJ G WI19ST<c/21
sh_addr
=D0D0N19S@ST=<2QR/UGB8;/R<c/214S@198<>GBM C2ƒSTr0N$Sy<—?VI<c1‰Sy/2M :ABDFN19S@GBD01IkT‚-<c/219N$Q|GBS@19z<>/U1‰Om19O?19Nw8;M C2e
<c=GBC2STÁ2k
.0/2G STOP19OL?19N$ƒSWI=AB:14JIGBWX19ST<c/21w?VI<>14M hch`S@19<2hcN$M Od<c/21w?19JIGBC2C2G C2JM h2<c/214r0AB14<>M<c/214rNS@<
sh_offset
?VI<>1vGBCR<c/214S@198<>GBM CªkT‚-C214Sy198;<cGBM(C|<>VIY19z D019S@8N$G ? 19D]?19ABM QRzM(88;:YG 1&STC2M
S@Y=814GBCR<>/U1‰r0AB19z=C2DFGB<cS OPSHT_NOBITS
19O? 19N ABM 8;=<c19ST<>/U1‰8M(CU8;19Y<c:=A(YAB=8;19Om19C2<XGBCR<c/21
r0AB1 k sh_offset

.0/2G STOP19O?19NwJ GBWX19ST<>/U1‰S@198<>GBM C2ƒSTSyGB©1‰GBCn? V <c19Skª[+C2AB19SyST<c/214S@198<>GBM CR<cV Y014GBS


sh_size
z<>/214S@198<>GBM CRM(88;:0YGB19S ?VI<>19SGBC|<>/214r0AB1IkTiŒSy198;<cGBM(C|M(hU<>VIY1
SHT_NOBITS
OP=VL/2=WI14=nC2M C2ec©19NM-sh_size
SyGB©19z@?:<2GB<XM 8;8:YGB19STCUM-S@Y0=8;14GBCR<c/214rAB1Ik
SHT_NOBITS
.0/2G STOP19O? 19N /2M ABD0S=vSy198;<cGBM(C|/219=D019N <c=@?AB14GBC2D61&5]ABGBC2HIzQR/UM(Sy1‰G C2<>19NYN$19<c=<>G M(CRD019Y19CUD0S
sh_link
M CR<c/214Sy198;<cGBM(C|<>VIY1IkTiŒ<>=@?A 1 ?19ABM Q·D019S@8N$G ? 19ST<>/214WI=AB:019Sk

              ! " #$ " &%(')" +*, *
1-9
ELF: Executable and Linkable Format

.0/2G STOP19OL?19Nw/2M(ABD0S195Z<>N=nGBC2hcM N$Om=<>GBM C2zQ|/2M S@14GBC2<c19N$YN19<>=<cGBM CRD019Y19C2D0SM CR<c/214S@198;<cGBM C


sh_info
<cV Y1IkiŒ<>=@?A 1 ?19ABM Q·D019S@8N$G ? 19ST<>/214WI=AB:019Sk
aM(OP14Sy1&8<>G M(C2S/2=WI14=D0D0N19S@ST=ABGBJIC2OP19CU<X8;M C2Sy<>N=GBC2<cSkKIM N 1957=OmYAB19zGBh2=nS@198;<cGBM CR/2M ABD0ST=
sh_addralign
D0M :Z?AB19Q|M(ND0z<c/214S@VIS@<c19OdOP:0S@<219C2S@:0N$14D0M :Z?AB19Q|M(NDF=ABGBJIC2OP19C2<2hcM Nw<>/21419CU<>GBN14S@198;<cGBM Cªk
.0/2=<2GBS@z<c/214WI=AB:14M h OP:0S@<?148;M C2JIN$:19CU<X<cM-ÁzOmM(D0:0ABM<>/214WX=AB:14M h
k‡¢:0sh_addr
N$N19C2<>ABVIzM C2ABVLÁn=C2D{YM(SyGB<>GBWX14GBC2<c19J N=A(YM QR19NSTM h2<cQRM=N14=ABABM QR19D¥k
«‰ =AB:01&SÁn=C2DFvOm19=CR<>/214Sy1&8<>G M(CR/2=SC2M-=ABGBJIC2OP19CU<X8;M C2Sy<>N=GBC2<cSk
sh_addralign

aM(OP14Sy198;<cGBM(C2S/2M ABDF=n<>=@?A 1‰M h2r05719D0e`S@GB©1419C2<cN$GB19Syz—Sy:8/R=ST=nS@VIO?M A(<c=@?AB1IkKIM NSy:8;/R=vS@198e


sh_entsize
<cGBM(C2z7<>/2GBSOP19O? 19N JIGBWI19S<>/214SyGB©14GBCn?VI<>19SM(hU19=8;/R19C2<cN$V kT.0/214OP19O? 19N 8;M C2<c=GBC2STÁnGBh2<c/21
S@198<>GBM CRD0M 19STCUM(<2/2M ABDF=n<c=@?AB14M h2r05Z1&D6ecS@GB©1419C2<cNGB19Sk

iŒS@198<>GBM CR/219=D019NƒS OP19O? 19N S@Y198;G r19ST<>/U1‰S@198<>GBM C2ƒSTS@19OP=CU<>GB8Sk


sh_type

Figure 1-10: Section Types, sh_type


\R=OP1 «‰=AB:1
______________________________
SHT_NULL  0
SHT_PROGBITS  1

SHT_SYMTAB  2
SHT_STRTAB  3
SHT_RELA  4
SHT_HASH  5
SHT_DYNAMIC  6

SHT_NOTE  7
SHT_NOBITS  8
SHT_REL  9
SHT_SHLIB  10
SHT_DYNSYM  11

SHT_LOPROC  0x70000000
SHT_HIPROC  0x7fffffff
SHT_LOUSER  0x80000000
SHT_HIUSER  0xffffffff
______________________________

.0/2G STWI=AB:01‰Om=N$HIST<c/21‰Sy198;<cGBM(CR/U19=D019N =STGBC2=8<>GBWX19˜GB<XD0M 19STC2M <X/2=WX14=CR=S@S@M 8;GB=<c19DFS@198<>GBM Cªk


SHT_NULL
‚-<>/219NwOP19O?19NSTM h2<c/214S@198;<cGBM CR/219=D019N /2=WX14:C2D019r0C219DFWI=AB:019Sk
.0/21vS@198;<cGBM CR/2M ABD0STG C2hcM N$OP=<cGBM CRD019r0C219D+?VL<c/214YN$M JIN$=OPz7QR/2M S@14h`M(NOP=<2=C2DFOP19=CUGBC2JL=N$1
SHT_PROGBITS
D019<c1&NOPGBCU1&D{SyM(AB19ABVv?VL<c/214Y0N$M J N=Oˆk
=C2D
SHT_SYMTAB SHT_DYNSYM
.0/219Sy1‰Sy198;<cGBM(CUST/2M(A D½=nSyV O? M(A(<c=@?AB1Ik‡¢:0N$N19C2<>ABVIz=CRM&? pq198<Xr0AB14OP=V/U=WI14M C2ABVM C214S@198e
<cGBM(C|M(hU19=8;/|<>VIY19z@?:<2<c/2GBSN$19Sy<>NGB8;<cGBM(C|OP=V4?14N19AB=5719D{GBCR<c/214hc:0<>:0N$1IkT.0VIYGB8;=ABABVIz
YNM(WXGBD019STSyV OL?M(A SThcM N A GBC2HL1&D6GB<>GBCUJ z<c/2M :J /|GB<XOm=V=A S@M‰?14:Sy1&D{hcM(N
D0SHT_SYMTAB
VIC2=OPGB8¥ABGBCUH GBC2J kTi+ST=n8;M OPYAB19<c1‰SyV OL?M(A(<c=@?AB19zGB<XOm=V8M(C2<c=GBCROP=CUVS@VIO? M(ABST:0C2C2198;19Sye
S@=NVLhcM N D0VIC2=OPG 8¥ABGBCUH GBC2J kT‡¢M C2S@19ŠI:019C2<>ABVIz=CRM&? pq198<Xr0AB14OP=VL=ABS@M8;M C2<c=GBCR=
S@198<>GBM C2zQR/2G 8;/R/2M ABD0ST=vOmGBC2GBOP=A(Sy1&<2M(h2D0VIC2=OPGB8)ABGBC2HIGBC2JS@VIO? M(ABSyz—<cM-Sy=WI1
S@SHT_DYNSYM
Y=81IkTaZ1914€€aZVIO?M A(.6=@?AB19ƒƒ?19ABM Q·h`M(NwD019<>=GBA Sk

      ! " # " &%(')" -*, *        
1-10
ELF: Executable and Linkable Format

.0/214Sy198;<cGBM(CR/UM(ABD0S=nS@<cN$GBCUJ<c=@?AB1IkTi+CRM&? pq198<Xr0AB1‰Om=V/U=WI14OP:A <>GBYAB14Sy<>NGBC2JL<>=@?A 1‰Sy198;<cGBM(CUSk


SHT_STRTAB
a1&1v€€„a<cN$GBC2JL.6=@?AB19ƒƒ?19ABM Q¦hcM NwD019<>=G ABSk
.0/214Sy198;<cGBM(CR/UM(ABD0SN$19ABM 8;=<cGBM(CR19CU<>NGB19STQRGB<c/R195ZYABGB8;GB<2=D0D019C2D0Syz—Sy:8/R=ST<>VIY1
SHT_RELA
hcM N <c/214steu?G <X8;A =S@STM h2M&? pq198<Xr0AB19SkTi+CRM&? pq198<Xr0AB14OP=V/U=WI14OP:0AB<>GBYA 1‰N19ABM 8;=Elf32_Rela <cGBM(CRSy198;<cGBM(CUSk
a1&1v€€„ºT19ABM 8;=<cGBM C2ƒƒ?19ABM Q¦hcM NwD019<>=G ABSk
.0/214S@198<>GBM CR/2M ABD0ST=nS@VIO?M A(/2=S@/R<c=@?AB1IkTi+ABA(Mo?Ipq198;<cSTY=N<>G 8;GBY=<cGBC2JG CRD0V C2=OmGB8¥ABGBCUH GBC2J
SHT_HASH
OP:0S@<X8M(C2<c=GBCR=nS@VIO?M A(/2=S@/R<c=@?AB1Ik‡¢:0N$N19C2<>ABVIz=CRM&? pq198<Xr0AB14OP=VL/2=WI14M C2ABVLM(C214/2=Sy/
<c=@?AB19z@?:0<X<c/2GBSN$19Sy<>NGB8;<cGBM CROP=V4?14N19AB=5Z1&D{GBCR<c/214hc:0<>:0N$1IkaZ1914€€ÉR=S@/R.6=@?AB19ƒƒGBCR~=N<2tnhcM(N
D019<c=GBABSk
.0/214Sy198;<cGBM(CR/UM(ABD0SGBC2hcM N$Om=<>GBM CRhcM N D6V C2=OmGB8¥ABGBCUH GBC2J k‡¢:0N$N19C2<>ABVIz=CRM&? pq198<Xr0AB14OP=V/U=WI1
SHT_DYNAMIC
M C2ABVLM(C214D6V C2=OmGB8¥Sy198;<cGBM(C2zy?:<2<>/UGBSTN19S@<cN$GB8<>GBM CROm=V‰? 14N$19AB=5Z19DFGBCR<c/214hc:0<>:0N$1IkaZ191
€€†]VIC2=OPGB8)aZ198<>GBM C2ƒƒGBCR~0=N$<2tnh`M(NwD019<>=GBA Sk
.0/214Sy198;<cGBM(C|/2M ABD0STGBC2h`M(NOP=<cGBM(C|<>/U=<XOP=NHIST<c/214rAB14GBC|S@M OP14QR=V kaZ191v€„€\RM <c14a198;<cGBM(C2ƒƒ(GBC
SHT_NOTE
~=N<2tnhcM NwD019<>=GBA Sk
iŒS@198;<cGBM CRM(hU<>/2G ST<>VIY14M 8;8;:0YGB19STC2MS@Y=81‰G CR<>/214r0AB1w?:<2M(<c/219NQRGBS@14N19S@19O? AB19S
SHT_NOBITS
ki]A <>/2M :JI/R<c/2GBSTSy198;<cGBM(CR8M(CU<>=GBC2SC2M‰?V <c19S@z<c/21 OP19O? 19N
8;SHT_PROGBITS M C2<c=GBC2ST<c/2148;M C2819Y<>:=A rAB14M hchcSy1&<lk sh_offset

.0/214Sy198;<cGBM(CR/UM(ABD0SN$19ABM 8;=<cGBM CR19C2<>NGB19STQ|GB<>/2M :<21957YA GB8;GB<2=D0D019C2D0S@zSy:8;/|=ST<>VIY1


SHT_REL
hcM N <c/214steu?G <X8;A =S@STM h2M&? pq198<Xr0AB19SkTi+CRM&? pq198<Xr0AB1‰Om=V/2=WX14OP:AB<cGBYAB14N19ABM(8=e
<cElf32_Rel GBM(CRSy198;<cGBM(CUSkaZ1914€€ºT19ABM(8=<>GBM C2ƒƒ? 1&A M(Q¦hcM NwD019<>=G ABSk
.0/2G STS@198;<cGBM C¬<cVIY1‰GBSTN19S@19N$WX19D]? :<X/2=ST:0C2S@Y198GBr19DFS@19OP=CU<>GB8Sk~NM(JIN$=OmST<c/2=<28;M C2<c=GBCR=
SHT_SHLIB
S@198<>GBM C|M(hU<>/UGBST<cVIY14D0MC2M <28;M C2hcM N$O§<>M<c/214i+j0^@k
<c/2N$M :JI/
SHT_LOPROC
«‰=AB:0SHT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk
.0/2G STWI=A :14S@Y198GBr19ST<c/214ABM QR19NX?M(:0C2DFM h2<>/U1‰N=C2JI14M(hUGBC2D0195719SN$19S@19NWI19DFh`M(Nw=YYABGB8=<>GBM C
SHT_LOUSER
YNM(JIN$=OmSk
.0/2G STWI=A :14S@Y198;G r19ST<c/214:YY19NX?M :C2DFM h2<c/214N$=C2JI14M(hUGBC2D0195Z1&SN$19Sy1&NWI19DFh`M(Nw=YYABGB8=<>GBM C
SHT_HIUSER
YNM(JIN$=OmSk¥aZ198<>GBM CR<cV Y19S?19<cQR1919C =C2D OP=V4?14:S@19D+?V
<c/214=YYABGB8=<>GBM C2zQ|GB<>/UM(:<28M(C2¨0GB8<>GBCUJ Q|GB<>/|8;:NN$19CU<XM N h`:SHT_HIUSER
SHT_LOUSER
<c:N$14SyV Sy<>19OmecD019rCU19DFS@198<>GBM C
<cV Y19S7k

‚-<>/219NwSy1&8<>GBM C|<>VIY14WX=AB:19S=N$14N19S@19NWI19D¥kTi+STOm1&CU<>GBM C219D+? 19hcM(N19z<c/214S@198<>GBM CR/U19=D019N h`M(NwGBC2D0195]Á


f g2195ZGBS@<cS@z19WX19CR<>/UM(:JI/R<c/214GBC2D0195]OP=NH S:C2D019r0C219DFS@198<>GBM CRN1&h`19N$19C2819Skª.0/2G ST19C2<cN$VL/2M ABD0S<>/U14hcM ABe
ABM SHN_UNDEF
QRGBC2J k

Figure 1-11: Section Header Table Entry: Index 0


\R=OP1 «‰=AB:1 \RM <>1
______________________________________________________
  \RMC2=OP1
 SHT_NULL  ^`C2=8;<cGBWI1
sh_name 0
 \RM¨0=JIS
sh_type

sh_flags  0  \RM=D0D0N$19SyS
sh_addr  0  \RMr0AB14M hchcSy1&<
 
 \RMS@GB©1
sh_offset 0
sh_size  0

              ! " #$ " &%(')" +*, *
1-11
ELF: Executable and Linkable Format

Figure 1-11: Section Header Table Entry: Index 0 (continued )


\RMABGBCUHLGBC2hcM N$Om=<>GBM C
 SHN_UNDEF 
 \RM=:057GBA GB=N$V¬GBC2hcM N$Om=<>GBM C
sh_link

 \RM=ABGBJIC2OP19C2<
sh_info 0
sh_addralign 
 \RM19CU<>NGB19S
0

sh_entsize 0
______________________________________________________
 

iŒS@198<>GBM CR/219=D019NƒS OP19O? 19N /2M ABD0Seu?GB<2¨0=J S<>/2=<2D019S@8N$G ? 14<>/214Sy198;<cGBM(CUƒ„S=<><cN$G ?:<c19SkT†]19r0C219D


WX=AB:19ST=YY19=NX?19ABM QR ˜M <>/219NwWI=BA :019ST=N$14N19S@19NWI19D¥k
sh_flags

Figure 1-12: Section Attribute Flags, sh_flags


\R=OP1 «‰=AB:1
_______________________________
SHF_WRITE  0x1
SHF_ALLOC  0x2

SHF_EXECINSTR  0x4
SHF_MASKPROC  0xf0000000
_______________________________

^`h2=n¨0=J‰? GB<XGBSS@19<2GBC z<c/214=<c<cN$G ? :<>1vGBS€„€M C2ƒƒhcM Nw<>/U14S@198;<cGBM CªkT‚-<c/219N$Q|GBS@19z<c/21v=<><cN$G ? :<c14GBS€€M(h`hcƒƒM(N


D0M 19STCUM(<2=YYABV kT[+C2sh_flags
D019r0C219D{=<><cN$G ? :<c19S=N$1vS@19<2<cM©19N$Mk
.0/214Sy198;<cGBM(CR8M(CU<>=GBCUSTD0=<c=n<>/2=<2S@/2M :ABD+? 14QRNGB<>=@? AB1‰D6:N$GBCUJYNM(819S@ST195Z198;:0<>GBM Cªk
SHF_WRITE
.0/214Sy198;<cGBM(CRM 8;8:YGB19STOm19OPM N$VLD0:N$G C2JYNM(819S@ST195Z198;:0<>GBM CªkaZM OP148M(C2<cNM(A(Sy198;<cGBM(CUSTD0M
SHF_ALLOC
C2M <2N$19S@GBD614GBCR<c/214OP19OPM N$VLGBOm=J 14M h2=C|Mo?Ipq198;<2rA 1&˜7<>/2GBS=<c<>NG ?:<c14GBSM(h`h2hcM Nw<>/2M S@14Sy198;<cGBM(CUSk
.0/214S@198<>GBM CR8;M C2<>=GBCUST1&5Z198;:0<>=@? AB1‰OP=8/2GBC214GBC2S@<cN$:08;<cGBM(CUSk
SHF_EXECINSTR
i+ABAo?GB<cSTGBC28AB:D019DFGBCR<>/UGBSTOP=SyH=N$14N$19Sy19N$WX19D½h`M(N Y0N$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk
SHF_MASKPROC
.0Q|M-OP19OL?19N$SGBCR<>/U1‰Sy198;<cGBM(CR/U19=D019N$z =C2D z/2M ABDFS@Y198GB=A(GBC2hcM N$Om=<>GBM C2zD019Y19C2D0G C2JM C
S@198<>GBM C|<>VIY1Ik sh_link sh_info

      ! " # " &%(')" -*, *        
1-12
ELF: Executable and Linkable Format

Figure 1-13: sh_link and sh_info Interpretation

sh_type sh_link sh_info


______________________________________________________________________
0
. 2
/ 4
1 y
S 9
1 ;
8 c
< B
G (
M |
C 2
/ 9
1 
= 0
D 9
1 N B
G 2
C 6
D &
1 ]
5 M h
SHT_DYNAMIC  0
 <c/214S@<cN$GBCUJ<c=@?AB14:0S@19D+?V 
 19C2<cN$GB19SGBCR<c/214S@198<>GBM Cªk 
______________________________________________________________________
 
 0
. 2
/ 4
1 y
S 9
1 ;
8 c
< B
G (
M |
C 2
/ 9
1 
= 0
D 9
1 N B
G 2
C 6
D &
1 ]
5 M h 0
SHT_HASH
 <c/214S@VIO?M A(<>=@? AB14<>MQR/2GB8/ 
 <c/21‰/U=S@/R<>=@? AB1‰=YY0ABGB19Sk 
______________________________________________________________________
 
 0
. 2
/ 4
1 y
S 9
1 ;
8 c
< B
G (
M |
C 2
/ 9
1 
= 0
D 9
1 N B
G 2
C 6
D &
1 ]
5 M h  .0/214Sy198;<cGBM(C|/219=D019N GBC2D61&5]M h
SHT_REL
 c
< 2
/ 4
1 
= @
S @
S M ;
8 B
G 
= c
< 9
1 F
D @
S I
V 
O ? (
M (
A c
< @
= 
? B
A I
1 k  <c/214S@198;<cGBM CR<>MQR/UGB8;/R<c/21
SHT_RELA
  N1&ABM 8;=<cGBM CR=YY0ABGB19Sk
______________________________________________________________________

.0/214Sy198;<cGBM(C|/219=D019N GBC2D61&5]M h  ‚-C214JIN$19=<c19Nw<>/U=CR<c/214SyV Ome
SHT_SYMTAB 
<c/214=S@SyM(8GB=<>19D{S@<cN$GBC2JL<c=@?AB1Ik  ?M A(<c=@?AB14GBC2D0195]M h2<c/214AB=S@<
SHT_DYNSYM 
  ABM 8;=A(S@VIO?M Afu? GBC2D0GBC2J
  glk

______________________________________________________________________  STB_LOCAL
M <>/219N  SHN_UNDEF 0
______________________________________________________________________
 

Special Sections
«‰=NGBM(:0STSy198;<cGBM(CUST/UM(ABD{YN$M J N=O§=C2DF8M(C2<cN$M A GBC2hcM N$Om=<>GBM CªkTa198;<cGBM(CUSTGBCR<c/214ABGBS@<?19ABM Q·=N14:S@19D+? V<c/214S@VIS@<c19O
=C2DF/2=WX14<>/U1‰G C2D0GB8;=<c19DF<cV Y91 ST=CUDF=<><cN$G ?:<c19Sk

Figure 1-14: Special Sections


\R=OP1 .0VIY1 i+<><cN$G ?:<c19S
____________________________________________________________
.bss  SHT_NOBITS  SHF_ALLOC + SHF_WRITE
C2M C21
.comment  SHT_PROGBITS 
 
.data  SHT_PROGBITS  SHF_ALLOC + SHF_WRITE
.data1  SHT_PROGBITS  C2 M C21
SHF_ALLOC + SHF_WRITE
.debug  SHT_PROGBITS 
@
S 9
1 1w?19ABM Q
.dynamic  SHT_DYNAMIC 
.dynstr  SHT_STRTAB  SHF_ALLOC
 
.dynsym  SHT_DYNSYM  SHF_ALLOC
.fini  SHT_PROGBITS  S@SHF_ALLOC
191w?19ABM Q + SHF_EXECINSTR
.got  SHT_PROGBITS 
.hash  SHT_HASH  SHF_ALLOC
.init  SHT_PROGBITS  SHF_ALLOC + SHF_EXECINSTR
  S@191w?19ABM Q
.interp  SHT_PROGBITS  C2M C21
.line  SHT_PROGBITS  C2M C21
.note  SHT_NOTE 
.plt  SHT_PROGBITS  S@191w?19ABM Q
¯I‘   S@191w?19ABM Q
.rel ¶  SHT_REL

              ! " #$ " &%(')" +*, *
1-13
ELF: Executable and Linkable Format

Figure 1-14: Special Sections (continued )


¯I‘  S@191w?19ABM Q
.rela ¶  SHT_RELA 
.rodata  SHT_PROGBITS  SHF_ALLOC
.rodata1  SHT_PROGBITS  SHF_ALLOC
  C2M C21
.shstrtab  SHT_STRTAB  S@191w?19ABM Q
.strtab  SHT_STRTAB  S@191w?19ABM Q
.symtab  SHT_SYMTAB 
.text  SHT_PROGBITS  SHF_ALLOC + SHF_EXECINSTR
____________________________________________________________
 

.0/2G STSy198;<>G M(C|/2M(ABD6ST:0C2GBC2GB<cGB=ABGB©19DFD0=<c=n<c/2=<28;M C2<>NG ?:0<>14<cM<>/U14YN$M JIN$=OPƒSOP19OPM N$VLGBOP=JI1IkTj0V


.bss
D019rCUGB<>GBM C2z<c/214SyV Sy<>19O§GBC2GB<cGB=ABGB©19S<>/214D6=<>=nQ|GB<>/|©19N$M STQ|/219CR<c/214YNM(JIN$=OÊ?19JIGBC2S<>MN$:0CªkT.0/21
S@198<>GBM CRM 8;8;:0YGB19STC2MrAB14SyY=8;19z=STGBC2D0G 8;=<c1&D+? V<c/214S@198;<cGBM CR<>VIY19z k
SHT_NOBITS
.0/2G STS@198<>GBM CR/2M ABD0STWX19N$SyGBM(C|8;M C2<>NM(A GBC2hcM N$Om=<>GBM Cªk
.comment
=C2D
.data .data1
.0/219Sy14S@198<>GBM C2S/2M ABDFGBC2G <>GB=ABGB©19D{D0=<>=x<>/2=<28M(CU<>NG ?:<c14<cM<>/21vYN$M J N=OPƒSOP19OPM N$VLGBOm=J 1Ik
.0/2G STS@198<>GBM CR/2M ABD0STGBC2h`M(NOP=<cGBM(CRh`M(NwS@VIO?M ABGB8¥D01? :JIJ GBC2J kT.0/2148;M C2<c19C2<>S=N$14:CUS@Y198;G r19D¥k
.debug
.0/2G STS@198;<cGBM CR/2M(ABD6STD0V C2=OmGB8¥ABGBC2HIGBC2JLGBC2hcM N$Om=<>GBM CªkT.0/214S@198;<cGBM C2ƒST=<c<>NG ?:<c19STQRGBA AG C28;AB:0D01‰<c/21
.dynamic
?GB<lk¿À/219<>/U19N <c/21 ?GB<2GBSTS@19<2GBSTYNM(819S@S@M N SyY198;GBr08ZkaZ1914~0=N$<2txhcM N
OP M N$1nGBC2hcM N$Om=<>GBM Cªk
SHF_ALLOC SHF_WRITE

.0/2G STS@198<>GBM CR/2M ABD0SS@<cN$GBC2JISTC21919D019DFh`M(NwD0V CU=OPGB8¥ABG C2H GBCUJ zOmM(Sy<X8M(OPOmM(CUABV<c/214S@<cN$GBCUJ S<>/2=<


.dynstr
N1&YN19S@19C2<2<c/214C2=OP19ST=SyS@M 8;GB=<c19DFQRGB<c/RSyV OL?M(A <>=@?A 1‰19CU<>NGB19SkaZ1914~0=N$<2txhcM NwOPM N$1vGBC2hcM N$Om=<>GBM Cªk
.0/2G STS@198;<cGBM CR/2M ABD0ST<>/U1‰D0VIC2=OmGB8¥ABGBC2HIGBC2JSyV OL?M A<c=@?AB19z=ST€€aZVIO? M(A(.0=@? AB19ƒ„ƒD019S@8N$G ? 19SkaZ191
.dynsym
~=N<2txhcM NwOPM N$1vGBC2hcM N$Om=<>GBM Cªk
.0/2G STS@198<>GBM CR/UM(ABD0S1957198:<c=@?AB14GBC2Sy<>N:8;<cGBM C2ST<c/2=<28;M C2<cN$G ? :<>14<cM<>/214Y0N$M 8;19S@S<>19NOPGBC2=<cGBM CR8;M D01Ik
.fini
.0/2=<2GBSyzQR/U19CR=nYNM(JIN$=O§1957G <>SC2M N$OP=ABABVIz<c/214SyV Sy<>19O§=N$N=C2J 19S<>M195Z198;:<c14<c/2148;M D014GBC|<>/2G S
S@198<>GBM Cªk
.0/2G STS@198<>GBM CR/2M ABD0ST<c/214J ABM&?=A(M hchcSy19<X<c=@?AB1IkaZ1914€€aZY198GB=A(aZ198<>GBM C2Syƒ„ƒGBC|~=N<Xx=C2DF€€ËxABM&?=A
.got
‚-hchcSy1&<2.6=@?AB19ƒƒGBCR~0=N$<2tnh`M(NwOPM N$1vGBC2hcM N$Om=<>GBM Cªk
.0/2G STS@198;<cGBM C¬/UM(ABD0ST=nS@VIO?M A(/2=S@/R<c=@?AB1IkaZ1914€€ÉR=S@/|.0=@?AB19ƒƒGBC|~=N<Xtnh`M(NwOPM N$1vGBC2hcM N$OP=<cGBM Cªk
.hash
.0/2G STS@198<>GBM CR/2M ABD0S1957198;:0<>=@? AB14GBC2S@<cN$:08;<cGBM(CUST<c/2=<X8M(CU<>NG ?:<c14<cM-<c/214YN$M 8;19SySTGBC2G <>GB=ABGB©=<cGBM CR8;M D01Ik
.init
.0/2=<2GBSyzQR/219C|=nYN$M JIN$=O§S@<c=N$<cST<cMN$:CUz<>/21vS@VIS@<c1&O§=N$N=C2JI19ST<cM-195Z198;:0<>14<c/2148;M D014GBC|<>/2GBSS@198e
<cGBM(Cx?19hcM N$1v8;=ABABGBC2JL<c/214Om=GBCRYNM(JIN=Od19C2<cN$VLYM GBC2<2fc8=ABAB19D hcM Nw‡ÌYN$M JIN$=OPSyglk
main
.0/2G STSy198;<cGBM(C|/2M(A D0ST<c/214Y=<c/RCU=OP14M h2=nYNM J N=OdGBC2<c19N$Y0N$19<c1&N9kT^`h2<c/214rAB14/2=S=nABM(=D6=@?AB14S@19JIe
.interp
OP19C2<2<>/U=<XGBC28AB:D019ST<c/214S@198<>GBM C2z<c/21‰Sy198;<cGBM(CUƒ„S=<><cN$G ?:<c19STQRGBABA(GBCU8;AB:D61‰<c/21 ?GB<c˜M <c/2e
19N$Q|GBS@19z<c/2=<—? GB<XQ|GBABAo?14M(h`hlkaZ1914~0=N$<2txhcM NwOPM N$1vGBC2hcM N$Om=<>GBM Cªk SHF_ALLOC

.0/2G STS@198;<cGBM CR/2M(ABD6STABGBC214C2:O? 19N GBC2hcM N$Om=<>GBM CRhcM N S@VIO?M ABGB8¥D01? :JIJ GBC2JIzQR/2GB8/RD019S@8;NG ?19ST<c/21
.line
8;M N$N19S@YM C2D019C281w?19<cQR1919CR<c/214S@M :N8;14YNM(JIN$=O§=C2DF<c/214OP=8/2GBC2148;M D01IkT.0/2148M(CU<>19C2<cS=N$1
:C2SyY198;GBr019D¥k

      ! " # " &%(')" -*, *        
1-14
ELF: Executable and Linkable Format

.0/2G STSy1&8<>G M(CR/UM(ABD0SGBC2h`M(NOP=<cGBM(C|GBCR<c/214hcM N$Om=<X<c/2=<2€€„\|M(<c14aZ198<>GBM C2ƒƒGBCR~0=N$<2tnD019S@8N$G ? 19Sk


.note
.0/2G STS@198<>GBM CR/2M ABD0S<>/214YNM 8;19D0:N14ABGBC2HI=J 14<c=@?AB1IkaZ1914€€aZY198GB=A(a198;<cGBM(C2SyƒƒGBCR~0=N$<2n=C2D{€„€~0N$M e
.plt
8;19D0:0N$14E0G C2H =JI14.0=@? AB19ƒƒGBCR~0=N$<2tnh`M(NwOPM N$14G C2hcM N$OP=<cGBM Cªk
¯I‘  =C2D ¯I‘ ¶ 
.rel ¶
.0.rela
/219Sy14S@198;<cGBM C2ST/UM(ABDFN19ABM(8=<>G M(CRGBCUhcM N$OP=<cGBM C2z=ST€€ºT19ABM(8=<>GBM C2ƒƒ?19ABM Q·D019S@8N$G ? 19SkT^`h2<c/214rAB14/U=S
=nABM =D0=@?AB14S@19JIOP19C2<2<>/U=<XGBC28AB:D019SN$19ABM 8;=<cGBM(CUz—<c/214S@198<>GBM C2SyƒZ=<c<cN$G ? :<>19SQRGBABA(GBCU8;AB:D014<c/21
?GB<c˜M <>/219NQRGBSy19z<>/2=<?GB<2QRGBA Ao?14M(h`hlkT‡¢M C2WX19C2<>GBM C2=ABABVIz¯I‘ ¶  GBSTSy:YYABGB19D+?V<c/21
S@SHF_ALLOC 198<>GBM CR<cMQR/2GB8/R<>/U14N$19ABM 8;=<cGBM(CUST=YYABV kª.0/2:0ST=xN$19ABM 8;=<cGBM(C|S@198<>GBM C|hcM(N C2M N$Om=ABABV
QRM :ABDF/2=WX1‰<c/214C2=OP1 M N k .text
.rel.text .rela.text
=C2D
.rodata .rodata1
.0/219Sy14S@198<>GBM C2S/2M(ABD{N$19=D0ecM C2ABVLD0=<c=n<c/2=<2<>VIYGB8;=ABABVL8M(C2<cNG ?:<c14<>M=nCUM(C2e`QRNGB<>=@? AB14S@19JIOP19C2<2GBC
<c/214YN$M 8;19SySTGBOm=J 1IkaZ191v€„€~0N$M J N=O§ÉR19=D019N$ƒƒGBC|~0=N$<2txhcM NwOPM N$14G C2hcM N$OP=<cGBM Cªk
.0/2G SªSy198;<cGBM(CR/2M ABD0STS@198;<cGBM C¬C2=Om19Sk
.shstrtab
.0/2G STS@198<>GBM CR/2M ABD0SS@<cN$GBC2JIS@zOmM(Sy<X8M(OPOmM(CUABV<c/214S@<cN$G C2J S<>/U=<XN1&Y0N$19S@19C2<2<c/214C2=OP19S=S@S@M 8;GB=<c19D
.strtab
QRGB<c/RSyV OL?M(A <>=@?A 1‰19CU<>NGB19SkT^`h2<c/214rAB14/2=S=nABM(=D6=@?AB14S@19JIOP19C2<2<>/U=<XGBC28AB:D019S<>/214SyV OL?M A(S@<cN$GBC2J
<c=@?AB19z<>/U1‰Sy198;<cGBM(CUƒ„S=<><cN$G ? :<c19STQRGBABA(GBCU8;AB:D61‰<c/21 ?GB<c˜M <>/219NQRGBSy19z<>/2=<?GB<2QRGBA Ao?14M(h`hlk
SHF_ALLOC
.0/2G STS@198;<cGBM CR/2M(A D0ST=nS@VIO?M A(<>=@?A 1&z=ST€€aZVIO? M(A(.0=@? AB19ƒ„ƒGBCR<c/2GBSTS@198<>GBM CRD019S@8N$G ? 19SkT^`h2<c/21vrAB1
.symtab
/2=ST=nABM =D0=@?AB14Sy1&JIOP19C2<2<>/U=<XGBC28AB:D019ST<c/214S@VIO?M A(<c=@?AB19z<>/214Sy1&8<>G M(C2ƒST=<c<cN$G ?:0<>19STQ|GBABA(GBC28AB:D01
<c/21 ?GB<c˜M <>/219NQRGBSy19z<>/2=<?GB<2QRGBA Ao?14M(h`hlk
SHF_ALLOC
.0/2G STSy198;<cGBM(C|/2M ABD0ST<c/214€€<c1957<czuƒƒM(Nw1957198:<c=@?AB14GBCUS@<cN$:8<>GBM C2SyzM h2=nYNM J N=Oˆk
.text
a1&8<>GBM CRC2=Om19STQRG <>/R=nD0M <2f g2YN19r5]=N14N$19S@19NWI19DFh`M(Nw<>/U14S@VIS@<c1&Omz=AB<c/2M(:0J /|=YYABGB8;=<cGBM C2STOm=V:0S@14<c/219S@14S@198e
<cGBM(C2SGBhU<>/U1&G N 195ZGBS@<cGBC2JLOP19=C2.GBCUJ S=N$1vS@=<cGBS@hc=8<>M N$V kTi]YY0ABGB8;=<cGBM(CUSTOP=VL:Sy14C2=OP19SQRGB<c/2M :<2<>/U14YN$19r05x<cM=WIM GBD
8;M C2¨0GB8;<cSTQRGB<c/RS@VIS@<c19OÍSy198;<cGBM(CUSkT.0/214M&? pq198<Xr0AB14hcM N$Om=<XAB19<cSTM C214D019r0C214S@198<>GBM C2SC2M(<2GBC|<>/214ABG S@<2=@?M WI1IkTi+C
M&? pq198<Xr0AB14OP=V/U=WI14OPM N$14<c/2=CRM C214S@198<>GBM CRQ|GB<>/R<c/214S@=Om14C2=OP1Ik
a1&8<>GBM CRCU=OP19STN19S@19NWI19DFh`M(Nw=nYNM(81&SyS@M N =N8;/UGB<>198<>:N14=N14hcM(NOP19D+? VY0AB=8;GBC2JL=CR=@?I?N1&WXGB=<cGBM(C|M(hU<>/U14=N$8/2GB<>198e
<c:N$14C2=Om14=/219=DFM(hU<>/U1‰Sy198;<cGBM(C|C2=OP1IkT.0/214C2=OP14Sy/2M :ABD+?14<c=H 19CRh`N$M Od<c/214=N$8/2GB<c1&8<>:0N$14C2=Om19ST:Sy19DFhcM N
kKIM N GBC2Sy<>=CU8;1Lk KI‚+‚{k YS@198<XG ST<c/214YS@198<2S@198;<cGBM CRD019rCU1&D-?VL<>/U14K ‚-‚Î=N$8/2GB<>198<>:0N$1IkT305ZGBS@<cGBC2J
19e_machine
57<c19C2SyGBM(C2S=N$148=ABAB19D+?VL<>/U19GBN /2GBSy<>M NGB8;=A(C2=Om19Sk
~N19ec195ZGBS@<cGBC2JL305Z<>19C2SyGBM(CUS
________________________
.sdata .tdesc
.sbss .lit4
.lit8 .reginfo
.gptab .liblist
.conflict

              ! " #$ " &%(')" +*, *
1-15
String Table
a<>NGBC2J<c=@?AB14Sy198;<cGBM(C2S/2M ABDFC2:ABABe`<>19NOPGBC2=<c19DF8;/2=N=8;<c19N Sy19ŠI:19C28;19Syz8;M OPOPM C2ABVL8;=ABAB19DFSy<>NGBC2JISkT.0/214M&? pq198<2rAB1
:Sy19ST<c/219S@14S@<cN$GBCUJ S<>MN$19YN19S@19C2<2S@VIO?M A(=C2DFS@198<>GBM CRC2=Om19SkT‚-C214N19hc19N$19C2819ST=nSy<>NGBC2JL=ST=C|GBC2D0195]GBC2<cM-<c/21
S@<cN$G C2JL<>=@? AB14S@198<>GBM CªkT.0/214r0N$Sy<—? V <c19zQR/2GB8/RGBSGBC2D0195]©19N$M zGBSTD61&r0C219DF<cM/2M(ABD{=nC2:ABA 8;/2=N=8;<c1&N9kTE0GBH 19Q|GBS@19z=
S@<cN$G C2JL<>=@?A 1&ƒSAB=S@<?VI<>14G STD019r0C219DF<cM-/2M ABDF=xC2:ABA(8/2=N$=8<>19Nz19C2S@:0N$GBCUJCU:ABA(<c19N$OPG C2=<>GBM CRh`M(Nw=ABA(Sy<>NGBC2JISkTi
S@<cN$G C2JLQR/2M S@14GBC2D61&5]GBS©19N$MS@Y198GBr19S19GB<>/219NwC2MC2=OP14M Nw=nC2:ABA C2=OP19zD019Y19C2D0GBCUJM CR<c/2148;M C2<c1957<lkTi+CR19OmY<>V
S@<cN$G C2JL<>=@?A 14S@198;<cGBM CRGBSTY01&NOPGB<c<c1&D6˜GB<>SS@198<>GBM CR/219=D019NƒS OP19O? 19N Q|M(:0ABDF8;M C2<c=GBCR©19N$Mk\RM C2ec©19N$M
GBC2D0195Z19ST=N14GBC2WX=ABGBDFhcM Nw=CR19OPY<cVLS@<cN$GBC2JL<c=@?AB1Ik sh_size

iŒS@198<>GBM CR/219=D019NƒS OP19O? 19N /2M ABD0S=CRGBC2D0195]GBC2<cM-<c/214S@198<>GBM CR/219=D019NwS@<cN$GBC2JL<c=@?AB14S@198<>GBM C2z=SD019S@GBJIe


C2=<c19D+?VL<c/21 sh_name
OP19O? 19N M h2<c/21430E6K/U1&=D61&N9kT.0/214hcM ABABM QRGBC2JLr0J :0N$19STSy/2M Q·=nSy<>NGBC2JL<>=@? AB14QRGB<c/RtÏ
?VI<>19S=C2DF<>/U1‰e_shstrndx Sy<>NGBC2JIST=S@SyM(8GB=<c1&DFQ|GB<>/|WI=NGBM(:0STGBC2D0195Z19Sk
^`C2D0195 Ð¥Á Ð¥ Ð¥t Ð¥s Ð Ð¥Ï Ð¥Â Ð¥Ñ Ð¥¹ Ð¥Ò
»
______________________________________________________
Á ______________________________________________________
\0  n  a  m  e  .  \0  V  a  r 
Á           
______________________________________________________
 i  a  b  l  e  \0  a  b  l  e 
tÁ
______________________________________________________
\0  \0  x  x  \0      

Figure 1-15: String Table Indexes


^`C2D0195 aZ<cN$GBC2J
__________________
Á  I
¯ ;
 I
¯ 
  name.
Ñ 
  Variable
  able
 able
t  ¯I– ŽŽ ™’`‹$®„¯9µ
»
__________________

i+ST<c/214195Z=OPYAB14Sy/2M(Q|S@z=xS@<cN$GBC2JL<c=@?AB14GBCUD0195xOm=VN19hc19Nw<>M=C2V4?VI<>14G CR<c/214S@198;<cGBM CªkTiŒSy<>NGBC2JLOP=VL=YY01&=N


OPM N$14<c/2=CRM C281&˜7N$19hc19N19C28;19ST<cMS@:Z? S@<cN$GBCUJ SOP=VL1&5ZGBSy<>˜=C2DF=xS@GBC2JIAB14S@<cN$GBCUJOm=V‰? 14N$19hc19N19C28;19DFOP:0AB<>G YAB14<>GBOm19Sk
[+C2N$19h`19N$19C281&D{S@<cN$GBCUJ S=ABS@M=N14=ABABM QR19D¥k

      ! " # " &%(')" -*, *        
1-16
Symbol Table
i+CRM&? pq198<2rAB19ƒSTSyV OL?M A(<>=@? AB14/2M ABD0STG C2hcM N$OP=<cGBM CRC21919D019DF<cMABM(8=<>14=CUDFN$19ABM 8;=<c14=nYNM(JIN=OPƒSTSyV O? M(ABG 8
D019rCUGB<>GBM C2S=C2DFN19hc19N$19C2819SkTiŒS@VIO? M(A(<c=@?AB14GBC2D61&5]GBS=nS@:Z? S@8;NGBY<2GBC2<cM-<c/2GBST=NN$=V k^cC2D61&5]ÁT?M <c/RD019S@GBJIC2=<c19S
<c/214rNS@<219C2<cN$VLGBCR<c/214<c=@?AB14=C2DFSy19N$WX19ST=S<>/214:0C2D019rCU1&D{S@VIO?M A(GBC2D0195kT.0/2148M(CU<>19C2<cSM(hU<>/U14GBC2GB<cGB=A(19CU<>NVL=N$1
S@Y198GBr19DFAB=<c19N GBC|<>/2GBSS@198<>GBM Cªk
\R=OP1 «‰=AB:1
___________________
STN_UNDEF  0
___________________

iŒS@VIO? M(A <>=@?A 1419C2<>NVL/2=S<>/214h`M(ABA M(Q|GBC2JLhcM N$OP=<lk

Figure 1-16: Symbol Table Entry

typedef struct {
Elf32_Word st_name;
Elf32_Addr st_value;
Elf32_Word st_size;
unsigned char st_info;
unsigned char st_other;
Elf32_Half st_shndx;
} Elf32_Sym;

.0/2G STOP19O? 19N /2M ABD0ST=CRGBCUD0195xGBC2<cM-<c/214M&? pq198<Xr0AB19ƒ„SS@VIO?M A(S@<cN$GBCUJ<c=@?AB19zQR/2G 8;/R/2M ABD0ST<c/21


st_name
8;/U=N$=8;<c19NwN$19YN19S@19C2<c=<>GBM C2SM(hU<>/U14S@VIO?M A(C2=Om19SkT^`h2<c/214WI=AB:014GBSTCUM(C2e`©19N$M zGB<2N$19YN1&Sy19C2<cST=
S@<cN$G C2J<c=@?AB14G C2D0195x<c/2=<2J G WI19ST<c/214SyV OL?M(A C2=OP1IkT‚-<c/219N$Q|GBS@19z<c/214S@VIO? M(A(<c=@?AB1419CU<>NV/U=STC2M
C2=OP1Ik

External C symbols have the same names in C and object files’ symbol tables.
NOTE

.0/2G STOP19O?19NwJ GBWX19ST<>/U1‰WX=AB:14M(h2<c/214=S@S@M 8;GB=<c19DFS@VIO?M AkT†]19Y19C2D0GBC2JLM CR<c/2148M(CU<>195Z<>z7<>/UGBS


st_value
OP=V4?14=CR=@?S@M AB:<c14WI=AB:019z—=CR=D0D6N$19S@Syz1&<c8Zk ˜D019<c=GBABST=YY19=NX?19ABM QÄk
¡¼=C2VS@VIO?M ABST/2=WX1‰=SyS@M 8;GB=<c19D½SyGB©19SkKIM N 1957=OmYAB19z=nD0=<>=nM&? pq198<>ƒSTSyGB©14GBST<c/214C2:OL?19N M h
st_size
?VI<>19S8;M C2<c=GBC219DFGBCR<c/214Mo?Ipq198;<lkª.0/UGBSTOP19O? 19N /2M ABD0STÁnGBhU<>/214SyV O? M(A(/U=STC2MS@GB©14M(Nw=C
:C2HIC2M QRCRS@GB©1Ik
.0/2G STOP19O? 19N S@Y198GBr19ST<c/214S@VIO?M ABƒST<cV Y14=C2D+? GBC2D0GBC2JL=<><cN$G ?:<c19SkTiŒABGBS@<2M(h2<c/214WI=AB:019ST=C2D
st_info
OP19=C2GBCUJ ST=YY19=NSU?19ABM QÄkT.0/214hcM ABABM(Q|GBC2JL8;M D01‰Sy/2M(Q|ST/2M Q·<cM-OP=C2G Y:AB=<c1‰<c/214WI=AB:019Sk

#define ELF32_ST_BIND(i) ((i)>>4)


#define ELF32_ST_TYPE(i) ((i)&0xf)
#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))

              ! " "B " &%(')" +*, *
1-17
ELF: Executable and Linkable Format

.0/2G STOP19O? 19N 8;:0N$N1&CU<>ABVL/2M ABD0STÁn=C2DF/2=SC2M-D019r0C219DFOP19=C2GBC2J k


st_other
30WX1&NVLS@VIO?M A(<c=@?AB1419C2<cNVGBS€€D019rC219D0ƒƒGBC|N$19AB=<cGBM(C|<>MSyM(OP14Sy198;<cGBM(CU˜<>/UGBSTOm19O?19Nw/2M ABD0ST<c/21
st_shndx
N1&AB19WX=C2<2S@198<>GBM CR/219=D019Nw<c=@?AB14GBC2D0195kTi+STKIGBJI:N$1vecÑn=C2D{<>/21vN$19AB=<c19DF<c1&5Z<2D019S@8N$G ? 19zS@M OP1
S@198<>GBM CRGBC2D0195719STGBC2D6GB8;=<c1‰S@Y198GB=AOm19=C2GBC2JISk

iŒS@VIO?M ABƒSU?GBCUD0GBC2JD61&<c19N$OmGBC219ST<c/214ABGBC2HI=J 14WXGBS@G ?G ABGB<>VL=C2D+?19/2=WXGBM N&k

Figure 1-17: Symbol Binding, ELF32_ST_BIND


\R=OP1 «‰=AB:1
_____________________
STB_LOCAL  0
STB_GLOBAL  1

STB_WEAK  2
STB_LOPROC  13
STB_HIPROC  15
_____________________

E0M 8;=A(SyV OL?M(A ST=N14C2M(<2WXGBS@G ?A 14M(:<cS@G D014<>/214M&? p>198;<2rAB148M(C2<c=GBC2GBCUJ<c/219GBNwD019rC2GB<cGBM CªkTE0M(8=A


STB_LOCAL
S@VIO? M(ABSM(h2<c/214S@=Om14C2=OP14OP=VL1957GBSy<XGBCROm:AB<cGBYAB14rA 1&SQRGB<c/2M :<XG C2<>19Nhc19N$G C2JQ|GB<>/|1&=8/
M <>/219N9k
ËxABM&?=A(SyV O? M(ABS=N$14WIGBSyG ?AB14<>M=ABA(Mo?Ipq198;<2rAB19SU? 1&G C2J8M(O? GBC219D¥kT‚-C214r0AB19ƒSTD019r0C2GB<cGBM(C|M(hU=
STB_GLOBAL
JIABMo? =A(S@VIO?M A(Q|GBABA(S@=<cGBS@h`V=CUM(<c/219NwrAB19ƒST:0C2D019rC219D{N$19hc19N19C28;14<cM-<c/214Sy=OP14JIABMo? =A(S@VIO?M Ak
¿À19=HSyV OL?M ABSTN19S@19O?AB14JIABM&?=A(S@VIO? M(ABSyz@?:<2<>/U19GBN D019r0C2GB<>G M(C2S/2=WI14ABM QR19NwYN$19819D019C28;1Ik
STB_WEAK
<c/2N$M :JI/
STB_LOPROC
«‰=AB:01&S GBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk
STB_HIPROC

ËxABM&?=A(=C2DFQ|19=HS@VIO? M(ABSD0GBhchc19NwGBCR<>Q|M-OP=@p>M(NwQR=VISk
¿À/219CR<c/214ABGBCUH19D0GB<cM(Nw8;M O? GBC219STSy19WI19N$=A N$19ABM 8;=<c=@?AB14M&? pq198<Xr0AB19S@zGB<2D0M 19STC2M <2=ABABM(Q¦OP:AB<cGBYAB14D019r0C2GB<cGBM(CUS
M h S@VIO? M(ABSTQ|GB<>/R<c/21‰Sy=OP14C2=OP1IkT‚-CR<c/214M <>/219Nw/2=C2D0zG h2=nD019r0C219DFJ A Mo?=A S@VIO?M A
1957G STB_GLOBAL
S@<cS@z<c/214=YY19=N$=C2814M(hU=nQR19=HLS@VIO?M A(QRGB<c/R<c/214S@=OP14CU=OP14QRGBABA(CUM(<28;=:0S@14=CR19N$NM N&kT.0/214ABGBC2HL19D0GBe
<cM(Nw/2M C2M N$S<c/214JIABMo? =A(D019r0C2GB<cGBM(C|=C2D{GBJ CUM(N19ST<c/21vQR19=HLM(CU19SkaZGBOmGBAB=N$ABVIzGBh2=n8;M OPOPM CRS@VIO? M(A(195ZGBS@<cS
fcGk 1Ik z=nS@VIO?M A(QR/2M S@14S@< S@/UC2D05xr019ABDF/2M(A D0S gcz<c/214=YY19=N$=CU8;14M(hU=nQR19=HSyV OL?M A(QRGB<c/
<c/214S@=OP14C2=Om14QRGBABA(CUM(<2_8;=:Sy14=CR19N$NM(N9kT.0/2SHN_COMMON 14ABG C2HL19D0GB<>M Nw/2M C2M(NS<>/21v8;M OPOPM CRD61&r0C2GB<cGBM CR=C2D{GBJ CUM(N19S
<c/214QR19=HLM C219Sk
¿À/219CR<c/214ABGBCUH19D0GB<cM N S@19=N8;/219S=N$8/2GBWX14ABG ?N=N$GB19S@zG <X195Z<>N=8;<cST=N8;/2G WI14OP19O? 19N$S<>/2=<28M(C2<c=GBCRD019r0C2GB<cGBM(CUS
M h2:C2D019r0C219DFJ ABM&?=A(SyV OL?M ABSkT.0/214OP19OL?19N$ƒSD019rC2G <>GBM CROm=V‰? 1419GB<>/U1&Nw=nJIABM&?=A(M N =xQR19=HLS@VIO?M Ak
.0/21vABGBC2HL19D0GB<cM(NwD0M 19ST¯I;’21957<cN=8;<2=N$8/2GBWI14Om1&OL?19N$S<cM-N19S@M ABWI14:CUD019rC219DFQ|19=HSyV OL?M(A SkT[+C2N1&SyM(ABWX19D
QR19=HLS@VIO?M ABST/2=WX14=v©19NM-WX=AB:1Ik

^`CR19=8;/RS@VIO?M A(<>=@? AB19z—=A ASyV OL?M ABSTQRGB<c/ ?GBCUD0GBC2JY0N$198;19D014<c/214QR19=HL=C2DFJ ABM&?=A(SyV OL?M ABSkTi+S
€€aZ198;<cGBM C2S@ƒƒ=@?M WI14D019S@8N$G ? 19S@z=nS@VIO?M A(<>=@STB_LOCAL
? AB14S@198;<cGBM C2ƒS S@198<>GBM CR/219=D019NwOP19O?19Nw/2M ABD0ST<c/214S@VIO?M A
<c=@?AB14GBC2D61&5]h`M(Nw<>/U14rNS@<2C2M C2ecABM 8;=A S@VIO?M Ak sh_info

      ! " # " &%(')" -*, *        
1-18
ELF: Executable and Linkable Format

iŒS@VIO? M(ABƒS<>VIY14YNM(WXGBD019ST=xJ 19C219N=A(8;AB=SyS@GBr08;=<cGBM CRhcM N <c/214=SyS@M 8;GB=<c19DF19C2<cGB<>V k

Figure 1-18: Symbol Types, ELF32_ST_TYPE


\R=OP1 «‰=AB:1
______________________
STT_NOTYPE  0
STT_OBJECT  1

STT_FUNC  2
STT_SECTION  3
STT_FILE  4
STT_LOPROC  13
STT_HIPROC  15
______________________

.0/214SyV OL?M ABƒ„S<>VIY14GBSTC2M <2S@Y198;G r19D¥k


STT_NOTYPE
.0/214SyV OL?M(A(GBS=S@S@M 8;G =<>19DFQRGB<c/R=nD0=<c=vM&? p>198;<cz—Sy:8;/R=S=vWX=N$G =@?AB19z=CR=N$N=V z19<c8Zk
STT_OBJECT
.0/214SyV OL?M A(GBST=S@SyM(8GB=<c1&DFQ|GB<c/R=nhc:C28<>G M(CRM N M <c/219N 195Z1&8:<c=@?AB148;M D01Ik
STT_FUNC
.0/214S@VIO? M(A(GBST=SyS@M 8;GB=<c1&DFQ|GB<>/R=nS@198<>GBM CªkaZVIO?M A(<c=@?AB1419C2<cNGB19STM h2<c/2GBS<>VIY14195ZGBS@<2YNGBe
STT_SECTION
OP=NGBABVLhcM NwN$19ABM 8;=<cGBM(C|=C2D{C2M(NOP=ABABVL/U=WI1 ?GBCUD0GBC2J k
STB_LOCAL
‡¢M(CUWI19C2<cGBM C2=ABABVIz<>/214SyV OL?M(A ƒ„SC2=OP14JIGBWI19S<>/214C2=Om14M(h2<c/214S@M :N8;14r0AB14=S@S@M 8;GB=<c19DFQRG <>/R<c/21
STT_FILE
M&? pq198<2rAB1IkTiŒrAB14SyV OL?M(A(/U=S ?GBCUD0GBC2JIz—GB<cSTS@198<>GBM CRGBC2D0195]GBS z=C2DFGB<
YN1&819D019S<>/U14M <>/U1&N S@VIO? M(ABShcM N <c/214r0AB19zGBh2GB<2GBSTYN19S@19C2<lk SHN_ABS
STB_LOCAL
STB_LOCAL
<c/2N$M :JI/
STT_LOPROC
«‰=AB:0STT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk

KI:C28;<cGBM CRS@VIO? M(ABSfc<>/UM(Sy14QRGB<c/R<>VIY1 g2GBCRS@/2=N19D½M&? p>198;<Xr0AB19ST/2=WI14S@Y198;G =ASyGBJ CUGBr8=C28;1IkT¿À/219C


=C2M <>/U1&NwM&? p>1&8<2rAB14N19hc19N$19CU8;19ST=xhc:C28STT_FUNC <>G M(C|hcN$M Od=xS@/2=N19DFM&? pq198<>z<c/214ABGBCUH19D0G <>M N =:0<>M OP=<cGB8;=ABA V8N$19=<c19ST=xYN$M e
8;19D0:0N$14A GBC2H =JI14<c=@?AB1v19C2<>NVLhcM Nw<>/21vN$19hc19N19C28;19D{S@VIO?M AkaZ/2=N19DFM&? pq198<XSyV OL?M ABSTQRG <>/R<cVIY19STM <>/U1&Nw<c/2=C
QRGBA A(C2M <?14N19hc19N$19CU8;19DF=:0<>M OP=<cGB8;=ABABVL<c/2NM(:JI/|<>/21vYN$M 8;19D0:0N$14ABGBCUH =JI14<c=@?AB1Ik
STT_FUNC
^`h2=nS@VIO?M ABƒSTWX=AB:14N$19h`1&NST<cM-=nSyY198;GBr08¥ABM 8;=<cGBM(CRQ|GB<c/2GBCR=nS@198<>GBM C2zGB<cSTS@198<>GBM CRGBC2D0195]OP19O? 19N$z z
/2M ABD0ST=C|GBC2D0195]GBC2<cM-<c/214Sy1&8<>G M(CR/U19=D019N <c=@?AB1IkTi+ST<c/214S@198;<cGBM CROPM WI19STD6:N$GBCUJN19ABM(8=<>GBM C2z<c/214S@st_shndx VIO?M ABƒSTWX=AB:1
8;/U=C2J 19S=STQ|19ABABz=C2D{N$19hc19N19C28;19S<>M<c/214S@VIO? M(A(8M(CU<>GBCU:14<>M€€YM GBC2<>ƒƒ<cM<>/214Sy=OP14ABM 8;=<cGBM CRGBC|<>/214Y0N$M J N=Oˆk
aM(OP14S@Y01&8GB=A(S@198;<cGBM CRGBC2D0195xWX=AB:19STJIGBWX1‰M <>/U1&NwS@19OP=CU<>GB8Sk
.0/214SyV OL?M(A(/U=ST=CR=@?S@M AB:<c14WI=AB:01‰<c/2=<2QRGBABA(C2M <X8/2=C2JI1 ? 198;=:Sy1‰M h2N1&A M(8=<>GBM Cªk
SHN_ABS
.0/214SyV OL?M A(AB=@?19ABST=n8M(OmOPM Cn?ABM 8;HL<>/2=<2/2=SC2M(<2V 19<?1919CR=ABABM 8;=<c19D¥kT.0/21‰SyV OL?M ABƒ„STWX=AB:1
SHN_COMMON
JIGBWI19ST=A GBJ C2Om19C2<X8M(CUS@<>N=GBC2<cS@zSyGBOPGBAB=Nw<>M=nS@198;<cGBM C2ƒS OP19O? 19N&kT.0/2=<2GBS@z<c/21
ABGBC2HL19D0GB<cM(NwQ|GBABA(=ABABM 8;=<c14<>/U14S@<cM(N=J 14h`M(Nw<c/214S@VIO?M A(sh_addralign
=<2=CR=D6D0N$19S@S<c/2=<2GBST=nOm:AB<cGBYAB14M h
kT.0/214S@VIO? M(ABƒSS@GB©14<c1&A ABST/2M Q·Om=C2V‰? V <c19ST=N14N$19ŠI:GBN19D¥k
st_value
.0/2G STS@198;<cGBM CR<>=@?A 1‰GBC2D61&5]OP19=C2ST<c/214S@VIO?M A(GBST:C2D019r0C219D¥kT¿À/219CR<c/214ABGBC2HL19D0GB<cM(Nw8;M O?G C219S
SHN_UNDEF
<c/2GBSTM&? p>198;<2rAB14Q|GB<c/R=C2M <>/219Nw<c/2=<2D019rC219S<>/21vGBC2D0GB8;=<c19DFSyV O? M(ABz7<>/2G STr0AB19ƒ„SN$19h`19N$19C281&S<cM-<c/21
S@VIO? M(A(Q|GBABAo?14ABGBCUH 19DF<cM<>/214=8<>:0=A(D019rC2GB<cGBM Cªk

              ! " #$ " &%(')" +*, *
1-19
ELF: Executable and Linkable Format

i+STOm19C2<>GBM C219DF=@? M(WX19z<>/U14S@VIO?M A(<c=@?AB1419C2<cN$VLhcM NwGBC2D0195]Ánf g2GBSN$19Sy1&NWI19D0˜GB<2/2M ABD0ST<c/214hcM ABABM QRGBC2J k


STN_UNDEF

Figure 1-19: Symbol Table Entry: Index 0


\R=OP1 «‰=AB:1 \RM <>1
_______________________________________________
st_name  0  \RMC2=OP1
st_value   Ó 19N$MWX=AB:1
 \RMS@GB©1
0

st_size  0  \RM<>VIY19zABM 8;=Ao? GBC2D0GBC2J
st_info  0 
st_other  
0
\RMS@198<>GBM C
st_shndx  SHN_UNDEF 
_______________________________________________
 

Symbol Values
aV O? M(A <>=@? AB1419C2<cN$GB19ShcM NwD0GBhch`19N$19C2<2M&? pq198<2rAB1v<>VIY19S/2=WI14SyABGBJI/2<>A VLD0GBhchc19N19C2<2GBC2<c19N$YN19<>=<cGBM C2ShcM(Nw<c/21
OP19O? 19N&k
st_value
^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=ABGBJIC2Om1&CU<X8M(C2Sy<>N=GBC2<cSThcM N =nSyV O? M(A(Q|/2M S@14S@198;<cGBM CRGBC2D0195]GBS
k st_value
SHN_COMMON
^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=nSy198;<cGBM(C|M(hch`S@19<2hcM N =nD019r0C219DFS@VIO?M AkT.0/2=<2GBS@z GBST=C
M hchcSy1&<2h`N$M Od<c/21w?19JIGBst_value
C2C2GBCUJM h2<c/214Sy198;<cGBM(C|<>/2=< GBD019C2<cGBr19S7k st_value
st_shndx
^`CR1957198:<c=@?AB14=C2DFS@/U=N$19DFM&? pq198<Xr0AB19S@z /2M ABD0ST=nWIGBN<c:=A(=D0D0N$19SySkT.0MOP=HI14<>/U1&Sy14rAB19SyƒZSyV Ome
?M ABSOPM(N14:Sy19hc:A(h`M(Nw<>/U14D0V CU=OPGB8)ABGBC2HIst_value 1&Nz<c/214S@198<>GBM CRM hchcSy19<Xf`rAB14GBCU<>19NYN$19<c=<>GBM C2gUJ GBWX19STQ|=V<cM=nWIGBN<c:=A
=D0D0N19S@SfcOP19OPM N$VLGBC2<c19N$Y0N$19<c=<>GBM C2g2h`M(NwQR/UGB8;/R<c/214Sy1&8<>G M(CRCU:O? 1&NwGBSGBN$N19AB19WI=C2<lk

i+AB<>/UM(:0J /R<c/214S@VIO? M(A(<c=@?AB14WI=A :19ST/2=WX14S@GBOPG AB=N OP19=C2G C2J ShcM N D0GBhch`19N$19C2<2Mo?Ipq198;<2rA 1&Syz<>/U1‰D0=<c=n=ABABM Q·19hcr08;GB19C2<
=8;819S@S?VL<c/214=YYNM(Y0N$GB=<c14YNM(JIN$=OmSk

      ! " # " &%(')" -*, *        
1-20
Relocation
ºT19ABM(8=<>GBM CRGBS<>/214YNM(819S@STM h28;M C2C2198<>GBCUJS@VIO? M(ABGB8)N$19hc19N19C28;19STQ|GB<c/RS@VIO?M ABGB8¥D019r0C2GB<cGBM(CUSkKIM N 1957=OmYAB19z—Q|/219C
=nYNM(JIN$=O§8;=ABA ST=nh`:C28;<cGBM C2z<c/214=S@SyM(8GB=<c1&D{8;=ABA(G C2S@<cN$:08;<cGBM(C|OP:Sy<X<cN$=CUS@hc19Nw8;M C2<cN$M A(<cM-<c/214YNM Y19N D019Sy<>GBC2=<cGBM C
=D0D0N19S@S=<X195Z198;:0<>GBM CªkT^`CRM <>/U1&NwQRM ND0S@zN19ABM(8=<>=@? AB14rAB19SOP:Sy<X/U=WI14GBC2h`M(NOP=<cGBM(C|<>/U=<XD019Sy8;NG ?19ST/UM(Q¦<>M
OPM D0GBhcVL<c/219GBN Sy198;<cGBM(C|8;M C2<c1&CU<>Syz<>/U:ST=ABA M(Q|GBC2JL1&5Z198;:0<>=@? AB14=C2DFS@/U=N$19DFM&? pq198<Xr0AB19ST<cM/2M ABDF<>/U14N$GBJI/2<2GBC2hcM N$Om=e
<cGBM(C|hcM Nw=nYNM(819S@S@ƒSYNM(JIN$=O§GBOP=JI1IkTÔT$Ž„‘’c®;¯¬$¯ ’`‹®$™ =N14<>/U19S@14D0=<c=2k

Figure 1-20: Relocation Entries

typedef struct {
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;

typedef struct {
Elf32_Addr r_offset;
Elf32_Word r_info;
Elf32_Sword r_addend;
} Elf32_Rela;

.0/2G STOP19OL?19N JIGBWI19S<>/U14ABM(8=<>GBM CR=<2QR/2G 8;/R<cM-=YY0ABV<c/214N1&A M(8=<>GBM CR=8;<cGBM CªkKIM(Nw=xN$19ABM 8;=<c=@?AB1


r_offset
r0AB1&z7<>/21vWI=AB:14G ST<c/21w?VI<>1vM(hch`S@19<2hcNM(O§<>/21ª?19J GBCUC2GBC2JLM(hU<c/214S@198<>GBM CR<cM<>/214Sy<>M N$=JI14:CUGB<X=h`hc198;<c19D
?V¬<>/21vN1&A M(8=<>GBM CªkKIM(Nw=CR195Z198;:<c=@?AB14r0AB14M(Nw=nS@/2=N19DFMo?Ipq198;<cz<c/214WI=AB:01‰G ST<c/214WIGBN<>:0=A(=D0D0N$19SySTM h
<c/214Sy<>M N$=JI14:CUGB<2=hchc198<>19D-?VL<c/214N1&A M(8=<>GBM Cªk
.0/2G STOP19O? 19N JIGBWI19SU? M(<c/R<c/214S@VIO?M A(<>=@? AB14GBC2D0195]QRGB<c/RN$19SyY198;<X<cMQR/2GB8/R<>/U1‰N19ABM(8=<>G M(CROm:S@<?1
r_info
OP=D019z7=C2DF<c/214<cVIY14M h2N19ABM(8=<>GBM C|<>M=YYABV kKIM N 195Z=OPYAB19z=x8;=ABA GBC2S@<cN$:08;<cGBM(C2ƒSN$19ABM 8;=<cGBM CR19C2<cN$V
QRM :ABDF/UM(ABDF<c/214S@VIO?M A(<c=@?AB14GBC2D0195]M(h2<c/214hc:CU8;<cGBM(Cn? 19GBC2J8=ABAB19D¥kT^`h2<c/214GBC2D0195]GBS z
<c/214:C2D019r0C219DFS@VIO?M A(GBC2D61&5Zz<c/214N$19ABM 8;=<cGBM CR:S@19SÁn=ST<c/214€€„SyV OL?M A(WI=AB:01 k ƒƒ-ºT1&A M(STN_UNDEF8=<>GBM CR<cVIY19S
=N14YN$M 8;19S@SyM(NecSyY198;GBr08ZkT¿À/219C|<>/21v<c1957<2N19hc19N$S¥<>M=xN1&A M(8=<>GBM C|19C2<>NVIƒ„SN19ABM 8;=<cGBM(C|<cV Y1vM NwS@VIO?M A
<c=@?AB14GBC2D0195ZzGB<2OP19=C2S<>/214N19S@:A <XM h2=YYA V GBC2J M N zN1&SyY198;<cGBWI19ABVIz
<cM<c/21v19C2<cN$VIƒS OP19O? 19N&k ELF32_R_TYPE ELF32_R_SYM
r_info

#define ELF32_R_SYM(i) ((i)>>8)


#define ELF32_R_TYPE(i) ((unsigned char)(i))
#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))

.0/2G STOP19O? 19N SyY198;GBr01&S=n8;M C2S@<c=C2<2=D0D019C2DF:Sy19DF<>M8;M OPY:0<>14<c/214WI=AB:01‰<cM‰?14S@<cM(N19DFGBC2<cM-<c/21


r_addend
N1&ABM 8;=<c=@?AB1vr019ABD¥k

i+STS@/UM(Q|C¬=@? M(WX19zM(C2ABV 19C2<cN$GB19S8;M C2<>=GBC|=CR1957YABG 8;GB<2=D0D019C2D¥kT30CU<>NGB19STM hU<>VIY1 S@<cM N$1


=CRGBOmYABGB8;GB<2=D0D019C2DFGBC|<>Elf32_Rela
/214A M(8;=<cGBM CR<cM¢?14OmM(D0GBr019D¥kT†]19Y19C2D0GBC2JLM C|<>/U14YN$M 8;19SyS@M Nw=N$8/2GB<c1&8<>Elf32_Rel
:0N$19z7M(C21vhcM N$O§M(N
<c/214M <>/219NwOPG J /2<? 14C2198;19SyS@=N$VLM NwOPM N$148M(CUWI19C2GB19C2<lkT‡¢M C2S@19ŠI:01&CU<>ABVIz=C|GBOPYAB19OP19C2<c=<cGBM(C|hcM N =nY=N<cGB8;:AB=N
OP=8/2GBC214Om=V:0S@14M C214hcM N$O§1&5Z8;A :S@GBWX19ABVLM(Nw19GB<>/U1&NwhcM N$O§D019Y19C2D0GBC2JLM CR8;M C2<c1957<lk

              ! " #$ " &%(')" +*, *
1-21
ELF: Executable and Linkable Format

iŒN$19ABM 8;=<cGBM CRSy1&8<>G M(CRN19hc19N1&CU8;19S<>Q|M-M <>/U19N Sy198;<cGBM(C2S7}@=nSyV O? M(A <>=@? AB14=C2DF=nSy198;<cGBM(C|<>MOPM D0GBhcV kT.0/214S@198<>GBM C
/219=D019Nƒ„S =C2D OP19O? 19N$Syz—D019Sy8;NG ?19DFGBCR€€„a198;<cGBM C2S@ƒƒZ=@? M(WX19zS@Y198;GBh`V<c/219S@14N$19AB=<cGBM C2S@/2G YSk
ºT19ABM(8=<>GBM sh_info
C|19C2<>NGB19ShcM N D6GBsh_link
hchc19N19C2<2Mo?Ipq198;<2r0AB19S/2=WI1vS@ABGBJI/2<cABVLD0GBhchc19N19C2<2GBC2<c19N$YN19<>=<cGBM C2ShcM(Nw<c/21
OP19O? 19N&k r_offset

^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=nS@198<>GBM CRM hchcSy1&<lkT.0/2=<2GBS@z<c/214N$19ABM 8;=<cGBM CRS@198;<cGBM CRGB<>Sy19ABh2D019S@8N$G ? 19S
/2M Q·<cMOPM D0GBhcVL=C2M <>r_offset /U19N Sy198;<cGBM(C|GBCR<c/214r0AB19˜N$19ABM 8;=<cGBM CRM hchcSy19<>SD019S@GBJIC2=<c14=nSy<>M N$=JI14:CUGB<XQ|GB<c/2GBCR<c/21
S@198M(C2DFS@198<>GBM Cªk
^`CR1957198:<c=@?AB14=C2DFS@/U=N$19DFM&? pq198<Xr0AB19S@z /2M ABD0ST=nWIGBN<c:=A(=D0D0N$19SySkT.0MOm=H 14<c/219S@1vrAB19SyƒN$19ABM e
8;=<cGBM CR19C2<cN$GB19SOPM N$14:0S@19hc:0A(hcM N <c/214D0VIC2r_offset
=OmGB8¥ABGBCUH 19Nz<>/U14S@198;<cGBM CRM hchcSy19<Xf`rAB14G C2<>19NYN$19<c=<>G M(C2gUJ G WI19SQR=VL<>M
=nWXGBN<>:=A =D0D0N19S@SfcOP19OmM(NVLGBC2<c19N$YN19<>=<cGBM C2glk

i+AB<>/UM(:0J /|<c/21vGBC2<c19N$Y0N$19<c=<>GBM C|M h 8;/U=C2J 19ShcM N D0GBh`hc19N$19C2<2Mo?Ipq198;<2r0AB1&S<>M=ABABM Q·19hcr08;GB19C2<2=8;819S@SU? V<c/21


N1&AB19WX=C2<2YNM(JIN$=OmS@z<c/214N19ABM(8=<>G M(r_offset
C|<>VIY19S@ƒOm19=C2GBC2JISTSy<>=VL<c/214Sy=OP1Ik

Relocation Types
ºT19ABM(8=<>GBM CR19C2<cNGB19STD019S@8N$G ? 14/2M Q·<cM-=AB<c19N <c/214h`M(ABABM QRGBCUJGBCUS@<cN$:8<>G M(CR=CUDFD0=<>=xr19ABD0Sfu?GB<2C2:0O?19NST=YY19=NwGBC
<c/214ABM QR19NX? M(5]8M(NC219N$Syglk

Figure 1-21: Relocatable Fields

Õ ‹›Ö×
ÈÆ Å

Õ ‹›Ö× .0/2G STS@Y01&8GBr19S=nsteu?G <Xr019ABDFM(88;:0YV GBCUJ ? V <c19STQRG <>/R=N>?GB<cN$=NV4?V <c14=ABGBJIC2OP19C2<lkª.6/219S@1‰WX=AB:19Sª:0S@1


<c/214S@=Om1w?VI<>14M N$D61&Nw=SM(<c/219NwQRM N$D{WI=AB»:01&SGBC|<>/21vsteu?GB<2^`C2<c1&A i+N$8;/UGB<>198<>:0N$1Ik

È Ç Æ Å
0x01020304 ÈÆ 01 02 03 04 Å

‡¢=AB8;:0AB=<>GBM C2S?19ABM Q·=SyS@:Om14<>/U14=8;<cGBM(C2S=N$1v<>N=C2S@h`M(NOPGBC2JL=nN19ABM(8=<>=@? AB14rAB14GBCU<>M19GB<c/219N =C|1957198;:0<>=@? AB14M(Nw=


S@/U=N$19DFM&? pq198<2rAB1IkT‡¢M C28;19Y<c:=ABABVIz<c/21vABGBC2HL19D0GB<cM(NwOm19N$JI19SM(C21vM(NwOmM(N14N19ABM(8=<>=@? AB14r0AB19ST<cMhcM NOd<c/214M :<cY:<lk
^`<Xr0N$Sy<XD0198GBD019ST/2M Q·<cM8;M O?GBC214=CUDFABM(8=<>14<c/214GBC2Y:0<Xr0AB19S@z<c/219CR:YD0=<c19ST<c/214S@VIO? M(A(WX=AB:19S@z=CUDFrC2=A ABVY19Ne
hcM N$OmS<>/U14N1&A M(8=<>GBM CªkTºT19ABM 8;=<cGBM(CUST=YYABGB19DF<cM-195Z198;:0<>=@?A 1‰M N Sy/2=N$19DFM&? p>198;<2rAB19ST=N14S@GBOmGBAB=N =C2DF=88;M OPYABGBSy/
<c/214S@=OP14N19S@:AB<lkª†+19S@8;NGBY<cGBM(CUSU?19ABM Q¦:S@14<c/214hcM ABABM QRGBC2JLC2M <c=<>GBM Cªk
.0/2G STOP19=C2S<>/214=D0D019CUDF:S@19DF<cM-8M(OmY:<c1‰<c/214WI=A :14M(h2<c/214N1&A M(8=<>=@?A 1‰r019ABD¥k
A
.0/2G STOP19=C2ST<c/21w?=Sy1‰=D0D6N$19S@S=<XQR/UGB8;/R=nS@/2=N19DFMo?Ipq198;<2/2=SU?1919CRABM =D019DFGBC2<cM-OP19OmM(NVD0:0N$GBC2J
B
1957198:<cGBM(CTkTË]19C219N$=ABABVIz=nS@/2=N19DFMo?Ipq198;<2rAB14GBSU? :GBAB<2QRGB<c/R=nÁª? =S@14WIGBN<c:=A(=D0D0N$19SyS@z@?:0<X<c/2141957198;:0e
<cGBM(CR=D0D6N$19S@SQRGBABAo?14D0GBh`hc19N$19C2<lk

      ! " # " &%(')" -*, *        
1-22
ELF: Executable and Linkable Format

.0/2G STOP19=C2S<c/214M(h`hcS@19<2GBC2<cM-<c/214JIABMo? =A(M(h`hcS@19<2<c=@?AB14=<2QR/2GB8/R<c/214=D0D0N$19SySTM h2<c/214N$19ABM 8;=<cGBM CR19C2<cN$VIƒS


G
S@VIO? M(A(Q|GBABA(N$19SyGBD014D0:NGBC2J195Z198;:0<>GBM CªkaZ1914€€ËxABM&?=A(‚-hchcSy19<X.6=@?AB19ƒƒGBCR~=N<2tnhcM N OmM(N14GBC2hcM N$Om=e
<cGBM(Cªk
.0/2G STOP19=C2S<>/214=D0D0N19S@STM h2<c/214J ABM&?=A(M hchcSy19<X<c=@?AB1IkaZ1914€€ËxABM&?=A(‚-hchcSy19<2.0=@?AB19ƒƒGBCR~0=N$<2tnhcM NwOPM N$1
GOT
GBC2h`M(NOP=<cGBM(Cªk
.0/2G STOP19=C2S<>/U14YAB=8;14fcSy198;<cGBM(C|M(h`hcS@19<2M(Nw=D0D0N19S@S@gUM(hU<>/214YNM 8;19D0:N14ABGBC2HI=J 14<c=@?AB1419C2<cN$VLhcM N =nSyV Ome
L
?M AkTiŒYNM 8;19D0:N14ABGBC2HI=JI14<>=@? AB1419C2<cN$VLN19D0GBN$198<>S=nh`:C28<>GBM C|8;=ABA(<cM<c/214YNM(Y19NwD019Sy<>GBC2=<cGBM CªkT.0/21
ABGBC2HL19D0GB<cM(NX?:0GBABD0ST<c/214GBCUGB<>GB=A YN$M 8;19D0:0N$14ABGBC2HI=JI14<>=@? AB19z=C2DF<c/214D0VIC2=OPGB8)ABGBC2HI19N OmM(D0GBr019ST<c/21
19C2<cN$GB19SD0:0N$GBC2JL195Z198;:0<>GBM CªkaZ1914€€~NM(819D0:N14E0GBC2HI=J 1v.0=@?AB19ƒƒGBC|~=N<2tnhcM NwOPM N$1vGBC2hcM N$OP=<cGBM Cªk
.0/2G STOP19=C2S<>/U1‰YA =8;14fcSy1&8<>G M(CRM hchcSy19<XM N =D6D0N$19S@Syg2M h2<c/214S@<cM(N=J 14:CUGB<—? 1&G C2JN19ABM(8=<>19DFf`8;M OPY:<c19D
P
:SyGBC2J glk
r_offset
.0/2G STOP19=C2S<>/214WX=AB:14M h2<c/214S@VIO?M A(QR/2M S@14GBCUD0195xN19S@GBD019STGBC|<>/214N19ABM(8=<>GBM CR19C2<cN$V k
S
iÎN$19ABM 8;=<cGBM C|19C2<cN$VIƒS WX=AB:14D019S@GBJIC2=<c19ST<c/214M hchcSy19<XM NwWIGBN<>:0=A(=D0D0N19S@SM(hU<>/214r0N$Sy<?VI<>14M h2<c/21
=hch`1&8<>19D{S@<cM(N=JI14:C2GB<lr_offset
kT.0/214N$19ABM 8;=<cGBM CR<>VIY14S@Y198GBr19SQR/2GB8/n?GB<cST<cM-8/2=C2JI1‰=CUDF/2M(Q¦<>M8;=AB8:AB=<c14<>/219GBNwWI=AB:019Sk
.0/21vaZØTaZ.630¡Ù«Ú=N$8/2GB<c1&8<>:0N$14:0S@19STM C2ABV N1&ABM 8;=<cGBM CR19CU<>NGB19S@z<c/21vr19ABD{<>M‰? 14N$19ABM 8;=<c19DF/UM(ABD0S<c/21
=D0D019C2D¥kT^`CR=ABA(8=S@19S@z<c/214=D0D019C2DF=C2D{<>/2Elf32_Rel
148M(OPY0:<>19DFN19S@:0AB<X:0S@14<>/U1‰Sy=OP1w?VI<c1‰M ND019N&k

Figure 1-22: Relocation Types


\R=OP1 «‰=AB:1 KIGB19ABD ‡¢=AB8;:A =<>GBM C
___________________________________________________
 C2M C21  C2M C21
R_386_NONE 0 

 
‹ 
› 
Ö ×
R_386_32  1 Õ S + A
  Õ ‹›Ö× 
R_386_PC32 2 
 ‹›Ö×  S + A - P
 3 Õ
R_386_GOT32
‹›Ö×  G + A - P
R_386_PLT32  4 Õ L + A - P
 C2M C21  C2M C21
R_386_COPY 5 

 
‹ 
› 
Ö ×
R_386_GLOB_DAT  6 Õ S
  Õ ‹›Ö× 
R_386_JMP_SLOT  7 
‹›Ö×  S
R_386_RELATIVE  8 Õ
‹›Ö×  B + A
R_386_GOTOFF  9 Õ  S + A - GOT
R_386_GOTPC  10  Õ ‹›Ö×  GOT + A - P

___________________________________________________
 

aM(OP14N19ABM(8=<>GBM CR<cV Y19ST/U=WI14S@19OP=CU<>GB8SU?19VIM(CUD½SyGBOPYAB148=AB8;:A =<>GBM Cªk


.0/2G STN1&A M(8=<>GBM CR<cV Y148M(OmY:<c1&S<c/214D0GBS@<c=C28;14h`N$M Od<c/21w?=Sy14M(h2<c/214JIABMo? =A(M hchcS@19<
R_386_GOT32
<c=@?AB14<cM<>/U14S@VIO?M ABƒSJ ABM&?=A M(hch`S@19<2<c=@?AB1419C2<cN$V k^c<2=D0D0GB<cGBM C2=ABABVLGBC2S@<cN$:08;<cST<c/214ABGBC2H
19D0GB<cM(Nw<cM¢? :GBABD{=nJ A Mo?=A M(h`hcS@19<2<c=@?AB1Ik
.0/2G STN19ABM(8=<>GBM CR<cV Y0148;M OPY:<c19ST<c/214=D0D0N19S@SM(hU<>/214SyV OL?M ABƒSTYNM(819D0:N$14A GBC2H =JI1
R_386_PLT32
<c=@?AB1419C2<cN$VL=C2D{=D0D0GB<cGBM(CU=ABABVLGBC2S@<cN:8;<cS<>/21vABGBC2HL19D0GB<cM(Nw<cM¢? :GBABD{=nYNM(81&D6:N$14A GBC2H =JI1
<c=@?AB1Ik
.0/21vABGBC2HL19D0GB<cM(Nw8;N19=<>19S<c/2GBSN$19ABM 8;=<cGBM(C|<cV Y14h`M(NwD0VIC2=OPGB8)ABGBCUH GBC2J kT^`<cSTM hchcSy1&<
R_386_COPY
OP19O? 19N N19hc19N$S<cM-=xABM(8=<>GBM CRGBC|=nQRNGB<c=@?AB14Sy1&JIOP19C2<lkT.0/214S@VIO? M(A(<c=@?AB14GBC2D61&5
S@Y198GBr19S=nS@VIO?M A(<c/2=<XSy/2M :ABDF195ZGBS@<?M <>/RGBC|<>/2148:N$N19C2<2Mo?Ipq198;<2rAB14=CUDFGBCR=nS@/U=N$19D
M&? pq198<kT†]:0N$GBC2JL1957198:<cGBM(CUz<>/214D0VIC2=OPG 8¥ABGBC2HI19N 8M(YG 1&SD0=<c=n=S@S@M 8;GB=<c19DFQRG <>/R<c/21
S@/U=N$19DFM&? pq198<>ƒSS@VIO?M A(<cM-<c/214ABM 8;=<cGBM(C|S@Y198;G r19D+?VL<c/214M(h`hcS@19<lk

              ! " #$ " &%(')" +*, *
1-23
ELF: Executable and Linkable Format

.0/2G STN19ABM(8=<>GBM CR<cVIY14GBST:0S@19DF<cMS@19<2=nJIABMo? =A(M hchcSy1&<2<c=@?AB1419C2<cNV<cM<>/U14=D0D0N$19SySTM h2<c/21


R_386_GLOB_DAT
S@Y198GBr19DFS@VIO?M AkT.0/214SyY198;GB=A N$19ABM 8;=<cGBM(C|<>VIY14=ABABM QRSM C214<cMD019<>19NOPGBC214<c/21
8;M N$N19S@YM C2D019C281w?19<>Q|1919CRS@VIO?M ABS=C2DFJ ABM&?=A(M hch`S@19<2<>=@?A 1‰19CU<>NGB19Sk
.0/21vABGBC2HL19D0GB<cM(Nw8;N19=<>19S<c/2GBSN$19ABM 8;=<cGBM(C|<cV Y14h`M(NwD0VIC2=OPGB8)ABGBCUH GBC2J kT^`<cSTM hchcSy1&<
R_3862_JMP_SLOT
OP19O? 19N JIGBWX19ST<c/214ABM 8;=<cGBM CRM h2=xYN$M 8;19D0:0N$14ABGBCUH =JI14<c=@?AB1419C2<cN$V kT.0/21‰D0VIC2=OPG 8
ABGBC2HI19NwOPM D0GBr01&S<c/21vYN$M 8;19D0:0N$14A GBC2H =JI1v<>=@?A 1419C2<cN$VL<cM<cN$=C2Syhc19Nw8;M C2<cN$M A <>M<c/21vD019S@GBJIe
C2=<c19DFS@VIO?M ABƒST=D0D0N19S@SxŸuS@1914€€~NM(819D0:N$14E0GBCUH =JI14.0=@?AB19ƒƒGBCR~0=N$<2t¤lk
.0/21vABGBC2HL19D0GB<cM(Nw8;N19=<>19S<c/2GBSN$19ABM 8;=<cGBM(C|<cV Y14h`M(NwD0VIC2=OPGB8)ABGBCUH GBC2J kT^`<cSTM hchcSy1&<
R_386_RELATIVE
OP19O? 19N JIGBWI19S=vA M(8=<>GBM CRQRGB<c/2GBCR=nSy/2=N$19DFM&? p>198;<X<c/2=<28;M C2<c=GBC2ST=nWX=AB:14N$19YN19S@19C2<ce
GBC2JL=nN$19AB=<cGBWX14=D0D0N$19SySkT.0/214D0VIC2=OPGB8)ABGBC2HI19N 8M(OmY:<c1&S<c/2148;M N$N19S@YM C2D0GBC2JLWIG N$<c:=A
=D0D0N19S@SU? V=D0D0GBCUJ<c/214WIGBN<>:0=A(=D0D0N$19SyST=<2QR/2GB8/R<>/U1‰Sy/2=N$19DFM&? p>198;<XQ|=STABM =D019DF<>M
<c/214N$19AB=<cGBWX14=D0D0N$19SySkºT1&A M(8=<>GBM CR19C2<cN$GB19ShcM N <c/2GBST<cVIY14OP:Sy<XSyY198;GBh`VÁnh`M(Nw<>/214SyV Ome
?M A(<c=@?AB14GBC2D61&5k
.0/2G STN$19ABM 8;=<cGBM CR<>VIY148;M OPY:<c19ST<c/214D0GBhch`1&N19C28;1w? 1&<cQR1919CR=nSyV O? M(ABƒSTWX=AB:14=C2DF<c/21
R_386_GOTOFF
=D0D0N19S@STM h2<c/214JIABMo? =A(M hchcSy1&<2<c=@?AB1Ik^c<2=D0D0GB<cGBM C2=ABABVLGBC2Sy<>N:8;<cS<>/21vABGBC2HL19D0GB<>M Nw<>M‰?:0GBABD
<c/214JIABMo?=A M(h`hcS@19<2<c=@?AB1Ik
.0/2G STN1&A M(8=<>GBM CR<cV Y14N19S@19O? AB19S z195Z8;19Y<2GB<X:0S@19ST<c/214=D0D0N19S@STM h2<c/21
R_386_GOTPC
JIABMo? =A(M(hch`S@19<X<c=@?AB14GBCRGB<cST8=AB8;:A =<>R_386_PC32 GBM CªkT.0/214SyV O? M(A N$19hc19N1&CU8;19DFGBC|<>/2G STN1&A M(8=<>GBM C
C2M N$Om=ABABVLGBS zQR/2GB8/R=D0D0GB<cGBM(CU=ABABVGBCUS@<cN$:8<>S<>/214ABGBC2H
19D0GB<cM(Nw<cM‰?:GB_GLOBAL_OFFSET_TABLE_
ABD{<>/U14J ABM&?=A M(h`hcS@19<2<c=@?AB1Ik

      ! " # " &%(')" -*, *        
1-24
2 PROGRAM LOADING AND DYNAMIC LINKING

Introduction 2-1

Program Header 2-2


Base Address 2-4
Note Section 2-4

Program Loading 2-7

Dynamic Linking 2-10


Program Interpreter 2-10
Dynamic Linker 2-10
Dynamic Section 2-11
Shared Object Dependencies 2-15
Global Offset Table 2-16
Procedure Linkage Table 2-17
Hash Table 2-19
Initialization and Termination Functions 2-20

              ! " #$ " &%(')" +*, *
i
Introduction
~=N<2tnD019S@8N$G ? 1&S<c/214Mo?Ipq198;<2r0AB14GBC2hcM NOP=<>G M(CR=CUDFS@VIS@<c19Od=8<>GBM C2S<>/U=<X8N$19=<c14N$:0C2C2GBC2JLYNM(JIN$=OmSkaZM OP14GBC2h`M(Ne
OP=<cGBM CR/219N$14=Y0YABGB19ST<cM=ABA(S@VIS@<c19OPS@˜M <c/219N GBCUhcM N$OP=<cGBM CRGBSYN$M 8;19S@SyM(NecSyY198;GBr08Zk
305Z198;:<c=@?AB14=CUDFS@/2=N19DFM&? pq198<2rAB19SS@<c=<>GB8=ABABVLN$19YN19S@19C2<2YNM(JIN$=OmSkT.0M195Z1&8:<c14S@:8/RYNM(JIN$=OmS@z<c/214S@VIS@<c19O
:Sy19ST<c/214r0AB19S<>M8;N19=<>1vD0V CU=OPGB8)YN$M J N=O§N$19YN1&Sy19C2<>=<cGBM C2S@z7M(NwYNM(819S@SGBOP=JI19SkTiŒYN$M 8;19SySTGBOP=JI1‰/U=STS@19JIe
OP19C2<cS<>/2=<2/2M ABDFGB<cS<>195Z<>zD6=<>=zSy<>=8H z7=C2DFS@MM CªkT.0/214OP=@pqM N Sy198;<cGBM(C2SGBCR<>/2G STY=N$<2D0GBS@8:S@S<>/214hcM ABABM QRGBC2J k
Û0‹$žµ2‹$‘ ¶ š$‘;›$‹$Ün.0/2G STS@198<>GBM CR8M(OmYAB19OP19C2<cST~0=N$<2zD019S@8N$G ?G C2JM&? p>198;<2rAB14Sy<>N:8;<c:N19ST<c/2=<2N$19AB=<c14D0GBN$198<>ABV
<cMLYN$M J N=O§195Z198;:0<>GBM CªkT.0/214YNGBOP=NVLD0=<>=xS@<cN$:08;<c:N$19z7=nYNM(JIN$=O§/219=D019Nw<>=@? AB19zABM 8;=<c19STSy19J Om19C2<2GBOP=JI19S
QRGB<c/2GBC|<c/214rA 14=C2DF8M(CU<>=GBCUSTM <>/U19N GBCUhcM N$OP=<cGBM CRC219819S@S@=NVL<>M8N$19=<c14<c/214OP19OPM NVLGBOP=JI14hcM N <c/214Y0N$M e
JIN$=Oˆk
Û0‹$žµ2‹$‘ ¶ Ž;‘›®„¯9µ2ÜnËxGBWX19CR=C|Mo?Ipq198;<2r0AB19z<>/U14S@VIS@<c19OdOP:0S@<2ABM =DFGB<2GBC2<cMOP19OPM N$VLhcM Nw<>/U14YN$M JIN$=O§<>MN$:0Cªk
Ý+Þ¯ ‘ ¶ ®„Ž®¯ ß®„¯9µ2Üni+hc<c19N <c/214SyV Sy<>19O§ABM(=D0S<>/U14YN$M JIN$=OPz7GB<XOm:S@<28M(OPY0AB19<>14<c/214YNM(819S@SGBOP=JI1w?VLN$19S@M ABWXe
GBC2JLS@VIO? M(ABGB8)N$19hc19N19C28;19S=OPM C2J<c/214M&? pq198<Xr0AB19ST<c/2=<28;M OPYM S@14<c/214YN$M 8;19SySk

There are naming conventions for ELF constants that have specified processor ranges. Names such as
NOTE DT_, PT_, for processor-specific extensions, incorporate the name of the processor:
DT_M32_SPECIAL, for example. Pre–existing processor extensions not using this convention will be
supported.

~N19ec195ZGBS@<cGBC2JL305Z<>19C2SyGBM(CUS
_____________________
DT_JMP_REL

              ! " #B" 7o%]')" +*, *
2-1
Program Header
i+CR195Z198;:<c=@?AB14M NwS@/2=N19DFMo?Ipq198;<2r0AB19ƒ„SYNM(JIN$=O§/219=D019N <c=@?AB14G ST=CR=NN$=VLM h2Sy<>N:8;<c:N19S@z19=8/RD019S@8N$G ? GBC2JL=nS@19JIe
OP19C2<UM(NwM <>/U19NwGBC2hcM N$Om=<>GBM C|<>/21vS@VIS@<c19O§C21919D0S<>MY0N$19Y=N14<c/214YNM(JIN=Odh`M(Nw195Z198;:<cGBM CªkTi+CRM&? pq198<Xr0AB14™$qµ ¶ ¯I’
8;M C2<c=GBC2SM C214M NwOPM N$14™$$’`®;¯I™&z=S€„€a19J Om1&CU<X‡¢M C2<c19C2<>SyƒƒD019S@8;NG ?19S?19ABM QÄk~NM J N=Od/219=D019N$S=N$14OP19=C2G C2J h`:A
M C2ABVLhcM(Nw195Z198;:<c=@?AB14=C2D{S@/2=N19DFMo?Ipq198;<2r0AB19SkTiŒr0AB14S@Y198GBr19SGB<>SM(Q|CRYNM(JIN$=O§/219=D019N SyGB©14QRGB<c/R<c/21430E0K
/219=D019Nƒ„S =C2D OP19O? 19N$SxŸuS@1914€€30E0KLÉR19=D019N$ƒƒGBCR~0=N$<2¤lk
e_phentsize e_phnum

Figure 2-1: Program Header

typedef struct {
Elf32_Word p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Word p_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr;

.0/2G STOP19OL?19N <c19ABABSQR/2=<2HIGBC2DFM h2Sy19J OP19CU<X<c/2GBS=N$N=V19AB19Om19C2<2D019S@8;NG ?19SM(Nw/2M Q·<cMGBC2<>19NYN$19<


p_type
<c/214=NN$=V¬19AB19OP19C2<cƒ„S¥GBC2hcM N$Om=<>GBM CªkT.0VIY14WI=AB:019ST=C2DF<>/U19GBN OP19=C2GBCUJ ST=YY01&=NX?19ABM QÄk
.0/2G STOP19OL?19N JIGBWX1&S<c/214M(h`hcS@19<2hcNM(O§<>/21w? 19J GBC2CUGBC2JLM(hU<>/214r0AB14=<2QR/2GB8/R<c/214rNS@<?VI<>14M h2<c/21
p_offset
S@19JIOP19C2<2N$19SyGBD019Sk
.0/2G STOP19O? 19N JIGBWI19ST<c/214WXGBN$<c:=A(=D0D0N19S@ST=<2QR/UGB8;/R<c/214rNS@<?VI<>14M h2<c/214S@19JIOP19C2<XN19S@GBD019SGBC
p_vaddr
OP19OPM NVk
‚-CRS@VIS@<c19OPSThcM N Q|/2GB8;/RY/UV SyGB8;=A(=D0D0N19S@SyGBC2JGBSN$19AB19WI=CU<>z<c/2GBSTOm1&OL?19N GBSN$19S@19NWI19DFhcM N <c/21
p_paddr
S@19JIOP19C2<cƒSªY0/2V SyGB8;=A(=D0D0N$19SySkªj0198;=:0S@14aZVIS@<c19Od«ÌGBJIC2M N$19SY/2V SyGB8;=A(=D0D6N$19S@SyGBC2JLhcM(Nw=YYABGB8=e
<cGBM(CRY0N$M J N=OPS@z<c/2GBSOP19O? 1&Nw/2=S:C2S@Y01&8GBr19DF8M(CU<>19C2<cSTh`M(Nw1957198:<>=@? AB14rAB19S=C2DFS@/U=N$19D
M&? pq198<>S7k
.0/2G STOP19OL?19N JIGBWI19S<>/U14C2:O? 19N M h?VI<c1&SGBCR<c/214rA 14GBOP=JI1‰M h2<c/214Sy1&JIOP19C2<c˜GB<2OP=V4?14©19N$Mk
p_filesz
.0/2G STOP19O? 19N JIGBWI19S<>/214CU:O?19NwM(h7?VI<>19SGBCR<>/U14OP19OPM N$VLGBOP=JI14M(hU<>/214Sy19J OP19CU<>˜GB<2OP=V4?1
p_memsz
©19N$Mk
.0/2G STOP19O? 19N JIGBWI19S¨=JISTN19AB19WI=CU<X<cM-<c/214Sy1&JIOP19C2<lkT†]19r0C219DF¨0=JWX=AB:19ST=YY19=NX?19ABM QÄk
p_flags
i+ST€€~NM(JIN$=O§E0M(=D6GBC2J ƒƒAB=<c19N GBCR<c/2GBSY=N$<2D019S@8N$G ? 19S@zABM =D0=@?AB14YNM(819S@STSy19J Om19C2<>SOP:Sy<X/U=WI1
p_align
8;M C2JIN$:01&CU<XWX=AB:19ShcM(N =C2D zOPM D0:ABM<c/214Y=JI14S@GB©1Ikª.0/UGBSTOP19O? 1&N
JIGBWI19ST<c/214WX=AB:14<cM-Q|/2p_vaddr GB8;/R<c/214Sy1&JIOP19C2p_offset
<cST=N14=ABGBJIC219DFGBCROP19OmM(NV=C2D{GBCR<>/U14rAB1Ikª«‰=AB:019STÁ
=C2DFnOm1&=C|C2M-=ABG J C2Om19C2<XGBSN$19ŠI:G N$19D¥kT‚-<c/219N$Q|GBS@19z S@/UM(:A D+?14=nYM(SyGB<cGBWI19zGBC2<c19J N=A
YM QR19NwM(hUtz=C2D S@/UM(:A D½19ŠI:=A zOPM D0:ABM
p_align
k
p_vaddr p_offset p_align
aM(OP1v1&CU<>NGB19STD019Sy8;NG ?14YNM(819S@SS@19JIOP19C2<cS@˜M <>/U19N$SJ GBWX14S@:0YYAB19OP19C2<c=N$VLGBCUhcM(NOP=<cGBM CR=C2D{D0M-CUM(<28;M C2<cN$G ? :<c14<>M
<c/214YN$M 8;19SySTGBOm=J 1Ika1&JIOP19C2<219C2<cN$G 1&SOP=VL=YY01&=NwGBC|=C2VLM(ND019N$z71957819Y<X=S195ZYABGB8;GB<cABVLC2M <>19D-?19ABM QÄkT†]19r0C219D
<cV Y14WX=AB:19ShcM(A ABM(Q|˜M(<c/219NwWI=AB:19S=N$14N19S@19N$WX19DFhcM N h`:<c:N$14:0S@1Ik

      ! " # " &%(')" -*, *        
2-2
ELF: Executable and Linkable Format

Figure 2-2: Segment Types, p_type


\R=OP1 «‰=AB:1
___________________________
PT_NULL  0
PT_LOAD  1

PT_DYNAMIC  2
PT_INTERP  3
PT_NOTE  4
PT_SHLIB  5
PT_PHDR  6

PT_LOPROC  0x70000000
PT_HIPROC  0x7fffffff
___________________________

.0/214=NN$=VL19AB19OP19C2<2GBST:CU:S@19D0˜M <>/U19N OP19OL?19N$SyƒZWX=AB:19ST=N14:C2D019r0C219D¥kª.0/UGBST<cVIY14AB19<cST<c/21


PT_NULL
YNM(JIN$=O§/219=D019Nw<c=@?AB1v/2=WI1vGBJIC2M(N19DF19CU<>NGB19Sk
.0/214=NN$=VL19AB19OP19C2<2S@Y198GBr19S=vA M(=D0=@? AB14S@19J Om19C2<>zD61&Sy8;NG ?19D+?V =C2D k
PT_LOAD
.0/21ª?VI<>19ShcN$M O§<>/21vrAB14=N14OP=YY19D{<>M<c/21w?19JIGBC2C2G C2JLM(hU<>/U14OP19p_filesz OPM N$VLS@19JIOP19C2<lkTp_memsz ^`h2<c/21
S@19JIOP19C2<cƒSTOP19OmM(NVSyGB©14f g2GBSAB=NJ 19Nw<>/2=C|<>/U14rAB14SyGB©14f gcz7<c/21v€€1957<cN$=ƒƒ
?VI<>19S=N$1vD019rC219DF<cM/2M ABDFp_memsz <c/214WI=AB:014Án=C2DF<cMhcM ABABM(Q¦<c/214S@19JIOP19C2p_filesz<cƒSTGBC2G <>GB=ABGB©19D{=N$19=2kT.0/214r0AB1
S@GB©1vOP=VLC2M <?14AB=NJ 19Nw<>/U=CR<c/214OP19OmM(NVLS@GB©1IkTE0M =D0=@?AB14Sy19J Om1&CU<219C2<>NGB19SGBCR<c/214YNM J N=O
/219=D019Nw<c=@?AB14=YY19=NwGBC|=S@8;19CUD0GBC2JLM(ND019N$z7S@M N$<c19DFM CR<c/21 OP19O? 19N&k
p_vaddr
.0/214=NN$=VL19AB19OP19C2<2S@Y01&8GBr19SD0VIC2=OPGB8)ABGBC2HIGBC2JLGBC2hcM N$Om=<>GBM CªkaZ1914€€†]VIC2=OPGB8)aZ198<>GBM C2ƒƒ?19ABM Q
PT_DYNAMIC
hcM NwOmM(N1vGBC2hcM N$Om=<>GBM Cªk
.0/214=NN$=VL19AB19OP19C2<2S@Y01&8GBr19S<>/U14ABM(8=<>GBM CR=C2D{S@GB©14M h2=nC2:0ABABec<c19N$OPG C2=<>19DFY=<c/RCU=OP14<>M
PT_INTERP
GBC2WXM(HI14=S=C|GBCU<>19NYN$19<c1&N9kª.0/UGBSTS@19JIOP19C2<2<cV Y14GBSOP19=C2GBCUJ hc:0A(M C2ABVLhcM(Nw195Z1&8:<c=@?AB14r0AB19S
fc<c/2M :JI/RGB<2OP=VLM(88;:NwhcM N Sy/2=N1&D{Mo?Ipq198;<cS@g`˜GB<XOm=VCUM(<2M 8;8;:0N OmM(N14<>/2=C|M(CU8;14GBCR=nr0AB1IkT^`h2GB<XG S
YN1&Sy19C2<czGB<2OP:Sy<2YN$1981&D614=C2VLABM(=D6=@?AB14S@19JIOP19C2<219C2<cN$V kaZ191v€€~NM(JIN=O§^`C2<c19N$YN19<>19Nƒ„ƒ&?19ABM Q
hcM Nwh`:N$<c/219NªGBC2hcM N$Om=<>GBM Cªk
.0/21v=N$N=V19AB19Om1&CU<XSyY198;GBr019ST<c/214ABM 8;=<cGBM CR=C2DFSyGB©14M h2=:5ZGBABGB=NVG C2hcM N$OP=<cGBM CªkaZ191v€„€\RM <>1vaZ198e
PT_NOTE
<cGBM(C2ƒƒ? 19ABM(Q¦hcM NwD019<>=G ABSk
.0/2G STS@19J Om19C2<X<cV Y14GBSTN$19Sy19N$WX19D]? :<X/2=ST:0C2S@Y198GBr19DFS@19OP=CU<>GB8Sk~NM(JIN$=OmST<c/2=<28;M C2<>=G CR=C
PT_SHLIB
=NN$=VL19AB19OP19C2<2M hU<>/UGBS<>VIY14D0MCUM(<28M(C2h`M(NO§<>M<c/214i+j0^@k
.0/21v=N$N=V19AB19Om1&CU<>zG h2YN19S@19C2<czS@Y198GBr19S<>/U14ABM(8=<>GBM CR=CUDFS@GB©1vM(hU<>/21vYN$M J N=Od/U1&=D61&Nw<c=@?AB1
PT_PHDR
GB<cS@19ABhczy?M <>/|GBCR<c/214r0AB14=C2DFGBC|<>/U14OP19OPM N$VLGBOm=J 14M h2<c/214YNM J N=Oˆkª.0/2G STSy19J Om1&CU<2<>VIY14OP=V
C2M <2M(88;:NwOPM N$14<c/2=C|M(C2814GBCR=nr0AB1Ik¥¡£M N1&M WX1&NzGB<2Om=VM 8;8:NwM C2ABVLGBh2<c/214Y0N$M J N=Od/U1&=D61&N
<c=@?AB14GBSY=N<2M(hU<c/214OP19OmM(NVLGBOP=JI14M h2<c/214YNM J N=OˆkT^`h2GB<2GBSTYN19S@19C2<czGB<2OP:Sy<XYN198;19D014=C2V
ABM =D0=@?AB1vS@19JIOP19C2<219C2<cN$V kaZ191v€€~NM(JIN$=Oà^cC2<c19N$Y0N$19<>19Nƒƒo?19ABM(QáhcM Nwh`:N$<c/219NªGBC2hcM N$OP=<cGBM Cªk
<c/2N$M :JI/
PT_LOPROC
«‰=AB:01&PT_HIPROC
SGBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk

              ! " #B" 7o%]')" +*, *
2-3
ELF: Executable and Linkable Format

Unless specifically required elsewhere, all program header segment types are optional. That is, a file’s
NOTE program header table may contain only those elements relevant to its contents.

Base Address
305Z198;:<c=@?AB14=C2DFS@/U=N$19DFM&? pq198<XrA 1&S/2=WI14=n“o‘™$‘;››‹$$™$™&zQR/2GB8/RGBST<>/U1‰ABM QR19Sy<XWIGBN<>:0=A(=D0D0N$19SyST=S@S@M 8;GB=<c19DFQRGB<c/
<c/214OP19OmM(NVLGBOP=JI14M h2<c/21vYN$M J N=OPƒSMo?Ipq198;<2r0AB1IkT‚-C214:Sy14M(hU<>/U1w?=S@14=D0D6N$19S@SGBS<>MN$19ABM 8;=<c14<c/214OP19OPM N$V
GBOP=JI14M h2<c/214YNM(JIN=OdD0:NGBC2JLD0VIC2=OPGB8)ABGBC2HIGBC2J k
i+CR1957198:<c=@?AB14M N S@/U=N$19DFM&? pq198<Xr0AB19ƒSU?=Sy1‰=D6D0N$19S@SGBST8=AB8;:A =<>19DFD0:0N$GBC2JL1957198:<cGBM(CRh`N$M Od<c/2N$1914WX=AB:19S}@<c/21
OP19OPM NVABM =DF=D0D0N19S@S@z7<>/214Om=57GBOm:OdY=JI14S@GB©19z=CUDF<>/214A M(Q|1&Sy<XWXGBN<>:=A =D0D0N$19SySTM h2=nYNM(JIN$=Omƒ„SABM =D0=@?AB1
S@19JIOP19C2<lkTi+S€€~NM(JIN$=OàE0M(=D6GBC2J ƒƒ
GBCR<c/2GBS8;/2=Y<c19N D61&Sy8;NG ?19S@z7<>/214WXGBN$<c:=A(=D6D0N$19S@Sy19STGBC|<>/214YNM J N=Od/219=D019NSTOPGBJI/2<2C2M <XN19YN$19Sy19C2<X<c/214=8<>:=A WIGBNe
<c:=A(=D0D0N19S@Sy19STM hU<>/21vYN$M J N=OPƒSOP19OPM N$VLGBOP=JI1IkT.0M8;M OPY:0<>14<c/21w?=Sy1‰=D0D6N$19S@SyzM(CU1‰D61&<c19N$OmGBC219ST<c/21
OP19OPM NV=D0D0N19S@S=S@S@M 8;GB=<c19DFQRG <>/R<c/214ABM QR19S@< WX=AB:14hcM N = S@19JIOP19C2<lkT‚-C214<c/219CRMo? <>=GBCUS
<c/21w?=S@14=D6D0N$19S@S?VL<cN$:C28=<>G C2J<c/214Om1&OmM(NVL=p_vaddr D0D0N$19SyST<cM-<c/214C219=N19S@<2PT_LOAD
OP:AB<cGBYAB14M h2<c/214OP=5ZGBOP:0OdY=JI14S@GB©1Ik
†]19Y19C2D6GBC2JLM(C|<>/U14H GBCUDFM h2r0AB1w?19GBC2JLABM =D019DFGBCU<>MOP19OPM NV z<c/214Om19OPM(NVL=D0D0N$19SySTOmGBJ /U<XM NwOPGBJI/2<2C2M <2OP=<>8/
<c/21 WX=AB:19Sk
p_vaddr
i+ST€€aZ198<>GBM C2Syƒ„ƒGBC|~=N$<2nD019Sy8;NG ?19S@z<c/21 S@198<>GBM CR/2=S<c/214<>VIY1 ki]A <>/2M :JI/RGB<XM 8;8:YGB19STC2M
S@Y=814GBC|<>/214r0AB19zGB<28;M C2<cN$G ? :<c1&S<cM<>/214Sy19.bss J Om1&CU<>ƒSOP19OPM N$VLGBOP=JI1IkSHT_NOBITS \RM(NOP=ABABVIz<>/U19S@14:C2GBCUGB<>GB=ABG ©1&DFD6=<>=nN1&SyGBD01
=<2<c/21419C2DFM hU<>/21vS@19JIOP19C2<cz<>/U19N$1?VLOP=HIGBC2J AB=NJ 19Nª<c/2=C GBC|<>/21v=S@S@M 8;G =<>19DFY0N$M J N=O
/219=D019Nw19AB19OP19C2<lk p_memsz p_filesz

Note Section
aM(OP19<cGBOP19S=nWI19CUD0M(NwM N SyV Sy<>19OÊ?:GBABD61&NwC21919D0S<>MOP=NHL=CRM&? pq198<2rAB14Q|GB<>/|S@Y198GB=A(GBC2h`M(NOP=<cGBM(C|<>/2=<2M <>/U1&N
YNM(JIN$=OmSTQRG ABA(8;/2198Hh`M(Nw8;M C2hcM N$Om=C28;19z8M(OPY0=<>G ? GBABGB<>VIz19<c8ZkTa198;<cGBM(CUSTM hU<>VIY1 =C2D{Y0N$M J N=O
/219=D019Nw19AB19OP19C2<cSM(hU<>VIY1 8;=Cn? 1‰:0S@19DFhcM N <c/2GBSTY:0N$YM S@1IkT.0/214C2M <>14SHT_NOTE
GBCUhcM N$OP=<cGBM CRGBCRSy1&8<>GBM C2S=C2D
YNM(JIN$=O§/219=D019N 19AB19OP19CU<>PT_NOTE
S/2M(A D0ST=C2VLC2:OL?19N M h219C2<cNGB19S@z19=8;/|M(h2Q|/2GB8/RGBST=C|=N$N=VM h eu? V <c14QRM N$D6STGBCR<c/21
hcM N$Om=<2M hU<c/21v<>=NJ 19<UYN$M 8;19S@SyM(N9kªE0=@? 1&A ST=YY01&=NX? 1&A M(Q¦<cM-/U19ABY½195ZYAB=GBCRCUM(<c14GBC2h`M(NOP=<cGBM(»C|M N$JI=C2GB©=<cGBM(C2zy?:<
<c/219VL=N$1vC2M(<UY=N$<2M hU<>/21vS@Y198GBr8;=<cGBM Cªk

Figure 2-3: Note Information


__________
__________
namesz 
 
__________
descsz 
__________
type 
 name 
 . . . 
__________
 desc 
__________
. . . 

      ! " # " &%(')" -*, *        
2-4
ELF: Executable and Linkable Format

=C2D
namesz
. name
0 /21vr0N$S@< ?VI<>19SGBC 8;M C2<c=GBCR=xC2:ABA ec<>19NOPGBC2=<c19DF8/2=N$=8<>19NwN19YN$19S@19CU<>=<cGBM(C|M h2<c/21
19C2<cN$VIƒS¥M(QR CU19NªM(NªM N$GBJIGBC2=<cM name
namesz
N&kT.6/219N$14GBSTC2M-h`M(NOP=A(OP198/2=C2GBS@Odh`M(Nw=WIM GBD0GBC2JCU=OP148;M C2¨0GB8;<cSkTj0V
8;M C2WX19C2<>GBM C2zWX19C2D0M N$ST:0S@14<c/219GBN M QRC|C2=OP19zS@:08;/R=S€€„_TØ ‡¢M OPY:0<>19Nw‡)M OPY=CUV zuƒƒ=ST<c/21
GBD019C2<cGBr19N9k^`h2C2MC2=OP14GBSTY0N$19S@19C2<cz 8;M C2<c=GBC2STÁ2kT~Ó =D0D0GBC2JLGBSYN$19S@19C2<czGBh2CU198;19S@Sy=N$VIz<>M
19C2S@:0N$1 eu?VI<>1v=ABGBJ CUOP19C2<2hcM Nw<>/U14D019S@8N$GBY<cM(N9kTaZ:8/RY=D0D0GBC2JLGBSTC2M <XGBC28AB:D019DFGBC
namesz
k
» namesz
=C2D
descsz
. desc
0 /21vr0N$S@< ?VI<>19SGBC /2M ABD{<>/21vC2M <>1vD019S@8N$GBY<cM(N9kT.0/214i+j0^UYAB=8;19STCUM-8M(C2Sy<>N=GBC2<cSTM CR=
D019S@8N$GBY<cM descsz
N$ƒS8M(C2<c19C2<cSkT^`h2C2M D019Sy8;NGBY<>M NwGBSTYN19S@19C2<cz
desc
8;M C2<c=GBC2STÁ2kT~=D0D0GBC2JLGBSTYN19S@19C2<czGBh
C2198;19SyS@=NV z7<>M19CUS@:N1 eu? V <c14=ABGBJIC2Om1&CU<2hcM Nw<>/21vC21957<2descsz CUM(<c1419C2<cN$V kTaZ:8/RY=D0D0GBC2JLGBSTC2M <XGBC28AB:D019D
GBC k »
descsz
.0/2G STQ|M(NDFJIGBWX1&S<c/214GBCU<>19NYN$19<c=<>GBM CRM hU<>/U14D019S@8N$GBY<cM(N9kª30=8/|M(NGBJ GBCU=<>M Nw8;M C2<cN$M ABSGB<cSM(Q|CR<cVIY19S@˜
type
OP:0AB<>GBYA 14GBC2<c1&NYN1&<c=<cGBM(CUSTM h2=nSyGBC2JIAB14<cV Y14WX=AB:14Om=V195ZGBS@<lkª.0/2:0S@z=xYN$M JIN$=O§OP:Sy<2N$198M(JIC2GB©1
?M <>/|<c/214C2=Om14=C2DF<c/21v<>VIY14<cM€„€:0C2D019N$Sy<>=C2D6ƒ„ƒ=xD019S@8N$GBY<cM(N9kT.0VIY19ST8;:0N$N19C2<>ABVLOP:0S@<?14C2M C2e
C219JI=<>GBWX1IkT.0/214i+j0^UD0M 19STC2M <2D019rC214Q|/2=<2D019S@8N$GBY<cM N$SOP19=Cªk

.0MGBABAB:0S@<cN$=<c19z<c/214hcM ABABM QRGBC2JLC2M <c14S@19JIOP19C2<2/2M ABD0S<>Q|M-19CU<>NGB19Sk

Figure 2-4: Example Note Segment


Ð0Á Ð0 Ð0t Ð0s
______________________
namesz ______________________ 7 
  \RMLD019S@8N$GBY<cM N
descsz ______________________ 0 
type ______________________ 1 
 X  Y  Z  âãžä 
name ______________________
  
_______________________
C  o  \0 
_____________________ 
namesz ______________________
7 
 
descsz ______________________
8 
type ______________________
3 
 X  Y  Z  âãžä 
name ______________________
  
______________________
C  o  \0  
Õ 
 
‹ n
› å
______________________ 
desc
 Õ ‹›næ 
______________________

The system reserves note information with no name (namesz= =0) and with a zero-length name
NOTE (name[0]= =’\0’) but currently defines no types. All other names must have at least one non-null
character.

              ! " #B" 7o%]')" +*, *
2-5
ELF: Executable and Linkable Format

Note information is optional. The presence of note information does not affect a program’s ABI confor-
NOTE mance, provided the information does not affect the program’s execution behavior. Otherwise, the pro-
gram does not conform to the ABI and has undefined behavior.

      ! " # " &%(')" -*, *        
2-6
Program Loading
i+ST<c/214SyV Sy<>19Od8N$19=<c19STM N =:0J Om19C2<>S=nYNM(81&SySTGBOm=J 19zG <XABM JIGB8;=ABABVL8;M YGB19S=nrAB19ƒSTSy19J Om19C2<X<cM=nWIGBN<c:=A
OP19OPM NVLSy1&JIOP19C2<lkª¿À/U19C2çÀ=C2DFGBhcçÀ<c/214SyV Sy<>19OdY0/2V SyGB8;=ABABVLN19=D0ST<c/214rAB14D019Y19CUD0STM CR<c/214YN$M JIN$=OPƒS1&5Z198;:0e
<cGBM(Cx?19/2=WXGBM(NzS@VIS@<c19OdABM =D0z19<c8ZkTiŒYNM(819S@STD0M 19STCUM(<2N$19ŠI:G N$14=nY/2VIS@GB8=A(Y=JI1‰:0C2AB19S@SGB<XN19hc19N1&CU8;19ST<c/214ABM J GB8=A
Y=JI14D0:N$G C2J195Z198;:<cGBM C2z=C2DFYNM(819S@S@19S8;M OPOPM C2ABVLAB19=WI14OP=C2VLY=JI19ST:C2N19hc19N1&CU8;19D¥k.0/219N19hcM N$14D61&A =V GBC2J
Y/2VIS@GB8=A(N$19=D0ShcN$19ŠI:019C2<>ABVLM&?WIGB=<c19ST<c/219OPzGBOmYN$M WIGBCUJSyV Sy<>19OdY19NhcM N$Om=C28;1IkT.0MMo? <>=GBCR<c/2GBS1&h`r8GB19C28;VLGBC
YN=8;<cGB8;19z1957198:<>=@? AB14=C2DFS@/2=N19DFMo?Ipq198;<2rAB19STOm:S@<2/2=WI14Sy1&JIOP19C2<2GBOP=JI19STQR/UM(Sy1‰r0AB14M(hch`S@19<cST=C2DFWIG N$<c:=A
=D0D0N19S@S@19S=N$148M(CUJ N:19C2<czOPM D0:ABM<c/214Y=JI14S@GB©1Ik
«‰GBN<>:0=A(=D0D0N19S@S@19S=C2DFr0AB14M hchcSy19<>ShcM N <c/214aØTaZ.030¡è«Ú=N$8/2GB<>198<>:0N$14Sy19J OP19CU<>S=N$148M(CUJ N:19C2<2OPM D0:ABM j
f gUM(NwAB=NJ 19NwYM QR19NSM(hUt2kªj0198;=:0S@1 jFG ST<>/U1‰Om=57GBOm:OdY=JI14S@GB©19z<c/214rAB19STQ|GBABAo?14Sy:GB<c=@?AB14»nhcM é N Y=JIe
GBC20x1000 JLN$19JI=N$D0A 1&SySTM h2Y/2VIS@G 8;=A(Y=JI14S@GB©1Ik »né

Figure 2-5: Executable File


KIGBAB14‚-hchcSy1&< KIGBAB1 «‰G N$<c:=A(i+D0D0N$19SyS
____________________
30E0KL/U19=D019N
____________________ 
0
 
Program header table ____________________
‚-<>/219NTGBC2hcM N$Om=<>GBM C 
____________________
0x100  .0195Z<2Sy1&JIOP19C2< 
 kkk 
0x8048100
 ?VI<>19S 
____________________
0x2be00  0x8073eff
0x2bf00  †]=<c=nSy1&JIOP19C2< 
 kkk 
0x8074f00
 ?VI<>19S 
____________________
0x4e00
‚-<>/219NTGBC2hcM N$Om=<>GBM C 
0x8079cff
0x30d00  kkk 
____________________

Figure 2-6: Program Header Segments


¡¼1&OL?19N .01957< †]=<c=
______________________________________________
p_type  PT_LOAD  PT_LOAD
p_offset  0x100  0x2bf00
 
p_vaddr  0x8048100 
:C2SyY198;GBr019D :CUS@Y198;G r19D
0x8074f00
p_paddr  
p_filesz  0x2be00  0x4e00
p_memsz  0x2be00  0x5e24
p_flags  PF_R + PF_X  PF_R + PF_W + PF_X
 
p_align  0x1000  0x1000
______________________________________________

i+AB<>/UM(:0J /|<>/214195Z=OPYAB19ƒSrAB14M hch`S@19<cST=C2D{WIGBN<>:0=A(=D0D0N19S@S@19S=N$148M(CUJ N:19C2<2OPM D0:ABM jFh`M(NX?M <>/|<>195Z<2=C2D


D0=<c=z:Y½<cMhcM :NwrAB14Y=JI19ST/UM(ABD{GBOPY:N14<>195Z<2M(NwD0=<c=nfcD019Y19C2D0G C2JM CRY0=J 14SyGB©14=C2DF»nr0é AB14S@VIS@<c19Oê?A M(8HSyGB©19glk
.0/21vrNS@<2<c1957<2Y0=J 1v8;M C2<>=GBCUST<c/21v30E0KL/219=D019N$z7<c/214YNM(JIN$=O§/219=D019Nw<c=@?AB19z7=C2DFM <>/U19NwGBC2hcM N$OP=<cGBM Cªk

              ! " #B" 7o%]')" +*, *
2-7
ELF: Executable and Linkable Format

.0/21vAB=S@<2<>195Z<2Y=J 14/UM(ABD0S=n8M(YVLM h2<c/21w?19JIGBC2C2GBC2JLM h2D0=<c=2k


.0/21vrNS@<2D0=<c=nY=JI14/2=ST=x8;M YVLM(hU<>/U1419C2DFM h2<c1957<lk
.0/21vAB=S@<2D0=<c=nY=JI14OP=VL8;M C2<c=GBCRr0AB14GBC2hcM NOP=<>G M(C|C2M(<2N19AB19WI=C2<2<cM-<c/214N:C2CUGBC2JLYN$M 8;19SySk
E0M J GB8=ABABVIz<>/214SyV Sy<>19Od19CUhcM(N8;19S<>/214Om19OPM(NVLY19N$OPGBSyS@GBM C2S=STGBh219=8/RS@19JIOP19C2<2QR19N1‰8M(OmYAB19<>14=CUDFS@19Y=N=<>19˜
S@19JIOP19C2<cS@ƒ=D0D0N19S@S@19S=N$14=Dpq:0S@<c19DF<>M19C2S@:N1419=8;/RABM J GB8=A(Y=JI1‰GBC|<>/214=D0D0N19S@STSyY=8;14/2=S=vSyGBC2JIAB14S@19<XM h2Y19Ne
OPGBSyS@GBM C2Skª^`CR<c/214195Z=OPYAB14=@? M(WX19z<>/U14N$19JIGBM(C|M(hU<c/214rA 14/2M(A D0GBC2JL<>/U1419C2DFM h2<c1957<2=C2D{<>/U1w?19JIGBC2C2GBC2JLM h2D0=<c=
QRGBA Ao?14OP=YY01&D{<>Q|GB8;1I}@=<2M(C214WXGBN<>:=A =D0D0N$19SySThcM N <c195Z<X=C2D{=<X=nD0GBh`hc19N$19CU<XWXGBN$<c:=A(=D0D6N$19S@ShcM N D0=<c=2k
.0/21419C2DFM h2<c/214D0=<c=nS@19J Om19C2<XN19ŠI:GBN19STS@Y198GB=A(/2=C2D0ABG C2Jh`M(Nw:C2GBC2GB<cGB=ABGB©19DFD0=<c=zQR/2G 8;/R<c/214S@VIS@<c19OdD019rCU1&S<>M
?19JIGBCRQRGB<c/R©19N$MWI=AB:019Skª.0/2:0STGBhU=nrAB19ƒSTA =S@<2D0=<>=nY=JI14GBC28AB:D019SGBC2hcM N$Om=<>GBM CRC2M <2GBCR<c/214ABM J GB8=A(OP19OPM N$V
Y=JI19z<>/U141957<cN$=CU19M(:SD0=<c=nOP:0S@<?14Sy19<2<>M©19NM(zCUM(<2<c/214:CUH C2M QRC|8;M C2<c19C2<>SM h2<c/214195Z198;:<c=@?AB1vrAB1IkT€€^cOmY:NGBe
<cGB19S@ƒƒGBC|<>/21vM(<c/219Nw<>/2N1914Y=JI19ST=N14C2M <2ABM J GB8=ABABVLY=N$<2M hU<>/21vYN$M 8;19S@SGBOm=J 19˜Q|/219<c/219N <c/214SyV Sy<>19O§1957Y0:C2JI19S
<c/219OÍGBST:CUS@Y198;G r19D¥kT.0/214OP19OmM(NVGBOm=J 14h`M(Nw<>/UGBSTYNM(JIN$=O§hcM ABABM QRS@z=SyS@:0OPGBC2J jFf g2Y=JI19Sk
»né 0x1000

Figure 2-7: Process Image Segments


«‰GBN<>:0=A(i+D0D0N$19SyS ‡¢M(C2<c19C2<cS a1&JIOP19C2<
____________________
$‘;›$‹ ­‘››®„¯9µ
0x8048000  ë 
 ?VI<>19S  .0195Z<
____________________
0x100 
0x8048100  .0195Z<2Sy1&JIOP19C2< 
 
 kkk 
 
 ?VI<>19S 
____________________
0x2be00 
Ý+‘;’c‘¥­‘››®„¯9µ
0x8073f00  
 ?VI<>19S 
____________________
0x100
____________________
$•’2­‘››®„¯9µ
0x8074000  ì 
 ?VI<>19S  †]=<c=
____________________
0xf00

0x8074f00  †]=<c=nSy1&JIOP19C2< 
 
 kkk 
 
 ?VI<>19S 
____________________
0x4e00
[+C2GBC2GB<cGB=ABGB©19DFD0=<c= 
0x8079d00 
____________________ ©19N$M4? V <c19S 
0x1024
 Û0‘žµ2 ­‘››®„¯9µ 
0x807ad24 
©19N$M4? V <c19S 
____________________
0x2dc 

‚-C214=S@Y198;<2M(hUS@19JIOP19C2<XA M(=D0GBCUJD0GBh`hc19N$SU? 19<>Q|191&C|1&5Z198;:0<>=@? AB1‰r0AB19ST=C2DFSy/2=N1&DFM&? p>198;<cSkT305Z1&8:<c=@?AB14r0AB14S@19JIe


OP19C2<cST<cVIYGB8;=ABABVL8;M C2<c=GBCR=@?SyM(AB:0<>148;M D01IkT.0MAB19<2<c/214YNM(81&SyST195Z198;:0<>148M(NN$198<>ABVIz<c/214S@19JIOP19C2<cSTOm:S@<2N19S@GBD014=<
<c/214WIGBN<>:0=A(=D0D0N$19SyS@19ST:0S@19DF<cM¢?:0GBABDF<c/2141&5Z198;:0<>=@? AB14rAB1Ikª.0/2:0ST<>/U1‰SyV Sy<>19Od:0S@19ST<c/21 WX=AB:19S
:C28/2=C2JI19D½=STWIG N$<c:=A=D0D6N$19S@Sy19Sk p_vaddr

      ! " # " &%(')" -*, *        
2-8
ELF: Executable and Linkable Format

‚-CR<>/U14M(<c/219N /U=C2D0zS@/U=N$19DFM&? p>1&8<XSy19J Om19C2<>S<>VIYGB8=ABABV8M(CU<>=GBC|YM(SyGB<>G M(C2e`GBC2D019Y19C2D019C2<28;M D01Ikª.0/UGBSTAB19<cST=


S@19JIOP19C2<cƒSTWXGBN$<c:=A(=D0D6N$19S@S8;/2=CUJ 14h`N$M OdM C214YN$M 8;19SyST<cM=C2M(<c/219NzQRGB<c/2M :<2GBC2WI=ABG D0=<>GBCUJ195Z198;:<cGBM Cn?19/2=WXGBM(N9k
.0/2M :JI/R<c/21‰SyV Sy<>19Od8/2M(M S@19STWXGBN<>:=A(=D0D0N19S@Sy19SThcM N GBC2D0GBWXGBD0:=A(YNM(819S@S@19Syz—G <XOP=GBC2<c=GBC2ST<c/214S@19JIOP19C2<cS@ƒ‹$$Ž‘;’c®í
­;™$®’c®¯ ™ kªj0198;=:0S@14YM(SyGB<cGBM(C2e`GBC2D019Y19C2D019C2<28;M D014:S@19STN19AB=<cGBWI14=D0D0N$19SyS@GBC2J4?19<cQR1919CRS@19JIOP19C2<cS@z<c/21‰D6GBhchc19N19C28;1
?19<cQR1919CRWXGBN$<c:=A(=D0D0N19S@S@19STG CROP19OPM N$VLOP:Sy<XOP=<c8;/R<c/214D0GBhch`19N$19C281 ? 19<>Q|1&19CRWXGBN$<c:=A(=D0D6N$19S@Sy19STGBCR<c/214rAB1Ik
.0/214hcM ABABM QRGBC2JL<>=@?A 1‰S@/UM(Q|STYM(SyS@G ?A 1‰S@/U=N$19DFMo?Ipq198;<XWXGBN<>:=A(=D0D0N19S@ST=S@SyGBJIC2OP19C2<cSThcM N S@19WI19N=A(YN$M 8;19S@Sy19S@zGBABAB:Sye
<cN$=<cGBC2JL8M(CUS@<c=C2<2N1&A =<>GBWX14Y0M(SyGB<>GBM C2GBC2J kT.0/214<>=@? AB14=ABS@MGBABAB:Sy<>N=<>19ST<c/21w?=Sy14=D0D0N$19SyST8;M OPY:0<>=<cGBM(CUSk

Figure 2-8: Example Shared Object Segment Addresses


aM(:N8 .01957< †]=<c= j0=S@14i+D0D0N$19SyS
IK______________________________________________________
GBAB1  0x200  0x2a400 
~NM(819S@ST  
0x0
0x8002a400  0x80000000
~NM(819S@STt  0x80000200
 
~NM(819S@STs  0x80081200  0x800ab400  0x80081000
~NM(819S@S  0x900c0200  0x900ea400  0x900c0000
»  0x900c6200  0x900f0400  0x900c6000
______________________________________________________

              ! " #B" 7o%]')" +*, *
2-9
Dynamic Linking

Program Interpreter
i+CR195Z1&8:<c=@?AB14r0AB14OP=VL/2=WI14M C21 YNM(JIN$=Oà/219=D019Nw19AB19OP19C2<lkT†]:0N$GBC2J fcj0i ‚-aZgcz7<>/214SyV Sye
<c1&O§N1&<cN$G 1&WX19ST=xY=<>/|C2=OP14h`N$M Od<c/2PT_INTERP 1 NM(819S@SGBOP_=JI14hcN$M Od<c/21
S@19JIOP19C2<2=C2DF8N$19=<c19ST<c/214GBC2GB<cGB=A(Yexec
GBC2<c19N$YN19<>19NªrA 1&ƒS¥S@19JIOP19C2<cSkT.0/2=<2GBS@zG PT_INTERP C2S@<c19=DFM(hU:S@GBCUJ<c/214M(NGBJIGBC2=A(1957198:<c=@?AB14rAB19ƒSS@19J Om19C2<XGBOm=J 19Syz<>/214SyV Sye
<c1&O§8M(OmYM(Sy19ST=xOP19OPM NVLGBOP=JI14hcM Nw<c/214GBC2<c19N$Y0N$19<c1&N9k^c<2<c/219C|GBST<c/21vGBC2<>19NYN$19<c19N$ƒSN$19SyYM(CUS@G ?GBA GB<>VL<cMN$1981&G WI1
8;M C2<cN$M A(h`N$M Od<c/214SyV Sy<>19O§=C2DFYNM WIGBD014=C|19C2WIG N$M C2OP19C2<2hcM Nw<>/U14=YYABGB8=<>GBM CRYNM J N=Oˆk
.0/21vGBC2<c1&NYN1&<c19NwN$1981&G WI19S8;M C2<>NM A(GBC|M(C21vM(hU<>Q|MQR=VISkK GBNS@<czGB<2Om=VLN$198;19GBWX14=nr0AB14D019Sy8;NGBY<>M Nw<>MN19=DF<c/214195Z19e
8;:0<>=@? AB14rAB19zYM S@G <>GBM C219DF=<2<c/21w?19JIGBC2C2GBC2J k^c<28=CR:Sy14<>/UGBSTr0AB14D019S@8N$GBY<cM N <cMN$19=DF=CUD¥îZM NwOP=Y½<c/2141957198:<c=@?AB1
r0AB1&ƒSSy1&JIOP19C2<cSGBC2<cMOP19OPM N$V kTa198;M C2D0zD019Y19C2D0G C2JLM(C|<>/214195Z198;:0<>=@?A 14rAB14h`M(NOP=<cz<>/U14S@VIS@<c19OdOP=VLABM =DF<c/21
1957198:<c=@?AB14r0AB14GBCU<>MOm19OPM(NVLGBC2Sy<>19=D{M(hUJIGBWIGBCUJL<>/21vGBC2<c19N$YN19<>19Nw=C|M(Y19C|rAB1vD019S@8N$GBY<cM(N9kT¿ÀGB<c/R<>/214YM S@SyG ?AB1
1957819Y<>G M(C|M(hU<c/214rA 14D019S@8N$GBY<cM(Nz<c/214GBCU<>19NYN$19<c19N$ƒSGBC2GB<cGB=A(YNM(819S@SS@<c=<>1vOP=<>8/219SQR/2=<2<c/214195Z198;:<c=@?AB1vrAB1
QRM :ABDF/2=WX1‰N$1981&G WI19D¥kT.0/21vGBC2<c1&NYN1&<c19NwGB<cS@19ABhUOP=V¬C2M(<UN$19ŠI:GBN14=xS@198M(C2D{GBCU<>19NYN$19<c1&N9kTi+C|GBC2<c1&NYN1&<c19NwOP=Vv?1
19GB<c/219N =xS@/2=N19DFM&? pq198<XM Nw=CR195Z198;:<c=@?AB14r0AB1Ik
iŒS@/2=N19DFMo?Ipq198;<2fc<c/214C2M(NOP=A(8=S@19g2GBSTA M(=D019DF=STY0M(SyGB<>GBM C2ecG C2D019Y19C2D019C2<czQRGB<c/R=D0D0N$19SyS@19ST<c/2=<2OP=VWX=N$V
hcNM(O§M(CU14YN$M 8;19S@S<cM-=C2M <c/219N$˜<c/214SyV Sy<>19Od8N$19=<c19STGB<cSTSy19J Om19C2<>SGBCR<c/214D0VIC2=OPGB8)S@19JIOP19C2<2=N$19=n:0S@19D+?V
f 3 ‚-aZgU=C2DFN19AB=<>19D{S@19N$WXGB8;19S7k@‡¢M(CUS@19ŠI:19C2<cABVIz=nS@/U=N$19DFM&? p>198;<2GBC2<c19N$YN19<>19Nw<>VIYGB8=ABABVLQRGBABA C2M(<
8;mmap M C2¨0GB8;é <2Q|_GB<>/|<>/21vM(NGBJ GBCU=A(1957198:<c=@?AB14r0AB19ƒ„SM(NGBJIGBC2=A(Sy19J OP19CU<X=D0D0N19S@Sy19Sk
i+CR195Z1&8:<c=@?AB14r0AB14GBSTABM =D019DF=<2r5Z19DF=D0D0N$19SyS@19S@˜<c/214SyV Sy<>19Od8N$19=<c19STGB<cSTSy19J OP19CU<>S:S@GBCUJ<c/214WIGBN<c:=A
=D0D0N19S@S@19ShcNM(O§<c/214YNM(JIN$=O§/219=D019Nw<c=@?AB1IkT‡¢M C2S@19ŠI:019C2<>ABVIz=C|195Z1&8:<c=@?AB1vrAB14G C2<>19NYN$19<c19N$ƒSWIG N$<c:=A
=D0D0N19S@S@19SOP=VL8;M ABABGBD01vQRGB<c/R<c/214rNS@<2195Z198;:<c=@?AB14r0AB19˜<c/214GBC2<c19N$YN19<>19NwGBSN$19SyYM(C2SyG ?AB14h`M(NwN1&SyM(A WIGBC2J
8;M C2¨0GB8;<cSk

Dynamic Linker
¿À/219Cn? :GBABD0GBCUJ=CR195Z198;:0<>=@?A 1‰r0AB14<c/2=<X:0S@19SD0V C2=OmGB8¥ABGBCUH GBCUJ z<c/214ABGBC2HL19D0GB<cM(Nw=D0D0ST=xYN$M J N=Od/219=D019Nw19AB19e
OP19C2<2M hU<>VIY1 <cM-=C|1957198:<c=@?AB14r0AB19z<>19ABABG C2JL<>/21vS@VIS@<c1&O§<cM-GBCUWIM H 14<c/214D6V C2=OmGB8¥ABG C2H 19Nw=S<>/21vYN$M e
JIN$=OïGBCU<>19NYN$19PT_INTERP
<c19N&k

The locations of the system provided dynamic linkers are processor–specific.


NOTE

fcj0i ‚-aZgU=C2DF<c/214D0VIC2=OmGB8¥ABG C2H 19Nw8M(M Y19N$=<c14<cM8;N$19=<c14<c/214YNM(819S@SGBOP=JI14hcM Nw<>/U14YN$M JIN$=OPz7QR/2GB8/


C2<c=GBABST<c/214_ hcM ABABM QRGBC2JL=8;<cGBM(CUS}
91Exec
i+D0D0GBC2JL<c/214195Z1&8:<c=@?AB14r0AB19ƒSTOm1&OmM(NVLS@19JIOP19C2<cST<cM<>/21vYN$M 8;19S@SGBOP=JI19˜
i+D0D0GBC2JLS@/U=N$19DFM&? p>1&8<2OP19OPM N$VLS@19JIOP19C2<cST<cM<>/U14YN$M 8;19SySTGBOP=JI19˜
~19NhcM N$OPG C2JLN$19ABM 8;=<cGBM(CUSThcM Nw<>/21v1&5Z198;:0<>=@? AB14rAB14=CUDFGB<cSTSy/2=N$19DFM&? p>198;<cS@˜
‡¢ABM S@GBC2JL<c/214rAB14D61&Sy8;NGBY<cM(Nw<>/U=<XQ|=ST:Sy19DF<cM-N19=DF<c/2141957198:<>=@? AB14rAB19zG h2M C214QR=SJ GBWX19CR<cM-<c/214D0VIC2=OPG 8
ABGBC2HI19N$˜
.0N=C2S@h`19N$NGBC2JL8;M C2<cN$M A <>M<c/214Y0N$M J N=OPz7OP=H G C2JLGB<2ABM M(HL=SGBhU<c/214Y0N$M J N=O§/2=DFN198;19GBWX19DF8M(C2<cN$M A D0GBN$198<>ABV
hcNM(O fcj0i ‚-aZglk
exec _

      ! " # " &%(')" -*, *        
2-10
ELF: Executable and Linkable Format

.0/214A GBC2H19D0G <>M N =ABSyM-8M(CUS@<cN$:8<>SWI=NGBM(:0STD0=<c=n<>/U=<X=SyS@GBSy<X<c/214D0VIC2=OPGB8)ABGBC2HI1&NwhcM N 195Z198;:<c=@?AB14=CUDFS@/2=N19DFMo?Ipq198;<


r0AB1&S7kTi+STS@/UM(Q|CR=@?M WI14GBCR€€~NM(JIN=OdÉR19=D019N$zuƒƒ<c/219S@14D0=<c=nN$19S@G D014GBCRABM =D0=@?AB14S@19JIOP19C2<cS@zOm=H GBC2JL<c/219Od=WX=GBABe
=@?AB14D6:N$GBCUJ195Z198;:0<>GBM CªkTfc‚-C28;14=JI=GBC2zN198;=ABA(<c/214195Z=8;<2S@19JIOP19C2<28;M C2<c19C2<>S=N$1vYN$M 8;19S@SyM(NecSyY198;GBr08ZkaZ1914<c/21vYN$M e
8;19SyS@M N Sy:YYAB19OP19C2<2hcM N 8M(OmYAB19<>14GBCUhcM(NOP=<cGBM Cªk g
i S@198<>GBM CRQ|GB<>/|<>VIY1 /2M ABD0STWX=N$GBM :STD0=<c=2kT.0/214Sy<>N:8<>:N14N19S@GBD0GBC2JL=<2<c/21
?19JI.dynamic
GBC2C2GBCUJM h2<c/214S@198<>GBM CR/2M ABD0S<>/2SHT_DYNAMIC
14=D0D6N$19S@Sy19STM h2M <>/219NwD0VIC2=OPGB8)ABGBC2HIGBC2JG C2hcM N$OP=<cGBM Cªk
.0/21 S@198<>GBM CRQ|GB<>/|<>VIY1 /2M ABD0ST=nS@VIO?M A(/2=S@/R<c=@?AB1Ik
.hash SHT_HASH
.0/21 =C2D S@198<>GBM C2SQRGB<c/R<>VIY1 /2M ABDF<cQRMS@19Y=N=<c14<>=@? AB19S}@<c/214JIABMo? =A(M hchcSy1&<
<c=@?AB14.got =C2D{<>/U14YN$.pltM 8;19D0:0N$14ABG C2H =JI14<c=@?AB1IkTaSHT_PROGBITS
198;<cGBM(CUSU?19ABM Q·1957YA =GBCR/2M(Q¦<>/214D0VIC2=OPGB8)ABGBC2HI19N :Sy1&S=C2D
8;/U=C2J 19S<>/U14<>=@? AB19ST<cM8;N1&=<c14OP19OmM(NVLGBOP=JI1&ShcM NwMo?Ipq198;<2r0AB19Sk
j0198;=:0S@1419WI19NVi+j0^`ec8M(CUhcM(NOPGBCUJYNM(JIN$=O§GBOPYM N$<cST<c/21w?=SyGB8¥SyV Sy<>19O§S@19N$WXGB8;19ShcNM(O§=nS@/2=N19DFMo?Ipq198;<2ABG ?N=N$VIz
<c/214D0VIC2=OPGB8)ABGBCUH 19NwY=N$<cGB8GBY=<>19SGBC|19WI19N$VLi+j0^`ec8M(CUhcM(NOPGBCUJY0N$M J N=Od195Z198;:0<>GBM Cªk
i+ST€€~NM(JIN$=O§E0M =D0GBC2JIƒ„ƒ195ZYAB=GBC2SGBCR<c/214YN$M 8;19SyS@M N Sy:YYAB19Om1&CU<>zSy/2=N$19DFM&? p>198;<cSTOP=VLM 8;8:YVLWIGBN<>:0=A(OP19OPM N$V
=D0D0N19S@S@19S<c/2=<2=N$14D0G hchc19N1&CU<2hcN$M O§<>/21v=D0D0N$19SyS@19STN198;M N$D019D{GBCR<c/214r0AB19ƒSTYNM J N=Od/219=D019Nw<c=@?AB1IkT.0/21‰D0VIC2=OmGB8
ABGBC2HI19NwN$19ABM 8;=<c19ST<c/214OP19OmM(NVLGBOP=JI1&z7:YD0=<cGBC2JL=@?SyM(AB:0<>14=D0D6N$19S@Sy19SU? 1&h`M(N14<c/214=YYABGB8=<>GBM CRJI=GBC2S8;M C2<cN$M Ak
i+AB<>/UM(:0J /R<c/214=@? S@M AB:<c1‰=D6D0N$19S@SWI=A :19STQ|M(:A D+?148;M N$N198;<2GBh2<c/214ABG ? N$=NVQ|19N$14ABM =D019DF=<2<>/214=D0D0N19S@Sy19S
S@Y198GBr19D{GBCR<c/214YN$M JIN$=O§/219=D019N <c=@?AB19z<c/2GBSC2M N$OP=ABA VGBSC2M <X<c/2148=S@1Ik
^`h2<>/U1‰Y0N$M 8;19S@S19C2WIGBNM(CUOP19C2<ªŸuS@191 fcj0i ‚-aZgc¤28M(CU<>=GBCUST=vWX=N$GB=@? AB14C2=OP19D QRGB<c/R=vC2M C2ecCU:ABA
WX=AB:19z<c/214D0VIC2=OmGB8¥A GBC2H 19NwYNM(819S@exec S@19S=ABA N$19AB_M 8;=<cGBM Cn? 1&h`M(N14<cN$=C2Syhc19N$NGBC2JL8M(C2<cNLD_BIND_NOW
M(A <>M<c/214Y0N$M J N=OˆkKIM(Nw1957=Ome
YAB19z=ABA(<c/214hcM(A ABM(Q|GBC2J19CUWIGBNM(C2Om19C2<X19C2<cN$G 1&SQRM :ABDFS@Y01&8GBhcVL<>/UGBSU?19/2=WXGBM N&k

LD_BIND_NOW=1
LD_BIND_NOW=on
LD_BIND_NOW=off
‚ <>/219NQRGBSy19z
- 19GB<c/219N D0M 19STC2M <2M(88;:NwGBCR<c/21419C2WIGBNM C2OP19C2<2M(Nw/2=ST=nCU:ABA(WX=AB:1IkT.0/21‰D0VIC2=OPG 8
ABGBC2HI19NwGBSTY19NLD_BIND_NOW
OPGB<c<>19D{<>M19WI=AB:0=<>14Y0N$M 8;19D0:N14ABGBC2HI=JI14<>=@? AB1419C2<>NGB19SAB=©GBABV z7<>/2:0ST=WXM(G D0GBC2JLS@VIO?M A(N19S@M AB:<cGBM(C|=C2D
N1&ABM 8;=<cGBM CRM WI19N/219=DFh`M(Nwhc:0C28;<cGBM(CUST<c/2=<2=N14C2M <X8=ABAB19D¥kaZ1914€€~NM(819D0:N14E0GBC2HI=J 1v.0=@?AB19ƒƒGBC|<>/UGBSTY0=N$<2hcM NwOPM N$1
GBC2h`M(NOP=<cGBM(Cªk

Dynamic Section
^`h2=CRM&? p>1&8<2rAB14Y=N<>GB8GBY=<c1&SGBCRD0VIC2=OPG 8¥ABGBC2HIGBC2JIzGB<cSTYNM(JIN$=O§/219=D019N <c=@?AB14Q|GBABA(/2=WX14=CR19AB19OP19C2<2M(hU<>VIY1
kª.0/UGBST€€S@19JIOP19C2<cƒƒ8;M C2<>=GBCUST<c/21 S@198<>GBM CªkTiðSyY198;GB=A(S@VIO?M ABz zAB=@?19ABST<c/21
S@PT_DYNAMIC
198<>GBM C2zQ|/2GB8;/R8M(CU<>=GBCUST=CR=NN$=VLM(h2<c/214hcM ABABM QR.dynamic
GBCUJSy<>N:8;<c:N19Sk _DYNAMIC

              ! " " B" 7o%]')" +*, *
2-11
ELF: Executable and Linkable Format

Figure 2-9: Dynamic Structure

typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;

extern Elf32_Dyn _DYNAMIC[];

KIM(Nw19=8;/|Mo? p>198;<2QRGB<c/R<c/2GBS<>VIY19z 8;M C2<cN$M ABS<c/21vGBC2<c19N$Y0N$19<c=<>GBM C|M h k


d_tag d_un
.0/219Sy1 M&? pq198<>SN$19YN19S@19C2<2GBC2<c19J 19NwWX=AB:19SQRGB<c/RWX=N$GBM :SGBC2<c19N$YN19<>=<cGBM(CUSk
d_val Elf32_Word
.0/219Sy1 M&? pq198<>SN$19YN19S@19C2<2YNM(JIN$=O§WIG N$<c:=A(=D0D0N19S@Sy19SkTi+STOP19C2<cGBM C219DFYN1&WXGBM :S@ABVIz
d_ptr
=nr0AB19ƒ„SElf32_Addr
WIGBN<c:=A(=D0D0N19S@S@19SOPGBJI/2<2C2M(<2OP=<c8;/|<>/214Om19OPM(NVLWIGBN<>:0=A(=D0D0N$19SyS@19SD0:N$G C2J195Z198;:<cGBM Cªk
¿À/219CRGBCU<>19NYN$19<cGBC2JL=D0D0N$19SyS@19ST8M(C2<c=GBC219DFGBC|<>/214D0VIC2=OmGB8¥S@<cN:8;<c:N19z<>/214D0VIC2=OPG 8¥ABGBC2HI19N 8M(Ome
Y:<c19ST=8<>:=A =D0D0N$19S@Sy19S@z@?=Sy19DFM(CR<c/214M N$GBJIGBC2=A(r0AB14WI=AB:14=C2DF<c/214OP19OmM(NV‰?=Sy14=D0D0N$19SySkKIM N
8;M C2SyGBS@<c19C28;VIzrAB19STD0M¯I;’28;M C2<c=GBCRN19ABM 8;=<cGBM(C|19C2<>NGB19S<>M€€8;M N$N198;<cƒ„ƒ(=D0D0N$19SyS@19SGBCR<c/214D0VIC2=OPG 8
S@<cN$:08;<c:N1 k

.0/214h`M(ABA M(Q|GBC2J<c=@?AB14Sy:OPOm=N$GB©19S<>/214<c=JN19ŠI:GBN19OP19C2<cSThcM N 195Z198;:0<>=@?A 1‰=CUDFS@/2=N19DFMo?Ipq198;<2r0AB19SkT^`h2=n<c=JG S


OP=NH 19D{€€„Om=C2D0=<cM(NV zuƒƒ<c/219CR<c/214D0VIC2=OmGB8¥ABG C2H GBCUJL=N$N=VLhcM(Nw=C|i+j0^ce`8;M C2hcM N$OmGBC2JLrAB1vOP:Sy<2/2=WI14=C|19C2<cN$VLM h
<c/2=<U<>VIY1IkTE0GBH 19Q|GBS@19z€€M Y<>GBM C2=ABƒƒOP19=CUST=C|19C2<cN$VLhcM Nw<>/U14<>=JLOm=VL=YY19=NX?:<2GBSC2M <2N$19ŠI:GBN19D¥k

Figure 2-10: Dynamic Array Tags, d_tag


\R=OP1 «‰=AB:1 305Z198;:<c=@?AB1 aZ/U=N$19DF‚)?Ipq198;<
d_un
_______________________________________________________________________
 B
G I
J 2
C M(N19D  OP=CUD0=<>M N$V  OP=CUD0=<>M N$V
DT_NULL 0 
 M 
Y >
< B
G M 2
C 
= A  M(Y<cGBM C2=A
DT_NEEDED 1  d_val 
   M Y<>GBM C2=A  M(Y<cGBM C2=A
DT_PLTRELSZ  2  d_val  M Y<>GBM C2=A  M(Y<cGBM C2=A
DT_PLTGOT  3  d_ptr  OP=C2D6=<>M N$V  OP=CUD0=<>M N$V
 4  d_ptr  
 OP=C2D6=<>M N$V  OP=CUD0=<>M N$V
DT_HASH
 5  d_ptr
DT_STRTAB
 P
O 
= 2
C 6
D 
= >
< M $
N V  OP=CUD0=<>M N$V
6  d_ptr 
 OP=C2D6=<>M N$V  M(Y<cGBM C2=A
DT_SYMTAB
 
DT_RELA  7  d_ptr  OP=C2D6=<>M N$V  M(Y<cGBM C2=A
DT_RELASZ  8  d_val  OP=C2D6=<>M N$V  M(Y<cGBM C2=A
DT_RELAENT  9  d_val  
 10  d_val  OP=C2D6=<>M N$V  OP=CUD0=<>M N$V
DT_STRSZ
 P
O 
= 2
C 6
D 
= >
< M $
N V  OP=CUD0=<>M N$V
11  d_val 
 M Y<>GBM C2=A  M(Y<cGBM C2=A
DT_SYMENT
 
DT_INIT  12  d_ptr  M Y<>GBM C2=A  M(Y<cGBM C2=A
DT_FINI  13  d_ptr  GBJIC2M(N19D  M(Y<cGBM C2=A
 14  d_val  
 M Y<>GBM C2=A  GBJIC2M N$19D
DT_SONAME
 15  d_val
DT_RPATH
B
G I
J 2
C (
M 
N 9
1 D B
G I
J 2
C M $
N 9
1 D  M(Y<cGBM C2=A
DT_SYMBOLIC  16  

      ! " # " &%(')" -*, *        
2-12
ELF: Executable and Linkable Format

Figure 2-10: Dynamic Array Tags, d_tag (continued )


\R=OP1 «‰=AB:1 305Z198;:<c=@?AB1 aZ/U=N$19DF‚)?Ipq198;<
d_un
_______________________________________________________________________
DT_REL  17  d_ptr  OP=C2D6=<>M N$V  M(Y<cGBM C2=A
 P
O 
= 2
C 6
D 
= >
< M $
N V  M(Y<cGBM C2=A
DT_RELSZ 18  d_val 
   P
O 
= 2
C 6
D 
= >
< M $
N V  M(Y<cGBM C2=A
DT_RELENT  19  d_val  M Y<>GBM C2=A  M(Y<cGBM C2=A
DT_PLTREL  20  d_val  M Y<>GBM C2=A  GBJIC2M N$19D
DT_DEBUG  21  d_ptr  
B
G I
J 2
C (
M 
N 9
1 D (
M 
Y c
< B
G M 2
C 
= A  M(Y<cGBM C2=A
DT_TEXTREL  22  
 M 
Y >
< B
G M 2
C 
= A  M(Y<cGBM C2=A
DT_JMPREL 23  d_ptr 
  
: 2
C y
S 
Y 9
1 ;
8 B
G 0
r 9
1 D  
: 2
C @
S 0
Y &
1 
8 B
G 
r 9
1 D  :CUS@Y198;G r19D
DT_LOPROC  0x70000000  :C2SyY198;GBr019D  :C2S@Y01&8GBr19D  :CUS@Y198;G r19D
DT_HIPROC  0x7fffffff  
_______________________________________________________________________ 

i+CR19C2<cN$VLQ|GB<>/|= <c=JLOP=N$HIS<>/21v1&CUDFM h2<c/21 =NN$=V k


DT_NULL DT_NULL _DYNAMIC
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214S@<cN$G C2J<c=@?AB14M hchcSy19<XM h2=nC2:0ABABec<c19N$OmGBC2=<>19DFSy<>NGBC2JIzJ G WIGBC2JL<c/214C2=OP14M h
DT_NEEDED
=nCU191&D61&D{ABG ?N=N$V kT.0/214M hchcSy19<XGBS=CRGBCUD0195xGBCU<>M<c/214<>=@? AB14N$198M(ND019DFGBCR<c/21
19C2<cN$V k¥aZ1914€€aZ/2=N19DF‚¢? pq198<X†+19Y19C2D019C28;G 1&SyƒƒhcM(NwOPM N14GBC2hcM N$Om=<>GBM CR=@?M :DT_STRTAB <2<c/219S@14C2=Om19Sk
.0/214D6V C2=OmGB8¥=NN$=VLOP=VL8;M C2<c=GBCROP:0AB<>GBYA 1‰19CU<>NGB19STQ|GB<>/R<c/2GBS<>VIY1Ikª.6/219S@1419CU<>NGB19S@ƒN19AB=<>G WI1
M N$D019NwGBSSyGBJ C2GBr08;=CU<>z7<>/2M :JI/|<>/219GBNwN19AB=<cGBM(C|<cM19C2<>NGB19SM(hUM <>/U1&Nw<cVIY19SGBSC2M(<lk
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214<cM(<c=A(SyGB©19zGBCn?VI<c1&SyzM h2<>/U14N$19ABM 8;=<cGBM(C|19C2<>NGB19ST=SyS@M 8;GB=<c19DFQRGB<c/R<c/21
DT_PLTRELSZ
YNM(81&D6:N$1vABGBC2HI=JI14<c=@?AB1IkT^`h2=C|19C2<cN$VLM hU<>VIY1 GBSTY0N$19S@19C2<cz=
OP:0S@<X=88;M OPY=C2VGB<lk DT_JMPREL DT_PLTRELSZ

.0/2G ST19AB19OP19C2<2/2M ABD0ST=C|=D0D0N$19SyST=S@SyM(8GB=<>19DFQ|GB<c/R<>/U14YN$M 8;19D0:N14ABGBC2HI=J 14<c=@?AB14=C2D)îZM N <c/21


DT_PLTGOT
JIABMo? =A(M(h`hcS@19<2<c=@?AB1IkaZ1914<c/2GBSTSy198;<cGBM(CRGBC|<>/214YNM(819S@SyM(NwS@:YY0AB19OP19C2<Xh`M(NwD019<>=G ABSk
.0/2G ST19AB19OP19C2<X/UM(ABD0ST<c/214=D0D0N1&SySTM h2<>/214S@VIO? M(A(/2=Sy/R<>=@? AB19z—D019Sy8;NG ?19DFGBCR€„€ÉR=Sy/R.0=@?A 1 k ƒƒ
DT_HASH
.0/2G ST/2=Sy/R<c=@?AB14N$19h`1&NST<cM<>/214SyV OL?M A(<>=@? AB14N$19hc19N19C28;19D+? V<c/21 19AB19OP19C2<lk
DT_SYMTAB
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214=D0D0N$19SySTM h2<>/U14S@<cN$GBC2JL<>=@? AB19zD019S@8;NG ?19DFGBC|~=N$<22kaZVIO?M AC2=Om19S@z
DT_STRTAB
ABG ?N=N$VLC2=Om19S@z=C2DFM <c/219N Sy<>NGBC2JISTN19S@GBD014GBC|<>/2G ST<c=@?AB1Ik
.0/2G ST19AB19OP19C2<2/2M(ABD6ST<>/U1‰=D0D6N$19S@SM(h2<c/214S@VIO? M(A(<c=@?AB19zD019S@8N$G ? 1&DFGBC|~=N$<2zQRGB<c/
DT_SYMTAB
19C2<cN$GB19ShcM(Nw<c/214steu?GB<28;AB=SySTM h2r0AB19Sk
Elf32_Sym
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214=D0D0N$19SySTM h2=nN$19ABM 8;=<cGBM CR<>=@? AB19zD019S@8;NG ?19DFGBC|~=N$<22kT30CU<>NGB19STGBCR<c/21
DT_RELA
<c=@?AB1‰/U=WI1‰195ZYABGB8GB<X=D0D019C2D0S@zS@:08;/R=S hcM N <c/214steu? GB<Xr0AB148;AB=SySkTi+CRM&? pq198<2rAB1
OP=VL/2=WI14Om:AB<cGBYAB14N$19ABM 8;=<cGBM(CRSy198;<cGBM(CUElf32_Rela SkT¿À/219Cn?:0GBABD0GBC2JL<c/214N1&A M(8=<>GBM CR<c=@?AB14h`M(Nw=CR195Z19e
8;:0<>=@? AB14M(NwS@/U=N$19DFM&? p>198;<2rAB19z<c/214ABGBCUH19D0G <>M N 8=<>19CU=<>19S<>/2M S@14Sy198;<cGBM(CUST<cMhcM N$O§=nS@GBC2JIAB1
<c=@?AB1Iki]A <>/2M :JI/R<c/214S@198;<cGBM C2STN19OP=GBCRGBCUD019Y19C2D019C2<2GBCR<>/U14Mo? p>198;<2rAB19z<c/214D0VIC2=OPGB8)ABGBC2HI19N
S@1919ST=nS@G C2J AB14<c=@?AB1IkT¿À/219CR<c/214D0VIC2=OPGB8)ABGBC2HI19N 8N$19=<c1&S<c/214YN$M 8;19SySTGBOm=J 14hcM Nw=CR1957198:<ce
=@?AB14r0AB14M N =D0D6ST=nSy/2=N$19D{Mo? p>198;<2<cM-<c/214YNM(819S@SGBOP=JI19zGB<2N$19=D0S<>/214N19ABM 8;=<cGBM(C|<>=@? AB14=C2D
Y19N$h`M(NOPS<>/214=SyS@M 8;GB=<c19DF=8;<cGBM(CUSkT^`h2<c/2GBST19AB19OP19C2<2GBSTYN19S@19C2<cz<>/U1‰D6V C2=OmGB8¥S@<cN:8;<c:N1‰Om:S@<
=ABS@M-/U=WI1 =C2D 19AB19OP19C2<cSkT¿À/219C|N$19ABM 8;=<cGBM C|GBS€€OP=C2D0=<cM(NV ƒƒ
hcM Nw=xrAB19z719DT_RELASZ GB<>/U1&N M NDT_RELAENT OP=VLM 8;8:Nwfu?M <c/R=N14Y19N$OmGB<><c19D+?:0<2C2M(<2N19ŠI:GBN19D0glk
DT_RELA DT_REL
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214<cM(<c=A(S@GB©19zGBCx?V <c19S@zM h2<c/21 N1&ABM 8;=<cGBM C|<c=@?AB1Ik
DT_RELASZ DT_RELA

              ! " #B" 7o%]')" +*, *
2-13
ELF: Executable and Linkable Format

.0/2G ST19AB19OP19C2<2/2M(A D0ST<>/U1‰SyGB©19zGBCn?VI<>19SyzM(h2<c/21 N1&ABM 8;=<cGBM C½19C2<cN$V k


DT_RELAENT DT_RELA
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214S@GB©19zGBCn? V <c19S@zM h2<c/214S@<cN$GBCUJ<c=@?AB1Ik
DT_STRSZ
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214S@GB©19zGBCn? V <c19S@zM h2=nS@VIO? M(A(<c=@?AB1419C2<cN$V k
DT_SYMENT
.0/2G ST19AB19OP19C2<X/UM(ABD0S<>/214=D0D0N19S@STM h2<>/U1‰GBC2G <>GB=ABGB©=<cGBM CRhc:C28<>G M(C2zD0GBSy8;:SyS@19DFGBCR€€^cCUGB<>GB=ABG ©=<>GBM C
DT_INIT
=C2DF.019NOPGBC2=<cGBM CRK :0C28;<cGBM C2S@ƒƒ?19ABM QÄk
.0/2G ST19AB19OP19C2<2/2M(ABD0S<>/U1‰=D0D0N19S@STM h2<c/214<>19NOPGBC2=<cGBM CRhc:C28<>GBM C2zD0GBSy8;:SyS@19DFGBCR€€^cCUGB<>GB=ABG ©=<>GBM C
DT_FINI
=C2DF.019NOPGBC2=<cGBM CRK :0C28;<cGBM C2S@ƒƒ?19ABM QÄk
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214S@<cN$G C2J<c=@?AB14M hchcSy19<XM h2=nC2:0ABABec<c19N$OmGBC2=<>19DFSy<>NGBC2JIzJ G WIGBC2JL<c/214C2=OP14M h
DT_SONAME
<c/214S@/2=N19DFMo?Ipq198;<lkT.0/214M hchcSy19<XGBS=CRGBCUD0195xGBCU<>M<c/214<>=@? AB14N$198M(ND019DFGBCR<c/21
19C2<cN$V k¥aZ1914€€aZ/2=N19DF‚¢? pq198<2†]19Y19C2D019C28GB19S@ƒƒ?19ABM Q·h`M(NwOPM N$14GBCUhcM N$OP=<cGBM CRDT_STRTAB =@?M :<2<c/219S@1
C2=OP19S7k
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214S@<cN$G C2J<c=@?AB14M hchcSy19<XM h2=nC2:0ABABec<c19N$OPGBCU=<>19DFSy19=N$8;/|ABG ?N=N$VLS@19=N8;/RY=<c/
DT_RPATH
S@<cN$G C2J zD0GBSy8;:SyS@19DFGBCR€„€a/2=N$19DF‚¢? pq198<X†]19Y19C2D61&CU8;GB19Sk ƒƒ+.0/214M hchcSy19<XGBS=CRGBC2D0195]GBC2<cM-<c/214<c=@?AB1
N1&8M(ND019DFG CR<c/21 19C2<cN$V k
DT_STRTAB
.0/2G ST19AB19OP19C2<cƒSTYN1&Sy19C28;14GBCR=nSy/2=N$19DFM&? p>198;<XA G ?N$=NVL=AB<>19NST<c/214D0V C2=OmGB8¥ABGBCUH 19Nƒ„SS@VIO?M A
DT_SYMBOLIC
N1&SyM(AB:0<>GBM C|=ABJ M NGB<>/2O§h`M(NwN19hc19N$19C2819SQRGB<c/2GBC|<>/21vABG ?N=N$V kT^`C2S@<c19=DFM h2Sy<>=N<>GBCUJ=xS@VIO?M A
S@19=N8;/RQ|GB<c/R<>/U141&5Z198;:0<>=@? AB14rAB19z<c/214D0VIC2=OPGB8)ABGBC2HI19N Sy<>=N<>ShcN$M Od<c/214Sy/2=N$19DFM&? p>198;<2GB<>Sy19ABhlkT^`h
<c/214S@/2=N19DFMo?Ipq198;<2hc=GBABS<>MSy:YYABVL<>/214N19hc19N$19CU8;19DFS@VIO? M(ABz<c/214D0VIC2=OPGB8)ABGBC2HI19N <c/219C
S@19=N8;/219S<>/214195Z198;:<c=@?AB14r0AB1‰=CUDFM(<c/219N Sy/2=N$19DFM&? pq198<>S=ST:Sy:=Ak
.0/2G ST19AB19OP19C2<XGBSS@GBOPGBA =N <>M z1&5Z8;19Y<2GB<>ST<c=@?AB14/2=STGBOPYA GB8;GB<X=D0D61&CUD0S@zS@:8/R=S
DT_REL
hcM N <c/214steu? GB<XDT_RELA
r0AB148;AB=SySkT^`h2<c/2GBST19AB19OP19CU<XGBSYN$19S@19CU<>z<c/214D0VIC2=OPGB8)S@<cN$:8<>:0N$1
OP :0S@<X=ABS@M-/U=WI1
Elf32_Rel
=C2D 19AB19OP19C2<cSk
DT_RELSZ DT_RELENT
.0/2G ST19AB19OP19C2<2/2M ABD0ST<c/214<cM(<c=A(S@GB©19zGBCx?V <c19S@zM h2<c/21 N1&ABM 8;=<cGBM C|<c=@?AB1Ik
DT_RELSZ DT_REL
.0/2G ST19AB19OP19C2<2/2M(A D0ST<>/U1‰SyGB©19zGBCn?VI<>19SyzM(h2<c/21 N1&ABM 8;=<cGBM C½19C2<cN$V k
DT_RELENT DT_REL
.0/2G STOP19OL?19NwS@Y198;GBr019ST<c/214<cVIY14M(hUN$19ABM 8;=<cGBM CR19C2<cN$VL<cM-Q|/2GB8/R<c/214YN$M 8;19D0:0N$14ABG C2H =JI14<c=@?AB1
DT_PLTREL
N1&h`19N$Sk.0/21 OP19O? 19N /2M(A D0S M N z7=S=YYN$M YN$G =<>1IkTi+ABA N$19ABM 8;=<cGBM(CUS
GBCR=nY0N$M 8;19D0:d_val N14ABGBC2HI=J 14<c=@?AB14Om:S@<2:DT_RELSy14<>/214Sy=OPDT_RELA
14N$19ABM 8;=<cGBM Cªk
.0/2G STOP19O?19NwGBST:Sy1&DFh`M(N D01? :JIJ GBC2J kT^`<cST8M(CU<>19C2<cS=N$14CUM(<2S@Y01&8GBr19D{hcM Nw<>/21vi]j0^`˜7YN$M e
DT_DEBUG
JIN$=OPS<c/2=<2=8;8;19SyST<c/2GBS19C2<cN$VL=N14C2M(<2i+j0^`ec8M(C2h`M(NOPGBC2J k
.0/2G STOP19O? 19N$ƒST=@? S@19C281‰SyGBJIC2GBr19S<>/2=<2C2MN$19ABM 8;=<cGBM CR19C2<cN$VLS@/2M :ABDF8=:S@14=nOmM(D0GBr08;=<cGBM CR<>M
DT_TEXTREL
=nC2M C2ecQ|N$GB<c=@?AB14Sy19J OP19CU<>z=SS@Y198;G r19D+?VL<c/214S@19JIOP19C2<2Y19N$OPG S@S@GBM C2SGBCR<c/214YN$M JIN$=Od/U19=D019N
<c=@?AB1IkT^`h2<c/2GBSOP19O? 19N G STYN19S@19C2<czM C214M NwOPM(N14N19ABM(8=<>GBM CR19CU<>NGB19STOmGBJ /U<XN19ŠI:19S@<
OPM D0GBr08;=<cGBM(C2S<cM-=nCUM(C2e`QRNGB<>=@? AB14S@19J Om19C2<>z7=C2DF<c/214D0V CU=OPGB8¥A GBC2H 19Nw8;=C|YN$19Y=N14=8;8;M ND0e
GBC2JIABV k
^`h2YN19S@19C2<cz<>/UGBST19C2<cN$G 1&SyƒS OP19O? 19N /2M ABD0ST<c/214=D0D0N19S@STM h2N19ABM(8=<>G M(CR19C2<cN$G 1&S=S@SyM(8GBe
DT_JMPREL
=<c1&D{S@M AB19ABVLQRGB<c/|<>/21vYN$M 8;d_ptr 19D0:0N$14ABGBCUH =JI14<c=@?AB1Ik¥aZ19Y=N=<>GBC2JL<c/219S@1vN$19ABM 8;=<cGBM(C|19C2<cN$GB19SAB19<cST<c/21
D0VIC2=OPGB8)ABGBC2HI19N GBJIC2M(N14<>/U19OdD0:NGBC2JLYN$M 8;19S@SGBC2GB<cGB=ABGB©=<cGBM(CUzGBh2AB=©V4?GBC2D0GBCUJGBS1&CU=@?AB19D¥kT^`h
<c/2GBS19C2<>NVLGBSYN$19Sy1&CU<>z7<>/21vN$19AB=<c19DF19C2<cN$GB19SM h2<cVIY19S =C2D OP:0S@<
=ABS@M‰?14Y0N$19S@19C2<lk DT_PLTRELSZ DT_PLTREL

<c/2N$M :JI/
DT_LOPROC
«‰=AB:0DT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1‰N=C2J 14=N1‰N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk

      ! " # " &%(')" -*, *        
2-14
ELF: Executable and Linkable Format

305Z8;19Y<2h`M(Nw<c/21 19AB19OP19C2<2=<2<c/21419C2D{M h2<c/214=NN$=VIz=CUDF<c/214N19AB=<>GBWX14M N$D019NwM h 19AB19OP19C2<cS@z


19C2<cN$GB19SOP=VL=YDT_NULL
Y01&=NwG CR=C2VLM ND019N&kT.0=JLWX=AB:19STCUM(<2=YY19=NGBC2JLGBCR<c/214<>=@? AB14=N$14N19S@19N$WXDT_NEEDED
19D¥k

Shared Object Dependencies


¿À/219CR<c/214ABGBCUH19D0G <>M N YNM 8;19S@Sy19ST=CR=N8;/UGBWI14ABG ? N$=NV zG <X195Z<>N=8;<cSTA G ?N$=NVLOP19O?19NST=CUDF8;M YGB19S<>/219O§GBC2<cM-<c/21
M :<>Y0:<2Mo?Ipq198;<UrAB1Ikª.6/219S@14S@<c=<>G 8;=ABABVLABGBC2HI19DFS@19N$WXGB8;19S=N$14=WI=GBA =@?AB14D0:NGBC2J195Z198;:<cGBM CRQRGB<c/2M :<2GBC2WIM ABWXGBC2J<c/21
D0VIC2=OPGB8)ABGBC2HI19N&kaZ/U=N$19DFM&? pq198<>S=ABS@MYN$M WIGBD014Sy19N$WXGB8;19S@z=CUDF<>/214D0VIC2=OmGB8¥ABGBC2HI19N Om:S@<2=<><c=8;/|<>/214YNM Y19N
S@/U=N$19DFM&? p>198;<2rAB19S<>M<c/214YNM(819S@SGBOP=JI14hcM N 195Z198;:<cGBM Cªkª.0/2:0ST1957198:<c=@?AB14=C2DFS@/2=N19DFMo?Ipq198;<2rAB19STD019Sy8;NG ?1
<c/219GBN S@Y198;G r8¥D019Y19C2D019C28GB19Sk
¿À/219CR<c/214D0VIC2=OPGB8)ABGBC2HI19N 8N$19=<c19ST<c/214OP19OPM NVSy19J OP19CU<>ShcM N =CRM&? p>198;<2rAB19z<c/214D019Y19C2D019C28GB19STf`N$198;M ND019DFGBC
19C2<cN$GB19SM(hU<>/214D0VIC2=OmGB8¥Sy<>N:8;<c:N19g2<c1&A A(QR/2=<2S@/U=N$19DFM&? pq198<>S=N$14C21919D019DF<cMS@:YY0ABV<c/21
YDT_NEEDED NM(JIN$=Omƒ„SS@19NWIGB819SkTj0VLN1&Y01&=<c19D0ABVL8;M C2C2198;<cGBC2JLN$19h`19N$19C281&D{S@/2=N19DFMo?Ipq198;<cST=CUDF<>/U1&G N D019Y19C2D019C28GB19S@z<c/21
D0VIC2=OPGB8¥A GBC2H 19NX?:GBABD0S=v8M(OmYAB19<>14YNM(819S@STGBOm=J 1IkT¿À/219CRN$19SyM(ABWXGBC2JLS@VIO?M ABGB8¥N19hc19N$19C2819S@z<>/U1‰D0VIC2=OmGB8
ABGBC2HI19N 195Z=OPGBCU1&S<>/U14S@VIO?M A(<c=@?AB19STQ|GB<>/|=T?N$19=D0<c/2e`rNS@<2S@19=N$8/ªkT.0/2=<2GBSyzGB<2rNS@<2ABM M(HIS=<X<c/214SyV OL?M A(<c=@?AB14M h
<c/2141957198:<c=@?AB14YNM(JIN$=O§GB<cS@19ABhcz<c/219C|=<X<c/214SyV OL?M(A <>=@? AB19STM h2<c/21 19C2<cN$GB19SfcGBC|M(ND019N$g`z<c/219CR=<2<c/21
S@198M(C2DFAB19WI19A 19C2<cN$GB19Syz=C2DFS@MM CªkaZ/U=N$19DFM&? pq198<Xr0AB19DT_NEEDED
STOm:S@<?14N19=D0=@?AB1w?VL<c/214YN$M 8;19SyS@˜M <>/U1&N
Y19N$OmGBS@SyGBM(CUST=DT_NEEDED
N14C2M <2N$19ŠI:G N$19D¥k

Even when a shared object is referenced multiple times in the dependency list, the dynamic linker will
NOTE connect the object only once to the process.

\R=OP19SGBCR<c/214D019Y19C2D019C28;VLABGBSy<X=N148;M YGB19ST19GB<c/219N M h2<c/21 S@<cN$G C2J SM N <c/214Y=<c/RC2=Om1&SM h2<c/214S@/2=N19D


M&? pq198<>ST:0S@19DF<cM¢?:0GBABDF<>/U1‰M&? p>198;<2rAB1IkKIM N 1957=OmYAB19zGBh2<c/2DT_SONAME 14ABGBC2HL19D0GB<cM(NX?:GBA D0ST=CR195Z198;:<c=@?AB14r0AB14:S@G C2JM C21
S@/U=N$19DFM&? pq198;<2QRGB<c/R= 19C2<cN$V¬M h =C2DF=CUM(<c/219NwS@/2=N19DFMo?Ipq198;<2ABG ? N$=NVQ|GB<>/|<>/U14Y=<>/|C2=OP1
z<c/2DT_SONAME
141957198:<>=@? AB14rAB14Q|GBABA(8;lib1
M C2<c=GBC =C2D GBCRGB<cSTD019Y19C2D019C28VABGBS@<lk
/usr/lib/lib2 lib1 /usr/lib/lib2
^`h2=nS@/2=N19DFMo?Ipq198;<2C2=OP14/U=STM(CU1‰M N OmM(N14S@AB=Sy/Rf g28;/U=N$=8<>19NST=C2V Q|/219N$14GBCR<c/21‰CU=OP19zS@:8/R=S
=@?M WI1vM N z<c/214D0VIC2=OPGB8)ABGBC2HI19N :0S@19ST<c/2=<2S@<cN$GBCUJD0G N$198;<cABVL=ST<c/214Y=<c/
/
C2=OP1IkT^`hX<c/214C2=OP14/2=STC2M-S@AB=Sy/219S@zS@:08;/R=S
/usr/lib/lib2 directory/file
=@?M WI19z<c/2N$1914hc=8GBABGB<>G 1&SS@Y198;GBh`VS@/U=N$19DFMo?Ipq198;<2Y=<>/RSy19=N$8/2e
GBC2JIzQRGB<c/R<c/214hcM ABABM(Q|GBC2JLYN$19819D019C28;1Ik lib1

KIGBN$Sy<>z7<>/U14D0VIC2=OPGB8¢=N$N=VL<>=J OP=VLJIGBWI14=xS@<cN$GBC2JL<c/2=<2/2M ABD0ST=xABGBS@<2M h2D0GBN198;<cM(NGB19S@z7S@19Y=N$=<c19D


?VL8;M ABM(CUSTf glkKIM N 195Z=OPYAB19z7DT_RPATH <>/21vS@<cN$GBC2J <c1&A ABST<>/U1‰D0VIC2=OmGB8
ABGBC2HI19Nw<cMSy19:=N$8;/|r0N$Sy<2<c/21vD0GBN$198<>M N$V z<c/219C
/home/dir/lib:/home/dir2/lib:
z=C2D{<>/219C|<>/U148;:NN$19C2<
D0GBN198;<cM(NVL<>MLrC2D{D019Y19C2D019C28GB19Sk /home/dir/lib /home/dir2/lib

a1&8M(CUD0z—=nWX=N$GB=@? AB1‰8=ABAB19D GBCR<c/214YN$M 8;19SyST19C2WIGBNM C2OP19C2<ªŸuS@191 fcj0i ‚-aZgc¤UOP=V


/2M ABDF=nABGBSy<XM h2D0GBN198;<cM(NGB19ST=LD_LIBRARY_PATH
S=@?M WI19zM Y<>GBM C2=ABABVLhcM ABABM QR19D+?VL=nS@19OmGB8;M ABM(C|f gU=C2D{=exec C2M(<c/219NwD0GB_N198;<cM(NVLABGBS@<lk
.0/214hcM ABABM QRGBCUJWI=A :19STQRM :ABD+?1419ŠI:GBWX=AB19C2<2<>M-<c/214YN1&WXGBM :ST195Z=OPYAB1I} ;

LD_LIBRARY_PATH=/home/dir/lib:/home/dir2/lib:
LD_LIBRARY_PATH=/home/dir/lib;/home/dir2/lib:
LD_LIBRARY_PATH=/home/dir/lib:/home/dir2/lib:;

i+ABA D0GBN198;<cM(NGB19S=N$14Sy19=N$8/219DF=h`<>19Nw<c/2M S@14h`N$M O ki]A <>/2M :JI/RSyM(OP1vYN$M e


JIN$=OP SfcSy:8;/|=ST<c/214ABGBC2HL19D0GB<cM(Ng2<cN$19=<2<>/214A GBS@<cSU?19h`M(N14=C2DF=hc<c19N <c/214Sy1&DT_RPATH
LD_LIBRARY_PATH
OmGB8;M ABM CRD0GBhch`19N$19C2<cABV z7<>/214D0VIC2=OmGB8
ABGBC2HI19NwD0M 19SC2M(<lkT\R19WI19N<>/219AB19SyS@z<c/214D0V CU=OPGB8¥A GBC2H 19Nw=8;819Y<>S<>/U1‰Sy19OPGB8M(ABM CRC2M <>=<cGBM C2zQRGB<c/R<c/21

              ! " #B" 7o%]')" +*, *
2-15
ELF: Executable and Linkable Format

S@19Om=C2<>GB8SªD019Sy8;N$G ?19D½=@?M WI1Ik


KIGBC2=ABABVIzGBhU<>/U14M(<c/219Nw<cQRMJ NM :YSM(hUD0GBN198;<cM(NGB19STh`=GBA(<cMABM(8=<>1v<>/U14D019S@GBN19DFABG ? N$=NV z7<>/21vD0V C2=OmGB8)ABGBC2HI1&N
S@19=N8;/219S k
/usr/lib

For security, the dynamic linker ignores environmental search specifications (such as
NOTE LD_LIBRARY_PATH) for set-user and set-group ID programs. It does, however, search DT_RPATH
directories and /usr/lib.

Global Offset Table


~M S@GB<cGBM C2ecGBCUD019Y19C2D019C2<X8M(D61‰8=C2C2M <>zGBCRJI19C219N$=A z—8M(CU<>=GBCR=@? S@M AB:<c1‰WXGBN$<c:=A(=D0D6N$19S@Sy19SkTËxABM&?=A(M(h`hcS@19<2<>=@? AB19S
/2M ABDF=@?SyM(AB:0<>14=D0D0N1&SyS@19STG CRYN$GBWX=<>14D0=<c=z<>/2:0STOP=HIGBC2JL<>/214=D0D0N19S@Sy19ST=WI=GBAB=@? AB14QRGB<c/2M :<X8M(OmYN$M OPGBSyGBC2J<c/21
Y M S@GB<cGBM(CUecGBC2D019Y19C2D61&CU8;14=C2D{S@/2=N=@?GBABGB<cVLM(hU=nYNM(JIN=OPƒST<c1957<lkTiŒYNM(JIN=OdN19hc19N$19C2819STGB<cSJ ABM&?=A M(h`hcS@19<2<c=@?AB1
: SyGBC2JY0M(SyGB<>GBM C2ecG C2D019Y19C2D019C2<2=D0D0N$19SyS@GBC2JL=C2DF1957<cN=8;<cST=@?S@M AB:<c14WI=AB:019S@z<>/U:STN19D0GBN$198<>GBCUJYM S@GB<cGBM C2e
GBC2D019Y19C2D61&CU<XN19hc19N$19CU8;19ST<cM=@?S@M AB:<c14ABM 8;=<cGBM(CUSk
^`C2GB<cGB=ABABV z7<>/U14J ABM&?=A M(h`hcS@19<2<c=@?AB14/2M ABD0SGBC2hcM N$Om=<>GBM CR=SN19ŠI:GBN$19D-?VLGB<cSTN19ABM(8=<>GBM CR19C2<cNGB19SnŸ S@1914€€ºª19ABM 8;=<cGBM C2ƒƒGBC
~=N<2¤lki+hc<c19N <c/214S@VIS@<c19Od8N$19=<c1&SOP19OPM NVSy19J OP19CU<>ShcM N =nABM =D0=@?AB14M&? p>198;<2rAB19z<c/214D0VIC2=OPGB8)ABGBC2HI19N YNM 8;19S@Sy19S
<c/214N$19ABM 8;=<cGBM CR19C2<>NGB19S@zSyM(Om14M(hUQR/2GB8/RQRGBABA&?14<>VIY1 N1&h`19N$NGBC2JL<cM<>/U14JIABMo? =A(M hch`S@19<2<c=@?AB1Ik
.0/214D0VIC2=OPGB8¥A GBC2H 19NwD019<>19NOPGBC219ST<c/214=S@S@M 8;GB=<c19DFS@VIOR_386_GLOB_DAT ?M A(WI=AB:01&Syz8;=AB8;:0AB=<>19ST<c/219GBN =@? S@M AB:<c1‰=D0D6N$19S@Sy19S@z=C2DFS@19<cS
<c/214=YYNM YN$GB=<c14Om1&OmM(NVL<c=@?AB1419CU<>NGB19S<>M<c/21vYN$M Y19NwWI=AB:019Ski]A <>/2M :JI/R<c/214=@?S@M AB:<c14=D0D0N1&SyS@19S=N$1
:C2HIC2M QRCRQ|/219CR<c/214ABGBC2HL1&D6GB<>M NI? :GBABD0ST=C|Mo? p>198;<2rAB19z<c/214D0V CU=OPGB8¥ABG C2H 19NwH C2M QRS<>/U1‰=D0D6N$19S@Sy19STM h2=ABA
OP19OPM NVS@19JIOP19C2<cST=C2DF8=CR<>/U:ST8;=A 8;:AB=<c14<>/U1‰=@? S@M AB:<c1‰=D0D6N$19S@Sy19STM(hU<>/214SyV O? M(ABS8;M C2<>=G C219DF<>/219N19GBCªk
^`h2=nYNM(JIN$=O§N$19ŠI:GBN19STD0GBN198;<2=8;819S@ST<cM<>/214=@? S@M AB:<c14=D0D0N$19SySTM h2=nS@VIO?M ABz<c/2=<2S@VIO?M A(QRGBA A(/2=WI14=nJIABM&?=A
M hchcSy1&<U<>=@? AB1419C2<cN$V kªj0198;=:0S@14<c/2141957198;:0<>=@? AB14rAB14=C2DFSy/2=N$19DFM&? p>198;<cST/2=WX14S@19Y=N=<>14JIABMo? =A(M(h`hcS@19<2<>=@? AB19S@z=
S@VIO? M(ABƒST=D0D0N19S@STOm=V=YY19=NwGBCRS@19WI19N=A(<>=@? AB19SkT.0/214D0VIC2=OPGB8)ABGBC2HI19N YNM(81&SyS@19S=ABA(<>/U1‰JIABM&?=A(M hchcSy19<X<c=@?AB1
N1&ABM 8;=<cGBM C2SU? 19hcM N$14JIGBWIGBCUJ8M(C2<cNM(A(<cM=C2VL8;M D014GBCR<c/214YNM(81&SySTGBOm=J 19z<c/2:S19C2S@:0N$GBCUJ<c/214=@?SyM(AB:0<>14=D0D6N$19S@Sy19S
=N1‰=WX=GBAB=@?A 14D0:N$G C2J195Z198;:0<>GBM Cªk
.0/21v<>=@?A 1&ƒS19C2<>NVL©19N$MGBSTN19S@19NWI19DF<cM/2M(A DF<>/U14=D0D0N$19SySTM h2<c/214D0VIC2=OPGB8)S@<cN$:08;<c:N$19zN19hc19N1&CU8;19DFQ|GB<>/|<>/214SyV Ome
?M A kª.0/UGBST=ABABM QRS=nYN$M J N=OPzSy:8;/R=S<>/U14D0V C2=OmGB8¥ABGBCUH 19Nz<>MrC2D{GB<>SM(Q|CRD0VIC2=OPGB8)S@<cN$:8<>:0N$1
QRGB<c/2_DYNAMICM :<2/2=WXGBC2JLVI1&<2YNM(819S@Sy1&D{GB<cSTN19ABM(8=<>GBM CR19CU<>NGB19Skª.0/UGBSTGBS19S@Y198;G =ABABVG OPYM(N<c=C2<Xh`M(Nw<c/214D0VIC2=OPGB8)ABGBC2HI1&Nz
?198=:S@14G <XOm:S@<2GBCUGB<>GB=A GB©14GB<cS@19ABhUQRGB<c/2M(:0<2N$19ABVIGBC2JLM CRM <>/219NwYNM(JIN$=OmST<cMN$19ABM 8;=<c14GB<cSOP19OPM N$VLGBOP=JI1IkT‚-CR<c/21
steu? GB<2^cC2<c19A(i+N8;/2GB<c198;<c:N1&z719C2<>NGB19STM C214=CUDF<>Q|MGBCR<c/214JIABMo? =A(M hchcSy1&<2<c=@?AB14=ABSyM=N$14N19S@19N$WX19D¥k€€„~0N$M 8;19D0:0N$1
E0GBC2HI=JI1‰.6=@?AB19ƒƒ;? 1&ABM Q·D019Sy8;NG ?19ST<c/219Oˆk
.0/214SyV Sy<>19O§OP=VL8;/2M M(Sy14D0GBhchc19N19C2<XOm19OPM N$VLS@19JIOP19C2<2=D0D0N$19SyS@19STh`M(Nw<>/214Sy=OP14S@/U=N$19DFM&? pq198<XGBC|D0GBhchc19N19C2<XY0N$M e
JIN$=OPSy˜GB<2OP=VL19WI19C|8;/2M M(Sy14D0GBhch`1&N19C2<2ABG ?N=N$VL=D0D0N19S@S@19ShcM NwD0GBhchc19N19C2<21&5Z198;:0<>GBM C2SM(hU<>/U14S@=OP14YNM J N=Oˆk
\RM C219<>/U1&A 1&SyS@zOP19OmM(NVSy19J OP19CU<>STD6M-C2M <X8/2=C2JI14=D0D0N$19S@Sy19STM C28;14<c/214YN$M 8;19SySTGBOP=JI14GBST19S@<c=@?ABGBSy/219D¥kTi+SABM(C2J
=ST=nY0N$M 8;19S@S1957GBSy<>SyzGB<cSTOP19OPM NVSy1&JIOP19C2<cSTN19S@GBD014=<2r05719DFWXGBN$<c:=A(=D0D6N$19S@Sy19Sk
iŒJIABMo? =A(M hchcSy19<2<>=@? AB19ƒ„ShcM NOP=<2=C2DFG C2<>19NYN$19<c=<>G M(C|=N$1vYN$M 8;19S@SyM(NecSyY198;GBr08ZkKIM(Nw<c/214ste ?GB<2^`C2<>19A i+N$8/2GB<>198<>:0N$19z
<c/214S@VIO?M A OP=V4?14:S@19DF<cM-=88;19S@S<>/214<c=@?AB1Ik
_GLOBAL_OFFSET_TABLE_

      ! " # " &%(')" -*, *        
2-16
ELF: Executable and Linkable Format

Figure 2-11: Global Offset Table

extern Elf32_Addr _GLOBAL_OFFSET_TABLE_[];

.0/214S@VIO?M A OP=VLN$19SyGBD014GBCR<c/214OPGBD0D0AB14M h2<c/21 S@198<>GBM C2z=ABABM QRGBCUJ‰? M(<c/


C219JI=<>GBWX14=C2DF_GLOBAL_OFFSET_TABLE_
C2M C2e`C219J =<cGBWI14€€S@:?S@8N$GBY0<>Syƒ„ƒGBCU<>M<>/U14=N$N=VM h2=D0D0N19S@Sy19Sk .got

Procedure Linkage Table


¡¼:8;/R=S<>/U1‰JIABM&?=A(M hchcSy1&<2<c=@?AB14N$19D0GBN198;<cSTYM S@GB<cGBM C2ecGBC2D61&Y01&CUD019C2<X=D0D6N$19S@S8;=AB8:AB=<cGBM(C2S<>M=@?SyM(AB:0<>14ABM 8;=<cGBM(CUS@z
<c/214YN$M 8;19D0:0N$14ABGBCUH =JI14<>=@? AB14N$19D0GBN198;<cSTYM S@GB<cGBM C2ecGBC2D61&Y01&CUD019C2<2hc:C28<>GBM CR8=ABABST<cM=@?S@M AB:<c14ABM 8;=<cGBM(CUSkT.0/214ABGBC2H
19D0GB<cM(Nw8;=C2CUM(<2N$19SyM(ABWX141957198;:0<>GBM CR<cN$=CUS@hc19NSTfcSy:8;/|=SThc:0C28;<cGBM CR8;=ABABSyg2hcNM(O§M(CU1‰195Z198;:0<>=@?A 1‰M NwS@/2=N19DFMo?Ipq198;<2<>M
=C2M <>/U1&N9k‡¢M C2S@19ŠI:019C2<>ABVIz7<>/21vABGBC2HL19D0GB<cM Nw=N$N=C2J 19S<cM/2=WX14<c/214YNM(JIN$=O§<cN$=CUS@hc19Nw8M(C2<cN$M A <>M19C2<cNGB19STG CR<c/21vYN$M e
8;19D0:0N$14ABG C2H =JI14<c=@?AB1IkT‚-CR<c/214aØTaZ.030¡è«Ú=N$8/2GB<c198;<c:N$19z7YN$M 8;19D0:N14ABGBCUH =JI14<c=@?AB19SN$19S@GBD614GBCRSy/2=N$19D{<>195Z<>zy?:<
<c/219V:0S@14=D0D0N1&SyS@19SGBCR<c/214YN$GBWX=<>14JIABM&?=A(M hchcSy1&<2<c=@?AB1IkT.0/214D0VIC2=OPGB8)ABGBC2HI19N D019<c19N$OmGBC219ST<c/214D019S@<cGBC2=<cGBM C2S@ƒ
=@?SyM(AB:0<>14=D0D0N19S@Sy19ST=C2DFOmM(D0GBr019ST<c/214JIABMo? =A(M(h`hcS@19<2<c=@?AB19ƒSTOP19OmM(NVG OP=J 14=88;M N$D0G C2J ABV kT.0/214D0VIC2=OPGB8)ABGBC2HI1&N
<c/2:S8;=CRN19D0GBN$198<X<c/21419C2<cN$GB19STQ|GB<c/2M(:0<X8M(OmYN$M OPGBSyGBC2J<c/214YM S@GB<cGBM C2ecGBC2D61&Y01&CUD019C28;14=C2DFSy/2=N=@?GBABGB<cVM h2<c/21
YNM(JIN$=Omƒ„S)<c1957<lkT305Z1&8:<c=@?AB14r0AB19ST=C2DFSy/2=N$19D{Mo? p>198;<2rAB19S/2=WI14Sy19Y=N$=<c14YN$M 8;19D0:0N$14ABGBCUH =JI14<>=@? AB19Sk

Figure 2-12: Absolute Procedure Linkage Table

µ2;’ ­Ž– ™
.PLT0:pushl
µ2;_’ ­Ž– _™ ñ
jmp * _ _ò
nop; nop
nop; nop
¯I‘ $æ ®¯
* ¶
.PLT1:jmp
¸¸;™$$’ _ _ó‰ô+ì
pushl $
¯I‘ $@PC × ®¯
* ¶
.PLT2:jmp
¸¸;™$$’ _ _ó‰ô+ì
push $
jmp .PLT0@PC
...

              ! " #B" 7o%]')" +*, *
2-17
ELF: Executable and Linkable Format

Figure 2-13: Position-Independent Procedure Linkage Table

.PLT0:pushl 4(%ebx)
jmp *8(%ebx)
nop; nop
nop; nop
.PLT1:jmp
¸¸;™$$’
*name1@GOT(%ebx)
pushl $
jmp .PLT0@PC
.PLT2:jmp
¸¸;™$$’
*name2@GOT(%ebx)
pushl $
jmp .PLT0@PC
...

As the figures show, the procedure linkage table instructions use different operand addressing modes
NOTE for absolute code and for position-independent code. Nonetheless, their interfaces to the dynamic linker
are the same.

KIM(ABABM QRGBCUJL<>/21vS@<c19YSU? 19ABM(Q|z<c/214D0VIC2=OPGB8)ABGBCUH 19Nw=C2D{<>/21vYN$M J N=O§€„€8M(M Y19N$=<c19ƒƒ<>MN19S@M ABWI14SyV OL?M ABGB8)N$19hc19Ne


19C28;19S<c/2N$M :JI/R<c/214YNM(819D0:N14ABGBC2HI=J 14<c=@?AB14=CUDF<c/214J A Mo?=A M(h`hcS@19<2<c=@?AB1Ik
ªkR¿À/219CRr0N$Sy<28;N$19=<cGBC2JL<c/214OP19OmM(NVLGBOP=JI14M(hU<>/U14YN$M JIN$=OPz7<>/U14D0V CU=OPGB8)ABGBC2HI19N Sy19<>S<>/U14S@198M(C2D{=C2DF<c/21
<c/2GBN$DF19CU<>NGB19STGBCR<c/214JIABMo? =A(M(h`hcS@19<2<>=@? AB14<>MS@Y198GB=A(WI=AB:019SkaZ<c19YSU?19ABM Q¦1&5ZYAB=GBC|OPM N$14=@?M :<2<c/219S@1
WX=AB:19Sk
tªkR^`h2<c/214YN$M 8;19D0:0N$14ABGBCUH =JI14<>=@? AB14GBSTYM S@GB<cGBM C2ecGBCUD019Y19C2D019C2<cz<>/214=D0D6N$19S@SM(hU<>/U14J ABM&?=A(M hchcSy19<X<c=@?AB14Om:S@<
N1&SyGBD014GBC kª30=8/RS@/U=N$19DFM&? pq198<Xr0AB14GBCR<c/214YNM(81&SySTGBOm=J 14/2=SGB<cSTM QRCRYNM(819D0:N14ABGBC2HI=J 14<c=@?AB19z
=C2D{8;M C2<>N%ebx M(A <>N=C2Syhc19N$S<cM-=xYN$M 8;19D0:0N$14ABG C2H =JI14<c=@?AB1419C2<cNVM C2ABVLh`N$M OdQ|GB<>/UGBCR<c/214Sy=OP14M&? pq198<Xr0AB1IkT‡¢M(CUe
S@19ŠI:01&CU<>ABVIz<c/2148;=ABABG C2Jh`:C28<>GBM CRGBSN$19SyYM(CUS@G ?AB14h`M(NwS@19<c<>G C2J<c/214JIABM&?=A(M hchcSy19<X<c=@?AB1w? =S@14N$19JIGBS@<c19NI? 19hcM N$1
8;=ABA GBC2JL<c/214YNM(819D0:N14ABGBC2HI=J 1v<>=@? AB1419C2<cN$V k
sªk|KIM N GBABAB:0S@<cN$=<cGBM(CUz=S@S@:0OP14<>/U1‰Y0N$M J N=Od8;=A ABS zQ|/2GB8;/|<>N=C2S@hc19NST8M(CU<>NM(A(<cM<>/U14AB=@?19A k
name1 .PLT1
kR.0/214r0N$Sy<XGBCUS@<cN$:8<>G M(Cxpq:OmYST<cM<>/214=D6D0N$19S@SGBC|<>/214JIABM&?=A(M hchcSy19<2<>=@?A 1419C2<>NVLhcM(N k^cC2G <>GB=ABABVIz<c/21
» JIABMo? =A(M(h`hcS@19<2<>=@? AB14/2M ABD0ST<c/214=D0D0N19S@STM h2<c/214hcM ABABM QRGBC2J GBC2Sy<>N:8;<cGBM C2zC2M <2name1
<>/U14N$19=A(=D6D0N$19S@SM h
k pushl
name1
ϪkR‡¢M C2S@19ŠI:019C2<>ABVIz<c/214YNM(JIN$=O§Y:Sy/219ST=nN19ABM(8=<>G M(CRM hch`S@19<2fc¸¸;™$$’cg2M CR<c/214S@<c=8;H kT.0/214N1&A M(8=<>GBM CRM hchcSy19<XGBS=
steu? GB<>z7C2M(CUecC219JI=<>GBWX1w?VI<>1vM(h`hcS@19<2GBC2<cM<>/U14N$19ABM 8;=<cGBM CR<c=@?AB1IkT.0/214D019SyGBJ C2=<c19DFN19ABM(8=<>GBM CR19CU<>NVQ|GBABA(/U=WI1
<cV Y1 z=C2DFGB<cSTM hchcSy19<XQ|GBABA(S@Y198GBhcV<c/214JIABMo? =A(M(h`hcS@19<2<>=@? AB1‰19CU<>NV:Sy19DFGBCR<c/214YN$19WXGBM(:0S
GBR_386_JMP_SLOT
C2Sy<>N:8;<cGBM CªkT.0/214N1&A M(8=<>GBM CR19C2<cN$VL=ABSyM-8M(C2<c=GBC2S=nS@VIO?M A(<c=@?AB14GBCUD01957z<c/2:S<>19ABA GBC2JL<>/214D0VIC2=OPG 8
ABjmp
GBC2HI19N Q|/2=<2S@VIO?M A(GBSU? 19GBC2JN19hc19N1&CU8;19D0z GBCR<>/2G Sª8=S@1Ik
name1
ªk|i+hc<c19N Y:0S@/2GBC2JL<c/214N1&A M(8=<>GBM CRM hchcSy19<>z<c/214YNM J N=Od<c/219Cnp>:OPYS<>M z7<>/21vrNS@<219C2<cN$V¬GBCR<c/21vYN$M e
8;19D0:0N$14ABG C2H =JI14<c=@?AB1IkT.0/21 GBC2Sy<>N:8;<cGBM CRYAB=81&S<>/U14WI=AB:14M .PLT0h2<c/214S@198M(C2D{J ABM&?=A(M hchcSy19<X<c=@?AB1419C2<cN$V
fuµ2;’ ­Ž– ™ M N g2M pushl
CR<c/214S@<c=8;HIz<c/2:SJ GBWXGBC2JL<>/U14D0V C2=OmGB8¥ABG C2H 19NwM(CU14QRM N$DFM h2GBD019CU<>GBhcVIGBC2J
_ _ñ
GBC2h`M(NOP=<cGBM(Cªk.0/214YNM(JIN=Od<c/219Cnp>:OPYS<>M<c/214=D0D0N19S@SGBCR<c/214<c/2GBNDFJ A Mo?=A M(h`hcS@19<2<c=@?AB1419C2<cN$V
4(%ebx)

      ! " # " &%(')" -*, *        
2-18
ELF: Executable and Linkable Format

fuµ2;’ ­Ž– ™ M N gczQ|/2GB8;/|<>N=C2S@h`19N$S8;M C2<>NM A(<>M<c/214D0VIC2=OPGB8)ABGBC2HI1&N9k


_ _ò 8(%ebx)
ѪkR¿À/219CR<c/214D0VIC2=OPGB8)ABGBC2HI19N N198;19GBWX19ST8M(C2<cN$M ABzGB<2:CUQRGBC2D0S<c/214S@<c=8;HIzABM M(HIST=<2<c/214D019S@GBJIC2=<c19DFN$19ABM 8;=<cGBM C
19C2<cN$VIzr0C2D0S<>/21vS@VIO?M ABƒSTWX=AB:19zSy<>M N$19S<c/214€€N$19=ABƒƒ=D0D0N19S@ShcM(N GBC|GB<>SJ A Mo?=A M(h`hcS@19<2<c=@?AB1419C2<cN$VIz
=C2D{<>N=C2S@h`19N$S8;M C2<cN$M A(<cM<>/U14D019S@GBN19DFD019Sy<>GBC2=<cGBM Cªk name1

¹ªkRaZ:Z? S@19ŠI:19C2<2195Z198;:<cGBM C2SM(hU<c/214YNM(819D0:N14ABGBC2HI=J 1v<>=@? AB1419C2<cN$VLQ|GBABA(<cN$=CUS@hc19NwD0GBN198;<cABVL<>M zQ|GB<>/UM(:<


8;=ABA GBC2J<c/214D0VIC2=OPGB8)ABGBC2HI1&Nw=nS@198;M C2DF<cGBOP1IkT.0/2=<2GBS@z<c/21 GBC2Sy<>N:8;<cGBM CR=< QRGBA A(name1
<cN$=C2Syhc19Nw<>M
zGBCUS@<c19=DFM h2€€hc=ABABG C2JL<>/UN$M :JI/2ƒƒ<>M<c/21 GBC2Sy<>jmp
N:8;<cGBM Cªk .PLT1
name1 pushl
.0/21 19C2WXGBN$M C2OP19C2<2WI=NGB=@?AB148;=CR8;/U=C2J 14D0VIC2=OPGB8¥ABG C2H GBCUJ‰?19/2=WXGBM N&kT^`hXG <>STWI=A :1‰GBSTC2M C2ecCU:ABABz
<c/214D0LD_BIND_NOW
VIC2=OPGB8)ABG C2H 19Nw19WX=AB:=<c19STY0N$M 8;19D0:N14ABGBCUH =JI14<c=@?AB1v19C2<>NGB19S?19hcM N$1v<>N=C2S@h`19N$NGBC2JL8;M C2<cN$M A <>M<c/214YNM J N=Oˆk
.0/2=<2GBSyz<>/U14D0V CU=OPGB8)ABGBC2HI1&NwYNM(819S@S@19SN$19ABM 8;=<cGBM CR19C2<cN$GB19SM(hU<>VIY1 D0:NGBC2JY0N$M 8;19S@STG C2GB<>G =ABGBe
©=<cGBM(Cªk‚-<c/219N$Q|GBS@19z<c/214D0VIC2=OPGB8)ABGBC2HI19N 19WX=AB:=<c19STYNM(819D0:N14ABGBC2HIR_386_JMP_SLOT
=J 14<c=@?AB1419C2<cN$G 1&SAB=©GBABVIzD019AB=VIGBC2JLS@VIO?M A
N1&SyM(AB:0<>GBM C|=C2DFN19ABM 8;=<cGBM(C|:C2<cGBA <>/21vrNS@<2195Z198;:<cGBM CRM h2=x<>=@? AB1419C2<cN$V k

Lazy binding generally improves overall application performance, because unused symbols do not incur
NOTE the dynamic linking overhead. Nevertheless, two situations make lazy binding undesirable for some
applications. First, the initial reference to a shared object function takes longer than subsequent calls,
because the dynamic linker intercepts the call to resolve the symbol. Some applications cannot tolerate
this unpredictability. Second, if an error occurs and the dynamic linker cannot resolve the symbol, the
dynamic linker will terminate the program. Under lazy binding, this might occur at arbitrary times. Once
again, some applications cannot tolerate this unpredictability. By turning off lazy binding, the dynamic
linker forces the failure to occur during process initialization, before the application receives control.

Hash Table
iŒ/2=S@/R<c=@?AB14M h M&? pq198<>STS@:0YYM $N <cSªSyV OL?M A<c=@?AB14=8;8;19SySkªE0=@? 19ABST=YY19=NX?19ABM Q·<cM/219ABY½195ZYAB=GBC
<c/214/2=Sy/R<c=@?AB14M Elf32_Word
NJ =C2GB©=<cGBM C2z@? : <2<>/U1&VL=N14C2M <2Y =N$<2M hU<>/21vS@Y198;G r8;=<cGBM Cªk

Figure 2-14: Symbol Hash Table


________________________
________________________
nbucket 
 
________________________
nchain 
 bucket[0] 
 . . . 
 bucket[nbucket - 1] 
________________________
 chain[0] 
 . . . 
________________________
chain[nchain - 1] 

.0/21 =NN$=V¬8;M C2<>=GBCUS 19C2<cN$GB19Syz=C2DF<c/21 =NN$=V¬8;M C2<>=GBCUS 19C2<cN$GB19Sy˜GBC2D0195Z19S


S@<c=N$<Ubucket
=<2Á2kj0M(<c/ =C2D nbucket/2M ABDFS@VIO?M A(<c=@?AB14chain GBC2D0195Z19SkT‡¢/2=GBCR<c=@?AB1419nchain
C2<cN$GB19SY=N=ABAB19A(<>/U14S@VIO?M A
<c=@?AB1IkT.0/214C2:OL?bucket 19N M h2S@VIO?M A(chain
<c=@?AB1419C2<>NGB19STSy/2M(:0ABDF19ŠI:=A ˜S@MS@VIO?M A(<c=@?AB14GBC2D0195Z1&S=ABS@MS@19AB198;<
8;/U=GBCR<>=@? AB1‰19CU<>NGB19SkTiŒ/2=S@/2G C2Jhc:0C28;<cGBM C¬f`S@/2M QRCn?19ABM QRg2=nchain 88;19Y<cST=vSyV OL?M ACU=OP1‰=CUD½N19<>:0N$C2ST=nWX=AB:14<>/2=<
OP=V4?14:Sy19DF<>M8;M OPY:0<>14= GBC2D0195kT‡¢M C2S@19ŠI:019C2<>ABVIzGBh2<c/214/2=S@/2GBCUJhc:0C28;<cGBM CRN$19<c:N$CUST<>/U1‰WX=AB:14•nhcM N
S@M OP14C2=OP19z • bucket JIGBWI19ST=CRGBC2D61&5ZzÞ2zGBC2<cM‰?M(<c/R<c/214S@VIO? M(A(<c=@?AB14=C2DF<c/2148/2=GBCR<c=@?AB1IkT^`h
<c/214S@VIO? M(A(<c=@bucket[
?AB1v19C2<>NVLGBST%nbucket]
CUM(<2<c/214M C214D019S@G N$19D0z Þ JIGBWI19S<>/214CU1957<2S@VIO?M A(<c=@?AB1419C2<cN$VLQ|GB<>/|<>/214Sy=OP1
/2=Sy/LWX=AB:1IkT‚-C2148;=CRh`M(ABABM Q·<c/21 ABGBC2HIS:C2chain[
<cGBA(19GB<>/U19N ]<c/214S@19AB198<>19DFSyV OL?M A(<>=@? AB1419C2<>NVL/2M(A D0ST<c/214D019S@GBN19D
chain

              ! " #B" 7o%]')" +*, *
2-19
ELF: Executable and Linkable Format

C2=OP1vM(Nw<c/21 19C2<cN$VL8;M C2<c=GBC2ST<c/214WX=AB:1 k


chain STN_UNDEF

Figure 2-15: Hashing Function

unsigned long
elf_hash(const unsigned char *name)
{
unsigned long h = 0, g;

while (*name)
{
h = (h << 4) + *name++;
if (g = h & 0xf0000000)
h ^= g >> 24;
h &= ~g;
}
return h;
}

Initialization and Termination Functions


i+hc<c19N <c/214D0VIC2=OPGB8)ABGBC2HI19N /2=S?:GBA <X<c/214YNM(81&SySTGBOm=J 14=C2D{Y19N$hcM NOP19DF<>/U14N$19ABM 8;=<cGBM(CUS@z19=8;/|S@/2=N19DFMo?Ipq198;<
JI1&<cS<c/214M YYM N$<c:C2GB<cVL<cM1957198:<c14S@M OP1vGBC2GB<cGB=ABGB©=<cGBM(C|8;M D01Ikª.6/219S@14GBC2GB<cGB=ABGB©=<cGBM(CRh`:C28<>GBM C2ST=N148;=ABAB19DFGBCRC2M
S@Y198GBr19D{M(ND019N$z@? :<2=ABA(S@/2=N19DFM&? pq198<XG C2GB<>G =ABGB©=<>GBM C2S/2=YY19Cn? 19hcM(N14<c/2141957198:<c=@?AB14rA 14J =GBC2S8;M C2<cN$M Ak
aGBOPGBAB=NABV zSy/2=N$19DFM&? p>1&8<>SOP=VL/2=WI14<c19N$OPGBCU=<>GBM CRhc:0C28;<cGBM C2S@zQR/UGB8;/R=N141&5Z198;:0<>19DFQ|GB<>/R<c/21 fcj0i ‚-aZg
OP198/2=C2GBS@O§=hc<>19Nw<>/21w?=Sy1‰YNM(819S@SU? 1&JIGBC2STG <>ST<c19N$OmGBC2=<>G M(CRS@19ŠI:019C28;1IkT‚-C28;14=JI=GBC2z<c/214M(ND019atexit NwGBCRQR/UGB8;/R<c_/21
D0VIC2=OPGB8¥ABGBCUH 19N 8=ABABST<>19NOPGBC2=<cGBM C¬h`:C28<>GBM C2STGBST:CUS@Y198;G r19D¥k
a/2=N$19DFM&? p>198;<cSTD019SyGBJ CU=<>14<c/219GBNwGBC2GB<cGB=ABGB©=<cGBM(C|=C2DF<c19N$OmGBC2=<cGBM(C|hc:CU8;<cGBM(C2S<c/2N$M :JI/R<c/21 =C2D
19C2<cN$GB19SGBCR<>/U1‰D6V C2=OmGB8¥S@<cN:8;<c:N19z—D61&Sy8;NG ?19DFGBCR€€†]VIC2=OPG 8¥aZ198<>GBM C2ƒƒ=@?M WI1IkTDT_INIT
.0VIYGB8;=ABABVIz<c/2148;M D01
hcDT_FINI
M N <c/219S@14hc:0C28;<cGBM C2STN1&SyGBD019STGBCR<c/21 =C2D S@198<>GBM C2SyzOP19C2<cGBM(CU19DFGBCR€€aZ198<>GBM C2Syƒ„ƒM h2~0=N$<22k
.init .fini

Although the atexit(BA_OS) termination processing normally will be done, it is not guaranteed to
NOTE have executed upon process death. In particular, the process will not execute the termination process-
ing if it calls _exit [see exit(BA_OS)] or if the process dies because it received a signal that it nei-
ther caught nor ignored.

      ! " # " &%(')" -*, *        
2-20
3 C LIBRARY

C Library 3-1
Global Data Symbols 3-2

              ! " #$ " &%(')" +*, *
i
C Library
.0/21v‡ˆABG ?N=N$VIz z8;M C2<c=GBC2ST=ABA(M h2<>/U1‰SyV OL?M ABST8;M C2<c=GBC219DFGBC z=C2D0zGBCR=D6D0GB<>GBM C2z8M(C2<c=GBC2S<>/214NM(:0e
<cGBC219STABGBSy<>19DFGBC|<>l/2i14bh`cM(ABABM QRGBCUJ<cQRM<>=@? AB19SkT.0/214r0N$Sy<2<>=@?A 14ABGBS@<cSN$M :li<cBG bC2s19ySshcN$M O§<>/21vi]\Ra^U‡ˆSy<>=C2D0=ND¥k

Figure 3-1: libc Contents, Names without Synonyms

abort fputc isprint putc strncmp


abs fputs ispunct putchar strncpy
asctime fread isspace puts strpbrk
atof freopen isupper qsort strrchr
atoi frexp isxdigit raise strspn
atol fscanf labs rand strstr
bsearch fseek ldexp rewind strtod
clearerr fsetpos ldiv scanf strtok
clock ftell localtime setbuf strtol
ctime fwrite longjmp setjmp strtoul
difftime getc mblen setvbuf tmpfile
div getchar mbstowcs sprintf tmpnam
fclose getenv mbtowc srand tolower
feof gets memchr sscanf toupper
ferror gmtime memcmp strcat ungetc
fflush isalnum memcpy strchr vfprintf
fgetc isalpha memmove strcmp vprintf
fgetpos iscntrl memset strcpy vsprintf
fgets isdigit mktime strcspn wcstombs
fopen isgraph perror strlen wctomb
fprintf islower printf strncat

i+D0D0GB<cGBM(CU=ABABV z /2M ABD0ST<c/21‰h`M(ABABM QRG C2JS@19NWIGB819Sk


libc

Figure 3-2: libc Contents, Names with Synonyms

_ _assert getdate lockf õ sleep tell õ


cfgetispeed getopt lsearch strdup tempnam
cfgetospeed getpass memccpy swab tfind
cfsetispeed getsubopt mkfifo tcdrain toascii
cfsetospeed getw mktemp tcflow _tolower
ctermid hcreate monitor tcflush tsearch
cuserid hdestroy nftw tcgetattr _toupper
dup2 hsearch nl_langinfo tcgetpgrp twalk
fdopen isascii pclose tcgetsid tzset
_ _filbuf isatty popen tcsendbreak _xftw
fileno isnan putenv tcsetattr
_ _flsbuf isnand õ putw tcsetpgrp
fmtmsg õ lfind setlabel tdelete

KI:C28<>GBM CRGBS=<XE019WX19A(tnGBCR<c/214aZ«4^c†Œ^cSyS@:14sn=CUDF<>/U1&N19hcM N$14=<2E019WI19A(tnGBC|<>/214i+j0^@k


õ

              ! " #$ " &%(')" +*, *
3-1
ELF: Executable and Linkable Format

j019S@GBD61&S<>/U14S@VIO?M ABSTABGBSy<>19DFGBC|<>/214¿ÀGB<c/RaV C2M C2VIOPST<c=@?AB14=@? M(WX19zS@VIC2M(CUV OPSM(hU<>/214h`M(NO ¯I‘ ¶  91 57G S@<UhcM N ¯I‘ ¶ 
19C2<cN$GB19S<>/U=<2=N$14C2M <2ABGBS@<c19DFQ|GB<>/|=nAB19=D0GBCUJ:0C2D019N$Sy8;M N$14Y0N$19Y19C2D019D{<>M<c/219GBNwC2=OP1Ikª.0/2:0S _ 8;M 2C <c=GBC2SU? M(<c/
=C2D zh`M(Nw195Z=OPYAB1Ik libc
getopt _getopt
‚-h2<c/214N$M :<cGBC219SABGBS@<c19DF=@?M WX1&z7<>/21vhcM(A ABM(Q|GBC2JL=N$14CUM(<2D019rCU19DF19ABS@19QR/U19N$1Ik

int _ _filbuf(FILE *f);


.0/2G SThc:0C28;<cGBM R
C N$19<c:NC2ST<c/214C2195Z<2GBC2Y:<28;/U=N$=8;<c19NwhcM(N zr0ABABGBC2JLGB<cSU?:0hchc19Nw=S=YYN$M YN$GB=<c1Ik^c<
N1&<c:NC2S BG hU=CR19NN$M N M 8;8:NSk f
EOF
int _ _flsbuf(int x, FILE *f);
.0/2G SThc:CU8;<cGBM(CR¨0:Sy/219ST<c/214M(:0<>Y:<28;/U=N$=8;<c19N$ShcM N =STGBh /2=D+?1919CR8;=ABA 1&DF=C2DF<c/219C
=YY19C2D0ST<c/214WI=AB:01‰M h <cM<>/U14N1&Sy:AB<cGBC2JLM :<cY:<2Syf<>N19=Oˆpku^ct<UcN$19(<cx:,N$fCU)S GBhU=CR19N$NM(NwM 8;8;:0N$S=C2D
M <>/219NQRGBSy1Ik x EOF
x
int _xftw(int, char *, int (*)(char *, struct stat *, int), int);
‡¢=ABABS<>M<c/21 fcj0i E0^`j0g2hc:0C28;<cGBM(CR=N14OP=YY19DF<>M<>/UGBSThc:CU8;<cGBM(CRQ|/219CR=YYABGB8=<>GBM C2ST=N1‰8M(Ome
YGBAB19D¥kª.0/UGBSThc:ftCUw8;<cGBM(CR_GBSGBD019C2<>G 8;=A(<>M fcj0i E0^`j0gcz7195781&Y0<2<>/2=< <c=H 19S=C|GBC2<c1&NYM S@19D
_
r0N$S@<2=N$JI:OP19CU<>zQR/UGB8;/ROP:0S@<2/2=WI14<c/21‰WX=AB:14t2k
ftw _xftw()

a1&1v<>/2G ST8/2=Y<c1&NƒSTM <c/219NwABG ?N=N$VLS@198<>GBM C2ShcM NwOPM N$14a«‰^`†]zi+\Ra^U‡¢z=C2D{~‚-aZ^`_bhc=8GBABGB<cGB19SkaZ191v€„€aV Sy<>19O§†]=<c=


^`C2<>19Nhc=81&SyƒƒAB=<c19N G CR<c/2GBS8;/2=Y0<>19NwhcM NwOPM N$1vGBC2hcM N$OP=<cGBM Cªk

Global Data Symbols


.0/21 ABG ?N=N$VLN19ŠI:GBN19ST<c/2=<2SyM(Om14J A Mo?=A 1957<c19N$CU=A(D0=<c=nSyV OL?M(A SU? 14D019rCU19DFhcM NwGB<cSTNM(:0<>GBCU19ST<cMQRM N$H
Y NM(Yl19iNbABVck¥i+ABA(<c/214D0=<c=nSyV O? M(ABSN19ŠI:GBN$19D{hcM N <c/21 ABG ?N=N$VLOP:0S@<?14YNM(WXGBD019D+?V z=STQR19ABA(=ST<c/21
D0=<c=nS@VIO?M ABSTABGBSy<>19DFGBCR<c/214<c=@?AB1w?19ABM QÄk libsys libc

KIM(NwhcM N$Om=A(D0198;AB=N=<>G M(C2SM h2<c/214D0=<c=nMo?Ipq198;<cSN$19YN1&Sy19C2<c1&D-?VL<>/U19S@14S@VIO? M(ABSyzS@1914<c/214³IÞ™’` ¶÷ömø ¯ ’c$‹ ¸;‘;l


Ý+ ”¯I®’c®;¯Iù š®„‹$›x°0›®’c®;¯mM Nw<>/U14€€†]=<c=n†+19rC2G <>GBM C2S@ƒƒ0S@198<>GBM CRM h2‡¢/2=Y0<>19NwÂnGBC|<>/21v=YYN$M YN$G =<>14YNM(819S@SyM(NwS@:0Ye
YAB19OP19C2<U<>Mì <c/214³IÞ™’` ¶áöLúLû0ø k
KIM(Nw19C2<cN$GB19SGBC|<>/21vhcM ABABM(Q|GBC2JL<c=@?AB14<c/2=<2=N$1vGBCR¯I‘ ¶  e ¯I‘ ¶  hcM N$Omz@?M <>/|S@VIO?M ABSTGBC|19=8;/RY=G N N19YN$19S@19CU<X<c/21
_
S@=Om1‰D0=<c=2kT.0/214:0C2D019N$Sy8;M N$14SyV C2M C2VIOPS=N$14Y0N$M WIGBD019D{ <>MS@=<cGBSyhcVL<>/21vi]\|aZ^U‡ˆSy<>=C2D0=ND¥k

Figure 3-3: libc Contents, Global External Data Symbols

getdate_err optarg
_getdate_err opterr
_ _iob optind
optopt

              ! " #$ " &%(')" +*, *
3-2
I Index

Index I-1

              ! " #$ " &%(')" +*, *
i
Index
tƒST8;M OPYAB19OP19C2<
1: 6 ctime 3: 1
cuserid 3: 1

A
i+j0^U8;M C2hcM N$Om=C28;1 D
1: 11, 2: 3, 6, 12, 14
D0=<c=z—:0C2GBC2GB<cGB=ABGB©19D
abort 3: 1
D0=<c=]N$19YN1&Sy19C2<c=<>GBM C 2: 8

=@?SyM(AB:0<>148;M D01
abs 3: 1 1: 2, 6

=@?SyM(AB:0<>1‰SyV OL?M AB2:S 9 difftime 3: 1

=D0D0N19S@S@zWIG N$<c:=A 1: 8 div 3: 1


2: 7 dup2 3: 1
=ABGBJIC2OP19C2<
addseverity 3: 1
@S 1914=ABS@MD0V 2:CU=11OPGB8¥ABGBCUH GBC2J
_DYNAMIC
1957198:<c=@?AB1vrAB1 D0VIC2=OPGB8)ABG ?N=N$VLfcS@1914S@/U=N$19DFM&2:? 11 pq198<Xr0AB19g
S@198<>GBM C 2: 7
D0VIC2=OPGB8)ABGBC2HI19N
i+\RaZ^‡ 1: 10
S@1914=ABS@MD0V CU=OPGB1:8¥AB1,GBCU2:
H GBC210–11
J
=N8;/2GBWX14rAB1 3: 2
S@191v=ABS@MABGBC2HL19D0GB<cM(N 2: 10
1: 18, 2: 15
S@1914=ABSyM-Sy/2=N$19DFM&? p>198;<2rAB1
2: 10
asctime
=S@Sy19O?AB19N 3: 1
D0VIC2=OPGB8¥ABGBCUH GBC2J 2: 10

S@VIO? M(AC2=Om 19S


1: 1
?=Sy1‰=D0D0N$19SyS 2: 10
1: 17 2: 4
_ _assert 3: 1
fcj0i ‚-aZg 19C2WXGBN$M C2OP19C2<
_DYNAMIC 2: 11
atexit _ 2: 20
/2=Sy/Lh`:C28<>GBM C 2: 11, 15, 19
atof 3: 1
GBC2GB<cGB=ABGB©=<cGBM C¬h`:C22:8<>19
GBM C
atoi 3: 1
AB=©V‰? GBC2D0GBC2J 2: 14, 20
atol 3: 1 2: 11, 19
LD_BIND_NOW 2: 11, 19
LD_LIBRARY_PATH 2: 15
N1&ABM 8;=<cGBM C
B S@1914=ABSyM-D0VIC22: =OP13,GB8)16,
ABGBC2HI1819N
?=Sy1‰=D0D0N$19SyS S@1914=ABS@M/2=S@/R<c=@?AB1 2: 10
D019rCUGB<>GBM C 1: 22, 2: 9, 12
2: 4 S@1914=A S@MYN$M 8;19D0:0N$14ABG C2H =JI14<c=@?AB1
2: 13

S@<cN$G C2JL<c=@?AB1 2: 13
? bsVIe<>1naMrNcD0h19N
 3: 1
1: 6 S@VIO? M(A N$19SyM(AB:02:<>GB13
M C
S@VIO? M(A(<c=@?AB1 2: 15

<c1&NOPGBCU=<>GBM CRh`:C28<>GBM C
1: 10, 14, 2: 13

C D0VIC2=OPGB8¥S@19JIOP19C2<cS 2: 14, 20

‡ˆAB=CUJ :0=J 1 2: 9

=S@Sy19O?ABV-C2=Om19S
ABG ?N=N$V¬fcS@191vABG ?N=N$VI1:
g 17
‡ÌABG ?N=N$V E
3: 1 30E0K
cfgetispeed 3: 1 19C2<cN$VLY1:M 1GBC2<2f`S@1914YNM(819S@S@z719C2<cN$VLYM GBC2<cg
cfgetospeed 3: 1 19C2WXGBN$M C2OP19C2<
cfsetispeed 3: 1 fcj0i ‚-aZg 2: 11, 15, 19
cfsetospeed 3: 1
exec
Y=JIGBC2J _ 1: 1, 2: 10–11, 15

clearerr 3: 1 1957198:<c=@?AB1vrAB1
2: 7

S@19JIOP19C2<cS 1: 1
8;M P O OmM(C¬SyV OL?M ABS
clock 3: 1
2: 9
;8 M $N 1nrAB1 1: 8
exit 2: 20
1: 3
ctermid 3: 1

              ! " #$ " &%(')" +*, *
I-1
ELF: Executable and Linkable Format

F gmtime 3: 1

fclose 3: 1
fdopen 3: 1
feof 3: 1
H
/2=Sy/Lh`:C28<>GBM C
ferror 3: 1
/2=Sy/¬<c=@?AB1 2: 19
fflush 3: 1 1: 12, 14, 2: 11, 13, 19
fgetc 3: 1 hcreate 3: 1
fgetpos 3: 1 hdestroy 3: 1
fgets 3: 1 hsearch 3: 1
_ _filbuf 3: 1–2
r0AB1&zM&? p>198;<2fcS@1914M&? pq198<Xr0AB19g
r0AB14M hchcSy1&<
2: 7 I
fileno 3: 1 GBC2<c19N$YN19<>19NzZS@191nYN$M JIN$=OàGBCU<>19NYN$19<c1&N
2: 10
_ _flsbuf 3: 1–2
_ _iob 3: 2
fmtmsg 3: 1
isalnum 3: 1
fopen 3: 1
hcM N$Om=<>SyzM&? pq198<2rAB1 isalpha 3: 1
KI‚+ºT.0ºTi+\ 1: 1
isascii 3: 1
1: 8
isatty 3: 1
fprintf 3: 1
iscntrl 3: 1
fputc 3: 1
isdigit 3: 1
fputs 3: 1
isgraph 3: 1
fread 3: 1
islower 3: 1
freopen 3: 1
isnan 3: 1
frexp 3: 1
isnand 3: 1
fscanf 3: 1
isprint 3: 1
fseek 3: 1
ispunct 3: 1
fsetpos 3: 1
isspace 3: 1
ftell 3: 1
fcj0i E0^`j0g isupper 3: 1
ftw _ 3: 2
isxdigit 3: 1
fwrite 3: 1

G J
GBC2Sy<>N:8;<cGBM C
jmp 2: 17–18
getc 3: 1
getchar 3: 1
getdate 3: 1
_getdate_err 3: 2
L
getdate_err 3: 2 labs
AB=©V‰? GBC23:D01GBC2J
getenv 3: 1 2: 11, 19
getopt 3: 1 LD_BIND_NOW 2: 11, 19
_getopt 3: 2 ldexp 3: 1
getopt 3: 2 ldiv 3: 1
getpass 3: 1 LD_LIBRARY_PATH 2: 15
fca† ‡¢¡£†+g2f`S@1914ABGBC2HL19D0GB<cM(Ng
gets 3: 1 ld _
getsubopt 3: 1 lfind 3: 1
getw 3: 1
JIABMo? = A(D0=<>=nSyV OL?M ABS S@191v=ABS@MABG ?N=N$V
libc 3: 0, 2
JIABMo? = A(M(h`hcS@19<2<c=@?AB1 3: 2
8;M C2<c19C2<>S 3: 0
1: 14, 23–24, 2: 11, 16 libc 3: 1–2

      ! " # " &%(')" -*, *        
I-2
ELF: Executable and Linkable Format

ABG ?N=N$V YNM(JIN$=OàABM =D0GBC2J


D0VIC2=OPGB8¥f`S@1914S@/2=N19D½M&? p>198;<Xr0AB19g N1&ABM 8;=<cGBM C 2: 2

S@1914=ABS@M S@198<>GBM C 1: 12, 21, 2: 13

S@/U=N$19DFfcSyl19i1‰bSyc/2=N$3:19DF
0
M&? pq198<Xr0AB19g S@198<>GBM CR=AB1:GBJI1, C2OP
8
19C2<
S@198<>GBM C|=<><cN$G ?:<c19S 1: 10
libsys
ABGBC2H¬19D0GB<cM N3: 1–2 S@198<>GBM CR/U19=D019N 1: 12

S@1914=ABSyM-D0VIC21:=1,OP18–19,
GB8)ABGBC2HI23,
19N 2: 11, 13, 15–16
S@198<>GBM C¬C2=Om19S 1: 2, 8
2: 10
S@198<>GBM CR<cVIY19S 1: 15
localtime 3: 1
S@1914=ABSyM-=N8;/2GBWX14rAB1 1: 10
lockf 3: 1
S@1914=ABS@MD0V CU=OPGB8¥ABGBCUH GB1:C2J1
longjmp 3: 1
S@1914=ABSyM-195Z198;:0<>=@?A 14rAB1 2: 10
lsearch 3: 1
S@1914=A S@MN$19ABM 8;=<c=@?AB1vrAB1 1: 1

S@1914=ABSyM-Sy/2=N$19DFM&? p>198;<2rAB1 1: 1
S@19JIOP19C2< 1: 1
M S@/U=N$19DFM&? pq198<2rAB1
2: 1–2, 7
OP=JIGB8¥C2:O? 19N
1: 4–5 S@Y198GB=AZSy198;<cGBM(CUS 2: 10

main 1: 14 S@<cN$G C2JL<c=@?AB1 1: 13

mblen 3: 1 S@VIO? M(A(<c=@?AB1 1: 12, 16–17


mbstowcs 3: 1 <cV Y1 1: 12, 17

mbtowc 3: 1 WX1&NS@GBM C 1: 3
1: 4
memccpy 3: 1
optarg 3: 2
memchr 3: 1
opterr 3: 2
memcmp 3: 1
optind 3: 2
memcpy 3: 1
memmove 3: 1
memset 3: 1
mkfifo 3: 1
P
Y=JI14S@GB©1
mktemp 3: 1
Y=JIGBC2J 2: 7
mktime 3: 1
f 3 ‚-aZg Y19N$h`M(NOP=C281
2: 7
mmap é _ 2: 10 2: 7
monitor 3: 1 pclose
Y19N$h`M(NOP=C2819zY0=J GBC2J
3: 1
2: 7
perror 3: 1
N YM S@GB<cGBM(CUecGBC2D019Y19C2D61&CU<X8;M D01
popen 3: 1

nftw 3: 1 ~ ‚-aZ^`_ 2: 9, 11
3: 2
nl_langinfo 3: 1
printf
YNM(81&D6:N$1vABGBC2HI=JI14<c=@?AB1
3: 1
1: 15, 19, 23–24, 2: 11,

O YNM(81&SyS
13–14, 17

M&? qp 198<2rAB1 19C2<cN$V¬Y0M(GBC2<


=N8;/2GBWX14rAB11: 1 GBOP=JI1 1: 4, 14, 2: 20

D0=<c=]N$19YN1&Sy19C21:<c=18 <>GBM C WXGBN$<c:=A(=D0D0N$19SyS@GBC2J


1: 1, 2: 1–2

D0=<c=n<cVIY19S 1: 2
YNM(81&SyS@M N$e`S@Y198;G r8 2: 2

30E0KL/U19=D019N 1: 2
YNM(81&SyS@M N$e`S@Y198;G r8)GBC2hcM N$Om=<>GBM C
2: 10

1957<c19C2SyGBM(C2S 1: 1, 3 1: 4, 6–8, 11–12,

hcM N$Om=< 1: 4
YNM(JIN$=Oà/U19=D019N
18–19, 21, 2: 1, 3, 7, 11, 14, 16–17, 19

/2=Sy/¬<c=@?AB1:
1 1 YNM(JIN$=OüGBCU<>19NYN$19<c192:N 2
YNM(JIN$=Oà/U19=2:D01911,
N 13, 19 YNM(JIN$=OàABM =D0GBC2J 1: 14, 2: 10
1: 2, 2: 2 2: 1, 7

              ! " #$ " &%(')" +*, *
I-3
ELF: Executable and Linkable Format

GBC2Sy<>N:8;<cGBM C
pushl 2: 17–18 strcmp 3: 1
putc 3: 1
fcj0i E0^`j0g strcpy 3: 1
putc _ 3: 2 strcspn 3: 1
putchar 3: 1 strdup
S@<cN$G C2JL<>=@?A 1&z7S@1914M&? pq198<Xr0AB1
3: 1
putenv 3: 1 1: 16
puts 3: 1 strlen 3: 1
putw 3: 1 strncat 3: 1
strncmp 3: 1
strncpy 3: 1
Q strpbrk 3: 1
strrchr 3: 1
qsort 3: 1
strspn 3: 1
strstr 3: 1
strtod 3: 1
R strtok 3: 1
raise 3: 1 strtol 3: 1
rand
N1&ABM ;8 =<c=@?AB1nrAB1
3: 1 strtoul 3: 1
N1&ABM ;8 =<cGBM C2zSy1914M&? 1:qp 1918<2rAB1 S@VIO? M(A(C2=OP19Syz—‡¼=C2DF=S@Sy19O?ABV
swab 3: 1
1: 21
S@VIO? M(A(<c=@?AB19zSy1&14M&? p>198;<2rAB1 1: 17
rewind 3: 1
S@VIO? M(ABS 1: 17

=@?SyM(AB:0<>1
?GBCUD0GBC2J 1: 8
S 8;M OPOmM(C 1: 18
scanf S@1914=ABS@M/2=S@1:/R8<c=@?AB1
S@198<>GBM C2zM&3:? 1p>1&8<2rAB1 S@/U=N$19DFMo?Ipq198;<2rAB14hc:0C21:8;<c14
GBM(CUS
S@19JIOP19C2< 2: 7
<cV Y1 1: 19
D0VIC2=OPGB8 :C2D61&r0C219D
1: 18
M&? pq198<2rAB1 2: 10–11 WX=AB:1 1: 8
Y19N$OmGBS@SyGBM(CUS 2: 1–2 aتa.030¡ý« 1: 18, 20
YNM(81&SyS 2: 8
2: 7
YNM(JIN$=Oà/U19=D019N
2: 1, 7, 10, 15–16
2: 2
setbuf 3: 1
setjmp
T
S@19<cec:Sy19Nw^c†ŒYNM(JIN$=OmS
3: 1
2: 16 tcdrain 3: 1
setvbuf
S@/U=N$19DFABG ? N$=NVf`S@1914S@/2=N19DFM&? pq198<Xr0AB19g
3: 1 tcflow 3: 1
S@/U=N$19DFM&? pq198<2rAB1 tcflush 3: 1
hc:0C28;<cGBM(CUS 1: 1 tcgetattr 3: 1
S@1914=ABS@MD0V CU=OPGB8¥ABGBCUH GBC2J
1: 19 tcgetpgrp 3: 1
S@1914=ABSyM-M&? p>1&8<2rAB1 2: 10 tcgetsid 3: 1
S@19JIOP19C2<cS 2: 10 tcsendbreak 3: 1
S@/U1&A AS@8;NGBY<cS 2: 9 tcsetattr 3: 1
1: 1 tcsetpgrp 3: 1
sleep 3: 1 tdelete 3: 1
sprintf 3: 1 tell 3: 1
srand 3: 1 tempnam 3: 1
sscanf 3: 1 tfind 3: 1
strcat 3: 1 tmpfile 3: 1
strchr 3: 1 tmpnam 3: 1

      ! " # " &%(')" -*, *        
I-4
ELF: Executable and Linkable Format

toascii 3: 1
_tolower 3: 1
tolower 3: 1
_toupper 3: 1
toupper 3: 1
tsearch 3: 1
twalk 3: 1
tzset 3: 1

U
:C2D61&r0C219D+?19/2=WXGBM N
:C2D61&r0C219D½SyV OL?M ABS 1: 10, 2: 6–7
1: 8
ungetc
:C2G C2GB<>G =ABGB©3:19D½
1
D0=<c=
:C2SyY198;GBr019D{YNM(Y19N<>V 2: 8
1: 2–3, 9, 11, 14, 2: 2–3, 5, 7–8,
14, 20

V
vfprintf
WXGBN$<c:=A(=D0D0N$193:SyS@1GBC2J
2: 2
vprintf 3: 1
vsprintf 3: 1

W
wcstombs 3: 1
wctomb 3: 1

X
_xftw 3: 1–2

Z
©19N$M z:0C2GBC2GB<cGB=ABGB©19DFD0=<c=
2: 8

              ! " #$ " &%(')" +*, *
I-5

You might also like