Sie sind auf Seite 1von 60

I

Executable and Linkable Format (ELF)

Contents

Preface

OBJECT FILES

PROGRAM LOADING AND DYNAMIC LINKING

C LIBRARY

Index

Introduction
ELF Header
Sections
String Table
Symbol Table
Relocation

1-1
1-3
1-8
1-16
1-17
1-21

Introduction
Program Header
Program Loading
Dynamic Linking

2-1
2-2
2-7
2-10

C Library

3-1

Index


  


 
 


I-1


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

ELF: Executable and Linkable Format

ii


      
!
" # " &%(')  " -*, *


  


 
 


Figures and Tables

Figure 1-1: Object File Format


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


  


 
 



     

1-1
1-2
1-3
1-5
1-6
1-6
1-7
1-8
1-9
1-10
1-11
1-12
1-13
1-13
1-16
1-17
1-18
1-19
1-20
1-21
1-22
1-23
2-2
2-3
2-4
2-5
2-7
2-7
2-8
2-9
2-12
2-12
2-17
2-17
2-18
2-19
2-20
3-1
3-1
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=OE0M
=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<2sz7E0G ?N$=NV
A GBS@<cST<>/U1SyV
OL?M
ABST8;M
C2<c=GBC219DFGBC
z<c/21vS@<c=C2D0=N$D{i+\RaZ^|=C2D
NM(:<cGBC219Syz
libsys
libc
=C2DF<c/214JIABM&?=A(D0=<c=nS@VIO? M(ABSN$19I:0GBN$19D+? V<c/21
NM(:<cGBC219S7k
libc

References to X86 architecture have been changed to Intel Architecture.


NOTE


  


 
 



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

OBJECT FILES

Introduction

1-1
1-1
1-2

File Format
Data Representation

ELF Header

1-3
1-5
1-7

ELF Identification
Machine Information

Sections
Special Sections

1-8
1-13

String Table

1-16

Symbol Table

1-17
1-20

Symbol Values

Relocation

1-21
1-22

Relocation Types


  


 
 



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

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;co9 /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$$Ico /2M
ABD0S=nYN$M
J
N=OdSy:GB<c=@?AB14h`M(Nw1957198:<>G M(C2<c/214r0AB14S@Y198GBr19S/2M
Q
fcj0i -aZgU8N$19=<c19S
exec
_
=nYNM
J
N=OPSTY0N$M
8;19S@SGBOm=J
1Ik
i$;$$nly /2M
ABD0ST8M(D61=CUDFD0=<c=nS@:GB<c=@?AB14h`M(NwABGBC2HIGBC2JLGBCR<cQRM8;M
C2<>195Z<cSkK
GBNS@<cz<c/214ABGBCUH19D0G <>M
NS@191
fca +gcUOP=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=OPGB8A 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=<XN19I:GBN1M
<c/219N =@?Sy<>N=8;<2OP=8;/UGBC219S@zSy:8;/R=SS@/219ABA(Sy8;NGBY<>Syz=N$1
19578AB:D019Dk
i+hc<c19N <c/214GBCU<>NM(D0:08;<cM(NVLOP=<c19N$GB=ABz7~=N$<2xhcM
8;:Sy19STM
CR<c/214r0AB14hcM
NOP=<2=C2DF/UM(QGB<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=Ok

File Format
?
pq198<Xr0AB19SY=N$<cGB8;GBY=<c14GBC|YN$M
JIN$=OABGBC2HIGBC2JLfu?:0GBABD0GBC2JL=nYNM(JIN=OPg2=CUDFYNM(JIN$=O1957198:<>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=nrAB19ST8M(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;<2rAB19STM
NJ
=C2GB=<cGBM
Ck
Figure 1-1: Object File Format

E0GBC2HIGBC2J4GB19Q

______________________
30E0KL/U19=D019N
______________________

~NM(JIN=O/219=D019Nw<c=@?AB1

;`

______________________
a1&8<>GBM
C|
______________________

kkk

______________________

a1&8<>GBM
C|
______________________

kkk

______________________
kkk

______________________
a1&8<>GBM
C|/219=D019Nw<c=@?AB1

______________________

305Z198;:0<>GBM
C4GB19Q

_______________________
30E0KL/U19=D019N
_______________________

~0N$M
J
N=Od/219=D019Nw<c=@?AB1

_______________________

a1&JIOP19C2<U

_______________________

a1&JIOP19C2<Ut

_______________________
kkk

_______________________
aZ198<>GBM
CR/219=D019Nw<c=@?AB1

;`


_______________________

i+CR0IL$;$ N1&SyGBD019ST=<2<c/21w?19JIGBC2C2G C2JL=C2DF/2M


ABD0S=nNM(=D{OP=YD019S@8N$G ? GBC2JL<>/U14rAB19STM
NJ
=C2GB=<cGBM
CkTIl
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
Ck+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$q2
$
` =C2D{<>/21vYN$M
J
N=Od195Z198;:<cGBM
CRWXGB19QM
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<>=@? AB19N$19ABM
8;=<c=@?AB1vrAB19SD0M-CUM(<2C21919DFM
C21IkTi
$$`;$$`;o 8;M
C2<c=GBC2STGBCUhcM
N$OP=<cGBM
CRD019S@8N$G ?G C2J<c/214rAB19STSy198;<cGBM(CUSkT36WI19N$VLS@198<>GBM
CR/2=S=CR19C2<cN$VLGBCR<c/21
<c=@?AB1919=8;/R19C2<cN$VLJ
G WI19STGBCUhcM(NOP=<cGBM
CRS@:8/R=ST<c/214S@198;<cGBM
CRC2=OP19z<c/214S@198;<cGBM
CRS@GB19z19<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

NOTE

Although the figure shows the program header table immediately after the ELF header, and the section
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/Reu?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 kTT1&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=<c19Dk
Figure 1-2: 32-Bit Data Types

\R=OP1

aZGB1

i+ABGBJIC2OP19C2<

~:0N$YM
S@1

_____________________________________________________________

[+C2S@GBJIC219D{YN$M
J
N=O=D0D0N$19SyS
Elf32_Addr
t
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/214C2=<c:N$=ABSyGB14=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$14SyGB19ST<cM-=nOm:AB<cGBYAB14M
h z19<c8ZkT]=<c=n=ABS@M/2=WX1Sy: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
Elf32_Addr
M
CR= eu? V
<c1w?M
:C2D6=N$VLQRGB<c/2GBC|<>/21vrAB1Ik

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(SyGB19SkT^`h2<c/21
M&?
pq198<2rAB1vhcM(NOP=<28/2=C2JI19S@z=xYN$M
JIN$=OOP=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<>19Dk~NM(JIN$=OmSOPG J
/2<U<c/219N$19hcM
N1vGBJ
C2M
N1v195Z<>N=(GBC2hcM
N$Om=<>GBM
CkT.0/214<cN$19=<cOP19C2<2M
h2OPGBSyS@GBC2JIGBC2hcM
N$Om=e
<cGBM(CRD61&Y01&CUD0STM
CR8;M
C2<c1&5Z<2=C2DFQRGBABAo? 14S@Y198;G r19DFQR/U1&C|=C2DFGBh2195Z<>19C2SyGBM(CUST=N$14D019r0C219Dk
Figure 1-3: ELF Header

#define EI_NIDENT

16

typedef struct {
unsigned char
Elf32_Half
Elf32_Half
Elf32_Word
Elf32_Addr
Elf32_Off
Elf32_Off
Elf32_Word
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
} Elf32_Ehdr;

e_ident[EI_NIDENT];
e_type;
e_machine;
e_version;
e_entry;
e_phoff;
e_shoff;
e_flags;
e_ehsize;
e_phentsize;
e_phnum;
e_shentsize;
e_shnum;
e_shstrndx;

e_ident

e_type

.0/214GBCUGB<>GB=Ao? V
<c19STOm=N$HL<>/214r0AB14=ST=CRM&?
pq198<Xr0AB14=C2DFYNM(WXGBD014OP=8;/UGBC219ecGBC2D019Y19CUD019C2<XD0=<c=
QRGB<c/RQ|/2GB8/R<>MD0198M(D014=CUDFGBC2<c19N$YN19<X<c/214r0AB19ST8;M
C2<c19C2<cSk)M
OPYA 1&<c14D019S@8N$GBY<cGBM
C2ST=YY01&=N
?19ABM
QRz7GBC|30E0KL^`D019C2<cGBr08;=<cGBM(Ck
.0/2G STOP19OL?19N GBD61&CU<>GBr019ST<c/214M&?
pq198<Xr0AB14<>VIY1Ik
\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

~NM(819S@SyM(NecS@Y198GBr8
ET_HIPROC
0xffff
________________________________________

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=N1N19S@19N$WX19DFhcM
N
ET_HIPROC
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
M&?
pq198<Xr0AB14<>VIY19ST=SC2198;19S@Sy=N$V k


  


 
 



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

1-3

ELF: Executable and Linkable Format

e_machine

.0/2G STOP19O? 1&NSTWX=AB:14S@Y198;GBr019ST<c/214N$19I:GBN19DF=N$8/2GB<c1&8<>:0N$14hcM


N =CRGBC2D6GBWIGBD0:0=A(rAB1Ik
\R=OP1
=AB:1
19=C2GBC2J
____________________________________
R
\
M
P
O
=8/2GBC21

EM_NONE 0
+
i
0
.
+

F
.
3Fst
1

EM_M32

a

~
+
i

EM_SPARC 2
^`C2<>19A
s
EM_386
3
M(<cM(NM(A =]
EM_68K
4

5
M(<cM(NM(A =]
EM_88K
7
^`C2<>19A

EM_860

^c~0a-TaZs
EM_MIPS
8
____________________________________

e_version

-<>/219NwWI=AB:19S=N$14N$19S@19NWI19DF=C2DFQ|GBABAo?14=S@S@G J
C219DF<cM-C219QOm=8;/2GBC219S=STC2198;19SyS@=N$V k
~NM(819S@SyM(NecS@Y198GBr836E0KC2=OP19ST:0S@1<c/214OP=8;/UGBC21CU=OP1<cM-D0GBSy<>G C2J
:0GBS@/R<c/219OkKIM
N 195Z=OPYAB19z
<c/2140=J
SOP19C2<cGBM
C219D+?19ABM
Q:S@14<c/214Y0N$19r5
=n0=JLC2=OP19D
hcM
Nw<c/21
EF_
WIDGET
EM_XYZ
OP=8/2GBC21Q|M(:0ABD]?18=ABAB19D
k
EF_XYZ_WIDGET
.0/2G STOP19O? 19N GBD019C2<cGBr19S<>/U1M&?
p>198;<Xr0AB14WI19NS@GBM
Ck
\R=OP1
=AB:1
19=C2GBC2J
______________________________________
0
^`C2WI=ABG DWI19NS@GBM
C
EV_NONE

:NN$19C2<UWI19NS@GBM
C
EV_CURRENT
1
______________________________________

e_entry
e_phoff
e_shoff
e_flags
e_ehsize
e_phentsize
e_phnum

e_shentsize
e_shnum

.0/21WX=AB:1 S@GBJIC2GBr019ST<c/214M
N$GBJIGBC2=A(r0AB14hcM
N$Om=<>195Z<>19C2SyGBM
C2STQ|GBABA(8;N19=<>14CU19QWX1&NS@GBM
C2SQRGB<c/
/2GBJI/219N C2:0O1?19NSkT.0/214WI=AB:01M
h
z<c/2M(:0J
/RJIGBWX1&C|=S =@?M
WI19zQRGBABA(8;/2=CUJ
14=S
1
C2198;19SyS@=NVL<>MN1&0198<X<c/2148:NN$19C2<2EV_CURRENT
WX1&NS@GBM
CRCU:O? 1&N9k
.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
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(ABD0S19N$Mk
.0/2G STOP19OL?19N /UM(ABD0S<>/U14YN$M
J
N=Od/219=D019Nw<c=@?AB19STr0AB14M(h`hcS@19<2GBCn? V
<c19SkT^`h2<c/214rAB14/U=STC2M
YNM(JIN$=O/219=D019Nw<>=@? AB19z<c/2GBSOP19O? 1&Nw/2M
ABD0S19N$Mk
.0/2G STOP19O? 19N /2M
ABD0ST<c/214S@198<>GBM
CR/219=D019Nw<>=@?A 1&SrAB14M
hchcSy1&<2GBCn? V
<c19SkT^`h2<>/U1r0AB14/2=STCUM-S@198e
<cGBM(C|/219=D019N <c=@?AB19z7<>/2GBSOP19OL?19N /UM(ABD0S19N$Mk
.0/2G STOP19O? 1&Nw/2M
ABD0STYN$M
8;19SyS@M
N$e`S@Y198;GBr080=JIST=S@SyM(8GB=<>19DFQRGB<c/R<c/214rAB1IkK
AB=JLC2=Om1&S<c=H
1
;l
wkaZ191v=8;/2GBCU14^`C2hcM
N$Om=<>GBM
C2h`M(Nw0=JLD019r0C2GB<cGBM(CUSk
<c/214h`M(NO
EF_
_
.0/2G STOP19O? 19N /2M
ABD0ST<c/21430E0K/219=D019NSTS@GB14GBCn? V
<c19Sk
.0/2G STOP19OL?19N /UM(ABD0S<c/214S@GB14GBCx?VI<>19SM(hUM(C21419CU<>NVGBC|<>/U14rAB19STYNM
J
N=Od/219=D019Nw<>=@? AB19=ABA
19C2<cN$GB19S=N$14<c/214S@=Om14S@GB1Ik
.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
D0:8<XM
h
=C2D
JIGBWI19ST<c/214<>=@? AB19STS@GB14GBCn? V
<c19SkT^`h2=nr0AB14/2=SC2MYN$M
e
e_phnum
JIN$=O/219e_phentsize
=D019Nw<c=@?AB19z
/2M
ABD0ST<c/214WX=AB:1419N$Mk
e_phnum
.0/2G STOP19O? 1&Nw/2M(A D0ST=nS@198;<cGBM
C/U19=D019N$STS@G 1GBCn? V
<c19SkTiSy1&8<>G M(C|/219=D019N GBSM
C21419C2<>NVLGBC
<c/214S@198;<cGBM
CR/219=D019Nw<>=@? AB19=ABA(19C2<cN$GB19S=N$14<c/214S@=Om14S@GB1Ik
.0/2G STOP19O? 19N /2M
ABD0ST<c/214C2:OL?19N M
h219C2<cN$GB19SGBCR<>/U1Sy198;<cGBM(C|/219=D019N <c=@?AB1Ik.0/2:0ST<c/214Y0N$M
D0:8;<
M
h
=C2D
JIGBWI19ST<c/214S@198<>GBM
CR/219=D019Nw<>=@? AB19SS@GB14GBCn? V
<c19SkT^`h2=xrAB1
e_shentsize
/2=S
C2M-Sy198;<cGBM(C|/219=D019N <ce_shnum
=@?AB19z
/2M
ABD0ST<c/214WX=AB:1419N$Mk
e_shnum

1-4


      
!
" # " &%(')  " -*, *


  


 
 


ELF: Executable and Linkable Format

e_shstrndx

.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
<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/21WX=AB:1
kaZ1914a1&8<>GBM
C2Sy(=C2DFaZ<cNGBC2JL.0=@?A 1&? 19ABM(QhcM
NwOPM
N$1vGBC2hcM
N$Om=e
SHN_UNDEF
<cGBM(Ck

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=C2DOP:0AB<>GBY0AB18;AB=SyS@19SM
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/214GBCUI:GBN$VLGBSOP=D014=C2DFGBC2D61&Y01&CUe
D019C2<2M
h2<c/214r0AB19SN$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

KIGBAB18;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

aGB14M
h
EI_NIDENT 16
e_ident[]

___________________________________________

.0/219Sy1GBCUD0195719ST=88;19S@SU? V
<c19ST<c/2=<X/2M
ABDF<>/U1hcM
ABABM
QRGBCUJWI=AB:019Sk
<cM
EI_MAG0 EI_MAG3
irA 1&SrNS@< ?VI<c19ST/2M
ABDF=nOP=JIGB8)C2:O? 19N$zuGBD019C2<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]
_______________________________________

EI_CLASS

.0/21vC2195Z<?VI<>19z


  


 
 


e_ident[EI_CLASS]

zGBD019C2<cGBr01&S<>/U14rAB19ST8AB=S@SyzM(Nw8;=Y=8GB<>V k


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

1-5

ELF: Executable and Linkable Format

\R=OP1

=AB:1

19=C2GBC2J

______________________________________
^`C2WI=ABG D|8;AB=SyS
ELFCLASSNONE 0
1
steu? GB<IM&?
p>198;<cS
ELFCLASS32

eu? GB<IM&?
p>198;<cS
_ELFCLASS64
_____________________________________
2

EI_DATA

.0/214r0AB14hcM
N$Om=<XGBSD019S@GBJIC219DF<>M?14YM
N$<c=@?AB14=OPM
C2JLOP=8;/UGBC219STM
h2WX=N$GBM
:STSyGB19S@zQ|GB<>/UM(:<
GBOPYM
S@G C2J<c/214S@GB19SM(h2<c/214AB=NJ
19S@<2OP=8/2GBC214M
CR<>/214SyOP=ABAB19S@<lkAB=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
<c/214Mo?IELFCLASS64
pq198;<2rAB14Om=V8/2=C2JI19z@?:<2<>/U1 e?GB<2hcM
N$OP=<2GBSM(<c/219N$Q|GBS@14:CUS@Y198;G r19Dk-<>/U19N68AB=S@Sy19S
QRGBA Ao?14D019rC219DF=STCU1&819S@Sy=N$VIzQRGB<c/RD0GB hchc19N19C2<? =S@GB8<cVIY19ST=C2DFS@G 1&ShcM
N M&?
pq198<XrA 1D0=<c=2k
j0VI<>1
S@Y198GBr19S<>/214D0=<c=n19C28;M
D0GBC2JLM
h2<c/214YN$M
8;19S@SyM(NecSyY198;GBr08D0=<c=nGBC
<c/214M&?
e_ident[EI_DATA]
pq198<2rAB1IkT.0/214h`M(ABABM
QRGBCUJL1&CU8;M
D0GBC2JIST=N148;:0N$N19C2<>ABVLD019r0C219Dk
\R=OP1
=AB:1
19=C2GBC2J
____________________________________________
^`C2WI=ABG DD6=<>=n19C28;M
D0GBC2J
ELFDATANONE 0
a1&1?19ABM
Q
ELFDATA2LSB 1

a1&1?19ABM
Q
_ELFDATA2MSB
___________________________________________
2

EI_VERSION
EI_PAD

M(N14GBC2hcM
NOP=<>G M(C|M(C|<>/219Sy1419C28;M
D0GBC2JIST=Y0Y19=N$S?19ABM
Qk-<>/U1&NwWI=AB:019ST=N$14N19S@19N$WX19DF=C2D
QRGBA A? 1=SyS@GBJIC219DF<>M-CU1&Q1&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
WX=AB:1e_ident[EI_VERSION]
OP:0S@<?1
z=ST195ZYAB=GBC219DF=@? M(WX14hcM
N
k
EV_CURRENT
e_version
.0/2G STWI=AB:01Om=N$HIST<>/U1 ? 1&JIGBC2CUGBC2JM
h2<>/U1:0C2:S@19D+?VI<c19STGBC
k.6/219S@1w? V
<c19S=N$1
N1&Sy19N$WX19DF=C2D{S@19<2<cM1&NM
YN$M
JIN$=OPS<c/2=<2N1&=D{Mo?Ipq198;<2r0AB19Se_ident
S@/2M
:ABD{GBJ
CUM(N14<c/219OkT.0/21WX=AB:1
M
h
QRGBA A(8;/2=C2JI14GBCR<>/U1h`:<c:N$14GBh28:NN$19C2<cABV:0C2:S@19D+? V
<c19ST=N$14JIGBWI19CROm19=C2GBC2JISk
EI_PAD

irAB19SD0=<>=n19CU8;M
D0GBC2JLS@Y198;GBr019ST/UM(Q<>MGBC2<c19N$YN19<X<c/21w?=SyGB8M&?
p>198;<cSTGBCR=nr0AB1IkTi+SD019Sy8;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
NELFCLASS32
1&YN19S@19C2<c19DF=STS@/UM(Q|Cn?19ABM
Qkj0VI<>14C2:0O?19NST=YY19=Nw GBCR<c/214:YY19NwAB19hc<28;M
N$C219NSk
30C28M(D0GBCUJ
S@Y198GBr19StS8;M
OPYAB19OP19C2<2WI=AB:01&SyzQRGB<c/R<>/U1AB19=Sy<XSyGBJ
C2G r8;=CU<?VI<c1M
8;8:YVIGBC2J<c/21
ABM
QR19S@<2=D0D0ELFDATA2LSB
N$19SySk
Figure 1-5: Data Encoding ELFDATA2LSB

0x01

01

0x0102

02

0x01020304

1-6

01

04

03

02


      
!
" # " &%(')  " -*, *

01


  


 
 


ELF: Executable and Linkable Format

30C28M(D0GBCUJ
S@Y198GBr19StS8;M
OPYAB19OP19C2<2WI=AB:019S@zQRGB<c/R<>/U1OmM(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

0x01020304

02

01

02

03

04

Machine Information
KIM(Nwr0AB1vGBD019C2<cGBr8=<>GBM
C|GBC

e_ident

z<c/214steu? GB<X^`C2<c19A(i+N$8/2GB<c1&8<>:0N$14N19I:GBN$19S<c/214hcM
ABABM(Q|GBC2JLWI=AB:019Sk

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=D019NS
OP19O? 19N =C2DFOP:Sy<X/2=WI14<c/21WX=AB:1
e_machine
k
EM_386
.0/21436E0K/219=D019NS
OP19O? 19N /2M
ABD0SU? GB<X0=JIST=SyS@M
8;GB=<c19DFQRGB<c/R<>/U14rAB1IkT.0/214ste?GB<2^`C2<>19A
i+N$8/2GB<>198<>:0N$1
e_flags
D019rCU19STC2M0=J
SyS@M
<>/UGBSTOP19OL?19N 8M(CU<>=GBCUST19N$Mk


  


 
 



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

1-7

Sections
i+CRM&?
pq198<Xr0AB19STSy1&8<>G M(CR/U1&=D61&Nw<c=@?AB14AB19<cSTM
C214ABM
8;=<c14=ABA(<>/U14rAB19STSy198;<cGBM(CUSkT.0/214S@198<>GBM
CR/219=D019Nw<>=@?A 1GBS=C
=NN$=VM
h
S@<cN$:08;<c:N1&ST=STD61&Sy8;NG ?19D+?19ABM
QkTiS@198<>GBM
CR/219=D019N <c=@?AB14GBCUD0195xGBST=nSy:Z?Sy8;NGBY<XGBCU<>M<>/UGBS
=NN$=V k.0/2Elf32_Shdr
1430E0KL/219=D019NS
OP19O? 19N JIGBWX1&S<c/21w?VI<>14M
hchcSy19<Xh`N$M
Od<c/21w?19JIGBC2C2G C2JM
h2<c/214r0AB14<>M<c/214S@198e
e_shoff
<cGBM(C|/219=D019Nw<c=@?AB19
<c1&A ABST/2M
QOm=C2V19CU<>NGB19ST<c/214S@198;<cGBM
CR/219=D019Nw<>=@?A 18M(CU<>=GBCUS@
e_shentsize
JIGBWI19S<>/214SyGB14GBCn?VIe_shnum
<>19SM(hU19=8;/R19C2<cN$V k
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
0xfff2
SHN_COMMON
SHN_HIRESERVE 0xffff
__________________________

SHN_UNDEF

NOTE

.0/2G STWI=AB:01Om=N$HIST=CR:C2D019r0C219D0zOPGBSyS@GBC2JIzGBN$N19AB19WI=C2<czM(NwM(<c/219N$Q|GBS@14OP19=C2GBCUJ
AB19SySTS@198<>GBM
C
N1&h`19N$19C281
kKIM
N 195Z=OPYAB19z=nSyV
OL?M
A(D01&r0C219D0N$19AB=<cGBWX14<>MSy1&8<>G M(CRCU:O? 1&N
SHN_UNDEF
GBST=CR:C2D61&r0C219DFS@VIO?M
Ak

Although index 0 is reserved as the undefined value, the section header table contains an entry for
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=C2JI1M
h2N19S@19N$WX19DFGBC2D0195Z19Sk
0
<c/2N$M
:JI/
SHN_LOPROC
=SHN_HIPROC
AB:01&SGBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
.0/2G STWI=AB:01SyY198;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
SHN_ABS
C2M
<2=hchc198<>19D-?VLN1&A M(8=<>GBM
Ck
aV
O? M(ABSD019rC219DFN19AB=<cGBWI14<cM-<c/2GBSS@198;<cGBM
CR=N$148M(OPOmM(C|S@VIO?M
ABS@zSy:8;/|=STKI+T.0Ti+\
SHN_COMMON
M
N :0C2=ABABM
8;=<c19DF195Z<>19NC2=A(WX=N$GB=@? AB19Sk
COMMON
.0/2G STWI=AB:014S@Y198;GBr019ST<c/214:YY19NX?M(:0C2DFM
h2<>/U1N=C2JI1M
h2N19S@19N$WX19DFGBC2D0195Z19SkT.0/214S@VIS@<c19O
SHN_HIRESERVE
N1&Sy19N$WX19STGBC2D0195Z19SU?19<cQR1919C
=C2D
zGBC28AB:SyGBWI19<c/21
SHN_LORESERVE
WX=AB:19STD0MC2M
<2N$19hc19N19C28;14<c/214
S@198<>GBM
CR/U1&=D61&Nw<c=@?AB1IkTSHN_HIRESERVE
.0/2=<2GBSyz<>/214Sy198;<cGBM(CR/U19=D019N <c=@?AB1
D0M
19STI;28;M
C2<c=GBCR19C2<cNGB19STh`M(Nw<>/U14N$19Sy19N$WX1&D{GBC2D0195Z19Sk
SHN_LORESERVE

a1&8<>GBM
C2S8;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
CR/U1&=D61&Nw<c=@?AB1IkM(N19M(WX19N$zMo?Ipq198;<2rAB19SyZSy1&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
Ck
30=8;/RSy198;<cGBM(CRM
8;8:YGB19STM
C2148;M
C2<>G J
:M
:STf`YM(SyS@G ? ABV19OPY<cVIg2S@19I:19C281M
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
Ck
i+CRMo?Ipq198;<2rAB14OP=V/U=WI14GBC2=8;<cGBWX1SyY=8;1IkT.0/214WX=N$GBM
:S/219=D019N$S=C2DF<c/214S@198<>GBM
C2SOPGBJI/2<XCUM(<28;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 r19Dk
iS@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
Elf32_Word
Elf32_Word
Elf32_Addr
Elf32_Off
Elf32_Word
Elf32_Word
Elf32_Word
Elf32_Word
Elf32_Word
} Elf32_Shdr;

sh_name

sh_type
sh_flags
sh_addr

sh_offset

sh_size

sh_link

sh_name;
sh_type;
sh_flags;
sh_addr;
sh_offset;
sh_size;
sh_link;
sh_info;
sh_addralign;
sh_entsize;

.0/2G STOP19O? 1&NwS@Y198;G r19ST<c/214C2=OP14M(h2<c/214S@198<>GBM


CkT^`<cSTWI=AB:014GBST=CRGBC2D0195]GBC2<cM-<c/214S@198<>GBM
C
/219=D019NwS@<cN$GBC2JL<c=@?AB14Sy1&8<>G M(CS@1914aZ<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$GB19ST<c/214S@198<>GBM
C2ST8;M
C2<c19C2<cST=C2DFS@19OP=CU<>GB8SkaZ198<>GBM
CR<cV
Y01&S=C2D{<>/U1&G N
D019S@8N$GBY<cGBM
C2ST=YY19=NX?19ABM
Qk
a1&8<>GBM
C2SS@:YY0M(N<Xeu? GB<X0=JIST<c/2=<2D019S@8;NG ?14OPGBSy8;19ABAB=CU1&M
:S=<><cN$G ?:<c19SkK
AB=JLD019r0C2GB<cGBM(CUS
=YY19=NX?19ABM
Qk
^`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
=D0D0N19S@ST=<2QR/UGB8;/R<c/214S@198<>GBM
C2STr0N$Sy<?VI<c1Sy/2M
:ABDFN19S@GBD01IkT-<c/219N$Q|GBS@19z<>/U1Om19O?19Nw8;M
C2e
<c=GBC2ST2k
.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@<
?VI<>1vGBCR<c/214S@198<>GBM
CkT-C214Sy198;<cGBM(C|<>VIY19z
D019S@8N$G ? 19D]?19ABM
QRzM(88;:YG 1&STC2M
S@Y=814GBCR<>/U1r0AB19z=C2DFGB<cS
OPSHT_NOBITS
19O? 19N ABM
8;=<c19ST<>/U18M(CU8;19Y<c:=A(YAB=8;19Om19C2<XGBCR<c/21
sh_offset
r0AB1
k
.0/2G STOP19O?19NwJ
GBWX19ST<>/U1S@198<>GBM
C2STSyGB1GBCn? V
<c19Sk[+C2AB19SyST<c/214S@198<>GBM
CR<cV
Y014GBS
z<>/214S@198<>GBM
CRM(88;:0YGB19S
?VI<>19SGBC|<>/214r0AB1IkTiSy198;<cGBM(C|M(hU<>VIY1
SHT_NOBITS
OP=VL/2=WI14=nC2M
C2ec19NM-sh_size
SyGB19z@?:<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(Sy1G C2<>19NYN$19<c=<>G M(CRD019Y19CUD0S
M
CR<c/214Sy198;<cGBM(C|<>VIY1IkTi<>=@?A 1 ?19ABM
QD019S@8N$G ? 19ST<>/214WI=AB:019Sk


  


 
 



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

1-9

ELF: Executable and Linkable Format

sh_info
sh_addralign

sh_entsize

iS@198<>GBM
CR/219=D019NS

.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
<cV
Y1Iki<>=@?A 1 ?19ABM
QD019S@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=
D0M
:Z?AB19Q|M(ND0z<c/214S@VIS@<c19OdOP:0S@<219C2S@:0N$14D0M
:Z?AB19Q|M(NDF=ABGBJIC2OP19C2<2hcM
Nw<>/21419CU<>GBN14S@198;<cGBM
Ck
.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
C2ABVLn=C2D{YM(SyGB<>GBWX14GBC2<c19J
N=A(YM
QR19NSTM
h2<cQRM=N14=ABABM
QR19Dk
sh_addralign

=AB:01&Sn=C2DFvOm19=CR<>/214Sy1&8<>G M(CR/2=SC2M-=ABGBJIC2OP19CU<X8;M
C2Sy<>N=GBC2<cSk
aM(OP14Sy198;<cGBM(C2S/2M
ABDF=n<>=@?A 1M
h2r05719D0e`S@GB1419C2<cN$GB19SyzSy:8/R=ST=nS@VIO?M
A(<c=@?AB1IkKIM
NSy:8;/R=vS@198e
<cGBM(C2z7<>/2GBSOP19O? 19N JIGBWI19S<>/214SyGB14GBCn?VI<>19SM(hU19=8;/R19C2<cN$V kT.0/214OP19O? 19N 8;M
C2<c=GBC2STnGBh2<c/21
S@198<>GBM
CRD0M
19STCUM(<2/2M
ABDF=n<c=@?AB14M
h2r05Z1&D6ecS@GB1419C2<cNGB19Sk
sh_type

OP19O? 19N S@Y198;G r19ST<>/U1S@198<>GBM


C2STS@19OP=CU<>GB8Sk

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

SHT_HASH
5
SHT_DYNAMIC
6

SHT_NOTE
7

SHT_NOBITS
8

SHT_REL

SHT_SHLIB
10

SHT_DYNSYM
11

SHT_LOPROC
0x70000000

SHT_HIPROC
0x7fffffff
SHT_LOUSER
0x80000000
0xffffffff
SHT_HIUSER
______________________________

SHT_NULL
SHT_PROGBITS
SHT_SYMTAB

1-10

=C2D

.0/2G STWI=AB:01Om=N$HIST<c/21Sy198;<cGBM(CR/U19=D019N =STGBC2=8<>GBWX19GB<XD0M


19STC2M
<X/2=WX14=CR=S@S@M
8;GB=<c19DFS@198<>GBM
Ck
-<>/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
D019<c1&NOPGBCU1&D{SyM(AB19ABVv?VL<c/214Y0N$M
J
N=Ok
.0/219Sy1Sy198;<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=OPGB8ABGBCUH
GBC2J kTi+ST=n8;M
OPYAB19<c1SyV
OL?M(A(<c=@?AB19zGB<XOm=V8M(C2<c=GBCROP=CUVS@VIO? M(ABST:0C2C2198;19Sye
S@=NVLhcM
N D0VIC2=OPG 8ABGBCUH
GBC2J kTM
C2S@19I: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=81IkTaZ1914aZVIO?M
A(.6=@?AB19?19ABM
Qh`M(NwD019<>=GBA Sk

SHT_DYNSYM


      
!
" # " &%(')  " -*, *


  


 
 


ELF: Executable and Linkable Format

.0/214Sy198;<cGBM(CR/UM(ABD0S=nS@<cN$GBCUJ<c=@?AB1IkTi+CRM&?
pq198<Xr0AB1Om=V/U=WI14OP:A <>GBYAB14Sy<>NGBC2JL<>=@?A 1Sy198;<cGBM(CUSk
a1&1va<cN$GBC2JL.6=@?AB19?19ABM
QhcM
NwD019<>=G ABSk
.0/214Sy198;<cGBM(CR/UM(ABD0SN$19ABM
8;=<cGBM(CR19CU<>NGB19STQRGB<c/R195ZYABGB8;GB<2=D0D019C2D0SyzSy: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 1N19ABM
8;=Elf32_Rela
<cGBM(CRSy198;<cGBM(CUSk
a1&1vT19ABM
8;=<cGBM
C2?19ABM
QhcM
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=OmGB8ABGBCUH
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$1IkaZ1914R=S@/R.6=@?AB19GBCR~=N<2tnhcM(N
D019<c=GBABSk
.0/214Sy198;<cGBM(CR/UM(ABD0SGBC2hcM
N$Om=<>GBM
CRhcM
N D6V
C2=OmGB8ABGBCUH
GBC2J k:0N$N19C2<>ABVIz=CRM&?
pq198<Xr0AB14OP=V/U=WI1
SHT_DYNAMIC
M
C2ABVLM(C214D6V
C2=OmGB8Sy198;<cGBM(C2zy?:<2<>/UGBSTN19S@<cN$GB8<>GBM
CROm=V? 14N$19AB=5Z19DFGBCR<c/214hc:0<>:0N$1IkaZ191
]VIC2=OPGB8)aZ198<>GBM
C2GBCR~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
iS@198;<cGBM
CRM(hU<>/2G ST<>VIY14M
8;8;:0YGB19STC2MS@Y=81G 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
sh_offset
8;SHT_PROGBITS
M
C2<c=GBC2ST<c/2148;M
C2819Y<>:=A
rAB14M
hchcSy1&<lk
.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<Xr0AB1Om=V/2=WX14OP:AB<cGBYAB14N19ABM(8=e
<cElf32_Rel
GBM(CRSy198;<cGBM(CUSkaZ1914T19ABM(8=<>GBM
C2? 1&A M(QhcM
NwD019<>=G ABSk
.0/2G STS@198;<cGBM
C<cVIY1GBSTN19S@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@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
.0/2G STWI=A :14S@Y198GBr19ST<c/214ABM
QR19NX?M(:0C2DFM
h2<>/U1N=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$=OmSkaZ198<>GBM
CR<cV
Y19S?19<cQR1919C
=C2D
OP=V4?14:S@19D+?V
SHT_LOUSER
<c/214=YYABGB8=<>GBM
C2zQ|GB<>/UM(:<28M(C20GB8<>GBCUJ
Q|GB<>/|8;:NN$19CU<XM
N h`:SHT_HIUSER
<c:N$14SyV
Sy<>19OmecD019rCU19DFS@198<>GBM
C
<cV
Y19S7k
SHT_STRTAB

-<>/219NwSy1&8<>GBM
C|<>VIY14WX=AB:19S=N$14N19S@19NWI19DkTi+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
sh_name
0
SHT_NULL ^`C2=8;<cGBWI1
sh_type

\RM0=JIS
sh_flags
0

\RM=D0D0N$19SyS
sh_addr
0

\RMr0AB14M
hchcSy1&<
sh_offset

\RMS@GB1
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
sh_link

\RM=:057GBA GB=N$VGBC2hcM
N$Om=<>GBM
C
sh_info
0
\RM=ABGBJIC2OP19C2<
sh_addralign
0

\RM19CU<>NGB19S
sh_entsize
0
______________________________________________________

iS@198<>GBM
CR/219=D019NS
OP19O? 19N /2M
ABD0Seu?GB<20=J
S<>/2=<2D019S@8N$G ? 14<>/214Sy198;<cGBM(CUS=<><cN$G ?:<c19SkT]19r0C219D
sh_flags
WX=AB:19ST=YY19=NX?19ABM
QR
M
<>/219NwWI=AB:019ST=N$14N19S@19NWI19Dk
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=n0=J? GB<XGBSS@19<2GBC
z<c/214=<c<cN$G ? :<>1vGBSM
C2hcM
Nw<>/U14S@198;<cGBM
CkT-<c/219N$Q|GBS@19z<c/21v=<><cN$G ? :<c14GBSM(h`hcM(N
D0M
19STCUM(<2=YYABV kT[+C2sh_flags
D019r0C219D{=<><cN$G ? :<c19S=N$1vS@19<2<cM19N$Mk
.0/214Sy198;<cGBM(CR8M(CU<>=GBCUSTD0=<c=n<>/2=<2S@/2M
:ABD+? 14QRNGB<>=@? AB1D6:N$GBCUJYNM(819S@ST195Z198;:0<>GBM
Ck
SHF_WRITE
.0/214Sy198;<cGBM(CRM
8;8:YGB19STOm19OPM
N$VLD0:N$G C2JYNM(819S@ST195Z198;:0<>GBM
CkaZM
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<>=@? AB1OP=8/2GBC214GBC2S@<cN$:08;<cGBM(CUSk
SHF_EXECINSTR
i+ABAo?GB<cSTGBC28AB:D019DFGBCR<>/UGBSTOP=SyH=N$14N$19Sy19N$WX19Dh`M(N Y0N$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
SHF_MASKPROC

.0Q|M-OP19OL?19N$SGBCR<>/U1Sy198;<cGBM(CR/U19=D019N$z
=C2D
z/2M
ABDFS@Y198GB=A(GBC2hcM
N$Om=<>GBM
C2zD019Y19C2D0G C2JM
C
sh_link
sh_info
S@198<>GBM
C|<>VIY1Ik

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
0
SHT_DYNAMIC
<c/214S@<cN$GBCUJ<c=@?AB14:0S@19D+?V

19C2<cN$GB19SGBCR<c/214S@198<>GBM
Ck

______________________________________________________________________

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
CkTa198;<cGBM(CUSTGBCR<c/214ABGBS@<?19ABM
Q=N14:S@19D+? V<c/214S@VIS@<c19O
=C2DF/2=WX14<>/U1G C2D0GB8;=<c19DF<cV
Y19ST=CUDF=<><cN$G ?:<c19Sk
Figure 1-14: Special Sections

\R=OP1

.0VIY1

i+<><cN$G ?:<c19S

____________________________________________________________
SHT_NOBITS
SHF_ALLOC + SHF_WRITE
.bss
C2M
C21
.comment SHT_PROGBITS

.data
SHT_PROGBITS SHF_ALLOC + SHF_WRITE
.data1
SHF_ALLOC + SHF_WRITE
SHT_PROGBITS C2
M
C21
.debug
SHT_PROGBITS
@
S
9
1
1w?19ABM
Q
.dynamic SHT_DYNAMIC
SHT_STRTAB
SHF_ALLOC
.dynstr

.dynsym
SHT_DYNSYM
SHF_ALLOC
.fini
SHT_PROGBITS
+ SHF_EXECINSTR

S@SHF_ALLOC
191w?19ABM
Q
.got
SHT_PROGBITS
SHT_HASH
SHF_ALLOC
.hash
SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR
.init

S@191w?19ABM
Q
.interp
SHT_PROGBITS C2M
C21
.line
SHT_PROGBITS C2M
C21
.note
SHT_NOTE

SHT_PROGBITS S@191w?19ABM
Q
.plt
I
SHT_REL
S@191w?19ABM
Q
.rel


  


 
 



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

1-13

ELF: Executable and Linkable Format

Figure 1-14: Special Sections (continued )

S@191w?19ABM
Q

.rela
SHT_RELA

SHT_PROGBITS SHF_ALLOC
.rodata
.rodata1 SHT_PROGBITS SHF_ALLOC

C2M
C21
.shstrtab SHT_STRTAB
S@191w?19ABM
Q
.strtab
SHT_STRTAB
S@191w?19ABM
Q
.symtab
SHT_SYMTAB

SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR


.text
____________________________________________________________

.bss

.comment
.data

=C2D

.debug
.dynamic

.dynstr
.dynsym
.fini

.got
.hash
.init

.interp

.line

1-14

.0/2G STSy198;<>G M(C|/2M(ABD6ST:0C2GBC2GB<cGB=ABGB19DFD0=<c=n<c/2=<28;M


C2<>NG ?:0<>14<cM<>/U14YN$M
JIN$=OPSOP19OPM
N$VLGBOP=JI1IkTj0V
D019rCUGB<>GBM
C2z<c/214SyV
Sy<>19OGBC2GB<cGB=ABGB19S<>/214D6=<>=nQ|GB<>/|19N$M
STQ|/219CR<c/214YNM(JIN$=O?19JIGBC2S<>MN$:0CkT.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
Ck
.0/219Sy14S@198<>GBM
C2S/2M
ABDFGBC2G <>GB=ABGB19D{D0=<>=x<>/2=<28M(CU<>NG ?:<c14<cM<>/21vYN$M
J
N=OPSOP19OPM
N$VLGBOm=J
1Ik
.0/2G STS@198<>GBM
CR/2M
ABD0STGBC2h`M(NOP=<cGBM(CRh`M(NwS@VIO?M
ABGB8D01? :JIJ
GBC2J kT.0/2148;M
C2<c19C2<>S=N$14:CUS@Y198;G r19Dk
.0/2G STS@198;<cGBM
CR/2M(ABD6STD0V
C2=OmGB8ABGBC2HIGBC2JLGBC2hcM
N$Om=<>GBM
CkT.0/214S@198;<cGBM
C2ST=<c<>NG ?:<c19STQRGBA AG C28;AB:0D01<c/21
?GB<lk/219<>/U19N <c/21
?GB<2GBSTS@19<2GBSTYNM(819S@S@M
N SyY198;GBr08ZkaZ1914~0=N$<2txhcM
N
SHF_ALLOC
SHF_WRITE
OP
M
N$1nGBC2hcM
N$Om=<>GBM
Ck
.0/2G STS@198<>GBM
CR/2M
ABD0SS@<cN$GBC2JISTC21919D019DFh`M(NwD0V
CU=OPGB8ABG C2H
GBCUJ
zOmM(Sy<X8M(OPOmM(CUABV<c/214S@<cN$GBCUJ
S<>/2=<
N1&YN19S@19C2<2<c/214C2=OP19ST=SyS@M
8;GB=<c19DFQRGB<c/RSyV
OL?M(A
<>=@?A 119CU<>NGB19SkaZ1914~0=N$<2txhcM
NwOPM
N$1vGBC2hcM
N$Om=<>GBM
Ck
.0/2G STS@198;<cGBM
CR/2M
ABD0ST<>/U1D0VIC2=OmGB8ABGBC2HIGBC2JSyV
OL?M
A<c=@?AB19z=STaZVIO? M(A(.0=@? AB19D019S@8N$G ? 19SkaZ191
~=N<2txhcM
NwOPM
N$1vGBC2hcM
N$Om=<>GBM
Ck
.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
.0/2=<2GBSyzQR/U19CR=nYNM(JIN$=O1957G <>SC2M
N$OP=ABABVIz<c/214SyV
Sy<>19O=N$N=C2J
19S<>M195Z198;:<c14<c/2148;M
D014GBC|<>/2G S
S@198<>GBM
Ck
.0/2G STS@198<>GBM
CR/2M
ABD0ST<c/214J
ABM&?=A(M
hchcSy19<X<c=@?AB1IkaZ1914aZY198GB=A(aZ198<>GBM
C2SyGBC|~=N<Xx=C2DFxABM&?=A
-hchcSy1&<2.6=@?AB19GBCR~0=N$<2tnh`M(NwOPM
N$1vGBC2hcM
N$Om=<>GBM
Ck
.0/2G STS@198;<cGBM
C/UM(ABD0ST=nS@VIO?M
A(/2=S@/R<c=@?AB1IkaZ1914R=S@/|.0=@?AB19GBC|~=N<Xtnh`M(NwOPM
N$1vGBC2hcM
N$OP=<cGBM
Ck
.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
.0/2=<2GBSyzQR/219C|=nYN$M
JIN$=OS@<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
NwYN$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
OP19C2<2<>/U=<XGBC28AB:D019ST<c/214S@198<>GBM
C2z<c/21Sy198;<cGBM(CUS=<><cN$G ?:<c19STQRGBABA(GBCU8;AB:D61<c/21
?GB<cM
<c/2e
SHF_ALLOC
19N$Q|GBS@19z<c/2=<? GB<XQ|GBABAo?14M(h`hlkaZ1914~0=N$<2txhcM
NwOPM
N$1vGBC2hcM
N$Om=<>GBM
Ck
.0/2G STS@198;<cGBM
CR/2M(ABD6STABGBC214C2:O? 19N GBC2hcM
N$Om=<>GBM
CRhcM
N S@VIO?M
ABGB8D01? :JIJ
GBC2JIzQR/2GB8/RD019S@8;NG ?19ST<c/21
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;GBr019Dk

.data1


      
!
" # " &%(')  " -*, *


  


 
 


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
C2GBCR~0=N$<2tnD019S@8N$G ? 19Sk
.0/2G STS@198<>GBM
CR/2M
ABD0S<>/214YNM
8;19D0:N14ABGBC2HI=J
14<c=@?AB1IkaZ1914aZY198GB=A(a198;<cGBM(C2SyGBCR~0=N$<2n=C2D{~0N$M
e
.plt
8;19D0:0N$14E0G C2H
=JI14.0=@? AB19GBCR~0=N$<2tnh`M(NwOPM
N$14G C2hcM
N$OP=<cGBM
Ck
I =C2D
I
.rel
.0.rela
/219Sy14S@198;<cGBM
C2ST/UM(ABDFN19ABM(8=<>G M(CRGBCUhcM
N$OP=<cGBM
C2z=STT19ABM(8=<>GBM
C2?19ABM
QD019S@8N$G ? 19SkT^`h2<c/214rAB14/U=S
=nABM
=D0=@?AB14S@19JIOP19C2<2<>/U=<XGBC28AB:D019SN$19ABM
8;=<cGBM(CUz<c/214S@198<>GBM
C2SyZ=<c<cN$G ? :<>19SQRGBABA(GBCU8;AB:D014<c/21
?GB<cM
<>/219NQRGBSy19z<>/2=<?GB<2QRGBA Ao?14M(h`hlkTM
C2WX19C2<>GBM
C2=ABABVIzI 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
.text
QRM
:ABDF/2=WX1<c/214C2=OP1
M
N
k
.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=OR19=D019N$GBC|~0=N$<2txhcM
NwOPM
N$14G C2hcM
N$OP=<cGBM
Ck
.0/2G SSy198;<cGBM(CR/2M
ABD0STS@198;<cGBM
CC2=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 119CU<>NGB19SkT^`h2<c/214rAB14/2=S=nABM(=D6=@?AB14S@19JIOP19C2<2<>/U=<XGBC28AB:D019S<>/214SyV
OL?M
A(S@<cN$GBC2J
<c=@?AB19z<>/U1Sy198;<cGBM(CUS=<><cN$G ? :<c19STQRGBABA(GBCU8;AB:D61<c/21
?GB<cM
<>/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=STaZVIO? M(A(.0=@? AB19GBCR<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(C2ST=<c<cN$G ?:0<>19STQ|GBABA(GBC28AB:D01
<c/21
?GB<cM
<>/219NQRGBSy19z<>/2=<?GB<2QRGBA Ao?14M(h`hlk
SHF_ALLOC
.0/2G STSy198;<cGBM(C|/2M
ABD0ST<c/214<c1957<czuM(Nw1957198:<c=@?AB14GBCUS@<cN$:8<>GBM
C2SyzM
h2=nYNM
J
N=Ok
.note

.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
C20GB8;<cSTQRGB<c/RS@VIS@<c19OSy198;<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<>/U1Sy198;<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
.sbss
.lit8
.gptab
.conflict


  


 
 


.tdesc
.lit4
.reginfo
.liblist


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

1-15

String Table
a<>NGBC2J<c=@?AB14Sy198;<cGBM(C2S/2M
ABDFC2:ABABe`<>19NOPGBC2=<c19DF8;/2=N=8;<c19N Sy19I: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
CkT.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]GBS19N$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&D6GB<>SS@198<>GBM
CR/219=D019NS
OP19O? 19N Q|M(:0ABDF8;M
C2<c=GBCR19N$Mk\RM
C2ec19N$M
sh_size
GBC2D0195Z19ST=N14GBC2WX=ABGBDFhcM
Nw=CR19OPY<cVLS@<cN$GBC2JL<c=@?AB1Ik
iS@198<>GBM
CR/219=D019NS
OP19O? 19N /2M
ABD0S=CRGBC2D0195]GBC2<cM-<c/214S@198<>GBM
CR/219=D019NwS@<cN$GBC2JL<c=@?AB14S@198<>GBM
C2z=SD019S@GBJIe
sh_name
C2=<c19D+?VL<c/21
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<>/U1e_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
__________________


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
CkTiSy<>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
QR19Dk

1-16


      
!
" # " &%(')  " -*, *


  


 
 


Symbol Table
i+CRM&?
pq198<2rAB19STSyV
OL?M
A(<>=@? AB14/2M
ABD0STG C2hcM
N$OP=<cGBM
CRC21919D019DF<cMABM(8=<>14=CUDFN$19ABM
8;=<c14=nYNM(JIN=OPSTSyV
O? M(ABG 8
D019rCUGB<>GBM
C2S=C2DFN19hc19N$19C2819SkTiS@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
Ck
\R=OP1
=AB:1
___________________
STN_UNDEF 0
___________________

iS@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
Elf32_Addr
Elf32_Word
unsigned char
unsigned char
Elf32_Half
} Elf32_Sym;

st_name

st_name;
st_value;
st_size;
st_info;
st_other;
st_shndx;

.0/2G STOP19O? 19N /2M


ABD0ST=CRGBCUD0195xGBC2<cM-<c/214M&?
pq198<Xr0AB19SS@VIO?M
A(S@<cN$GBCUJ<c=@?AB19zQR/2G 8;/R/2M
ABD0ST<c/21
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

st_value
st_size

st_info

.0/2G STOP19O?19NwJ
GBWX19ST<>/U1WX=AB:14M(h2<c/214=S@S@M
8;GB=<c19DFS@VIO?M
AkT]19Y19C2D0GBC2JLM
CR<c/2148M(CU<>195Z<>z7<>/UGBS
OP=V4?14=CR=@?S@M
AB:<c14WI=AB:019z=CR=D0D6N$19S@Syz1&<c8Zk D019<c=GBABST=YY19=NX?19ABM
Qk
=C2VS@VIO?M
ABST/2=WX1=SyS@M
8;GB=<c19DSyGB19SkKIM
N 1957=OmYAB19z=nD0=<>=nM&?
pq198<>STSyGB14GBST<c/214C2:OL?19N M
h
?VI<>19S8;M
C2<c=GBC219DFGBCR<c/214Mo?Ipq198;<lk.0/UGBSTOP19O? 19N /2M
ABD0STnGBhU<>/214SyV
O? M(A(/U=STC2MS@GB14M(Nw=C
:C2HIC2M
QRCRS@GB1Ik
.0/2G STOP19O? 19N S@Y198GBr19ST<c/214S@VIO?M
ABST<cV
Y14=C2D+? GBC2D0GBC2JL=<><cN$G ?:<c19SkTiABGBS@<2M(h2<c/214WI=AB:019ST=C2D
OP19=C2GBCUJ
ST=YY19=NSU?19ABM
QkT.0/214hcM
ABABM(Q|GBC2JL8;M
D01Sy/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

st_other
st_shndx

.0/2G STOP19O? 19N 8;:0N$N1&CU<>ABVL/2M


ABD0STn=C2DF/2=SC2M-D019r0C219DFOP19=C2GBC2J k
30WX1&NVLS@VIO?M
A(<c=@?AB1419C2<cNVGBSD019rC219D0GBC|N$19AB=<cGBM(C|<>MSyM(OP14Sy198;<cGBM(CU<>/UGBSTOm19O?19Nw/2M
ABD0ST<c/21
N1&AB19WX=C2<2S@198<>GBM
CR/219=D019Nw<c=@?AB14GBC2D0195kTi+STKIGBJI:N$1vecn=C2D{<>/21vN$19AB=<c19DF<c1&5Z<2D019S@8N$G ? 19zS@M
OP1
S@198<>GBM
CRGBC2D0195719STGBC2D6GB8;=<c1S@Y198GB=AOm19=C2GBC2JISk

iS@VIO?M
ABSU?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
CkTE0M(8=A
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? GBC219DkT-C214r0AB19STD019r0C2GB<cGBM(C|M(hU=
STB_GLOBAL
JIABMo? =A(S@VIO?M
A(Q|GBABA(S@=<cGBS@h`V=CUM(<c/219NwrAB19ST: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
STB_HIPROC
=AB:01&S
GBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
STB_LOCAL

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(QOP:AB<cGBYAB14D019r0C2GB<cGBM(CUS
M
h
S@VIO? M(ABSTQ|GB<>/R<c/21Sy=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
19STI;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=v19NM-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
C2S
S@198<>GBM
CR/219=D019NwOP19O?19Nw/2M
ABD0ST<c/214S@VIO?M
A
sh_info
<c=@?AB14GBC2D61&5]h`M(Nw<>/U14rNS@<2C2M
C2ecABM
8;=A
S@VIO?M
Ak

1-18


      
!
" # " &%(')  " -*, *


  


 
 


ELF: Executable and Linkable Format

iS@VIO? M(ABS<>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
ABS<>VIY14GBSTC2M
<2S@Y198;G r19Dk
.0/214SyV
OL?M(A(GBS=S@S@M
8;G =<>19DFQRGB<c/R=nD0=<c=vM&?
p>198;<czSy: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
CkaZVIO?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<2rAB1IkTirAB14SyV
OL?M(A(/U=S
?GBCUD0GBC2JIzGB<cSTS@198<>GBM
CRGBC2D0195]GBS
z=C2DFGB<
STB_LOCAL
YN1&819D019S<>/U14M
<>/U1&N
S@VIO? M(ABShcM
N <c/214r0AB19zGBh2GB<2GBSTYN19S@19C2<lk SHN_ABS
STB_LOCAL
<c/2N$M
:JI/
STT_LOPROC
=AB:0STT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
STT_NOTYPE

KI:C28;<cGBM
CRS@VIO? M(ABSfc<>/UM(Sy14QRGB<c/R<>VIY1
g2GBCRS@/2=N19DM&?
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
ABSTWX=AB:14N$19h`1&NST<cM-=nSyY198;GBr08ABM
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
ABSTWX=AB:1
8;/U=C2J
19S=STQ|19ABABz=C2D{N$19hc19N19C28;19S<>M<c/214S@VIO? M(A(8M(CU<>GBCU:14<>MYM
GBC2<><cM<>/214Sy=OP14ABM
8;=<cGBM
CRGBC|<>/214Y0N$M
J
N=Ok
aM(OP14S@Y01&8GB=A(S@198;<cGBM
CRGBC2D0195xWX=AB:19STJIGBWX1M
<>/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;=:Sy1M
h2N1&A M(8=<>GBM
Ck
SHN_ABS
.0/214SyV
OL?M
A(AB=@?19ABST=n8M(OmOPM
Cn?ABM
8;HL<>/2=<2/2=SC2M(<2V
19<?1919CR=ABABM
8;=<c19DkT.0/21SyV
OL?M
ABSTWX=AB:1
SHN_COMMON
JIGBWI19ST=A GBJ
C2Om19C2<X8M(CUS@<>N=GBC2<cS@zSyGBOPGBAB=Nw<>M=nS@198;<cGBM
C2S
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(ABSS@GB14<c1&A ABST/2M
QOm=C2V? V
<c19ST=N14N$19I:GBN19Dk
st_value
.0/2G STS@198;<cGBM
CR<>=@?A 1GBC2D61&5]OP19=C2ST<c/214S@VIO?M
A(GBST:C2D019r0C219DkT/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 STr0AB19SN$19h`19N$19C281&S<cM-<c/21
S@VIO? M(A(Q|GBABAo?14ABGBCUH
19DF<cM<>/214=8<>:0=A(D019rC2GB<cGBM
Ck


  


 
 



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

1-19

ELF: Executable and Linkable Format

i+STOm19C2<>GBM
C219DF=@? M(WX19z<>/U14S@VIO?M
A(<c=@?AB1419C2<cN$VLhcM
NwGBC2D0195]nf
Figure 1-19: Symbol Table Entry: Index 0

\R=OP1

=AB:1

g2GBSN$19Sy1&NWI19D0GB<2/2M
ABD0ST<c/214hcM
ABABM
QRGBC2J k

STN_UNDEF

\RM
<>1

_______________________________________________
\RMC2=OP1
st_name
0
19N$MWX=AB:1
st_value
0

\RMS@GB1
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
st_value
k
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
st_value
M
hchcSy1&<2h`N$M
Od<c/21w?19JIGBst_value
C2C2GBCUJM
h2<c/214Sy198;<cGBM(C|<>/2=<
GBD019C2<cGBr19S7k
st_shndx
^`CR1957198:<c=@?AB14=C2DFS@/U=N$19DFM&?
pq198<Xr0AB19S@z
/2M
ABD0ST=nWIGBN<c:=A(=D0D0N$19SySkT.0MOP=HI14<>/U1&Sy14rAB19SyZSyV
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<>/U1D0=<c=n=ABABM
Q19hcr08;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
ABGB8D019r0C2GB<cGBM(CUSkKIM
N 1957=OmYAB19zQ|/219C
=nYNM(JIN$=O8;=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
CkT^`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$=OGBOP=JI1IkTT$c;$
`$ =N14<>/U19S@14D0=<c=2k
Figure 1-20: Relocation Entries

typedef struct {
Elf32_Addr
Elf32_Word
} Elf32_Rel;

r_offset;
r_info;

typedef struct {
Elf32_Addr
Elf32_Word
Elf32_Sword
} Elf32_Rela;

r_offset;
r_info;
r_addend;

r_offset

r_info

.0/2G STOP19OL?19N JIGBWI19S<>/U14ABM(8=<>GBM


CR=<2QR/2G 8;/R<cM-=YY0ABV<c/214N1&A M(8=<>GBM
CR=8;<cGBM
CkKIM(Nw=xN$19ABM
8;=<c=@?AB1
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
CkKIM(Nw=CR195Z198;:<c=@?AB14r0AB14M(Nw=nS@/2=N19DFMo?Ipq198;<cz<c/214WI=AB:01G ST<c/214WIGBN<>:0=A(=D0D0N$19SySTM
h
<c/214Sy<>M
N$=JI14:CUGB<2=hchc198<>19D-?VL<c/214N1&A M(8=<>GBM
Ck
.0/2G STOP19O? 19N JIGBWI19SU? M(<c/R<c/214S@VIO?M
A(<>=@? AB14GBC2D0195]QRGB<c/RN$19SyY198;<X<cMQR/2GB8/R<>/U1N19ABM(8=<>G M(CROm:S@<?1
OP=D019z7=C2DF<c/214<cVIY14M
h2N19ABM(8=<>GBM
C|<>M=YYABV kKIM
N 195Z=OPYAB19z=x8;=ABA
GBC2S@<cN$:08;<cGBM(C2SN$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=ABAB19DkT^`h2<c/214GBC2D0195]GBS
z
<c/214:C2D019r0C219DFS@VIO?M
A(GBC2D61&5Zz<c/214N$19ABM
8;=<cGBM
CR:S@19Sn=ST<c/214SyV
OL?M
A(WI=AB:01
k -T1&A M(STN_UNDEF
8=<>GBM
CR<cVIY19S
=N14YN$M
8;19S@SyM(NecSyY198;GBr08ZkT/219C|<>/21v<c1957<2N19hc19N$S<>M=xN1&A M(8=<>GBM
C|19C2<>NVISN19ABM
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
ELF32_R_TYPE
ELF32_R_SYM
<cM<c/21v19C2<cN$VIS
OP19O? 19N&k
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))

r_addend

.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
N1&ABM
8;=<c=@?AB1vr019ABDk

i+STS@/UM(Q|C=@? M(WX19zM(C2ABV
19C2<cN$GB19S8;M
C2<>=GBC|=CR1957YABG 8;GB<2=D0D019C2DkT30CU<>NGB19STM
hU<>VIY1
S@<cM
N$1
=CRGBOmYABGB8;GB<2=D0D019C2DFGBC|<>Elf32_Rela
/214A M(8;=<cGBM
CR<cM?14OmM(D0GBr019DkT]19Y19C2D0GBC2JLM
C|<>/U14YN$M
8;19SyS@M
Nw=N$8/2GB<c1&8<>Elf32_Rel
:0N$19z7M(C21vhcM
N$OM(N
<c/214M
<>/219NwOPG J
/2<? 14C2198;19SyS@=N$VLM
NwOPM
N$148M(CUWI19C2GB19C2<lkTM
C2S@19I:01&CU<>ABVIz=C|GBOPYAB19OP19C2<c=<cGBM(C|hcM
N =nY=N<cGB8;:AB=N
OP=8/2GBC214Om=V:0S@14M
C214hcM
N$O1&5Z8;A :S@GBWX19ABVLM(Nw19GB<>/U1&NwhcM
N$OD019Y19C2D0GBC2JLM
CR8;M
C2<c1957<lk


  


 
 



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

1-21

ELF: Executable and Linkable Format

iN$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=D019NS
=C2D
OP19O? 19N$SyzD019Sy8;NG ?19DFGBCRa198;<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
r_offset
OP19O? 19N&k
^`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/214r0AB19N$19ABM
8;=<cGBM
CRM
hchcSy19<>SD019S@GBJIC2=<c14=nSy<>M
N$=JI14:CUGB<XQ|GB<c/2GBCR<c/21
S@198M(C2DFS@198<>GBM
Ck
^`CR1957198:<c=@?AB14=C2DFS@/U=N$19DFM&?
pq198<Xr0AB19S@z
/2M
ABD0ST=nWIGBN<c:=A(=D0D0N$19SySkT.0MOm=H
14<c/219S@1vrAB19SyN$19ABM
e
8;=<cGBM
CR19C2<cN$GB19SOPM
N$14:0S@19hc:0A(hcM
N <c/214D0VIC2r_offset
=OmGB8ABGBCUH
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
Q19hcr08;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@1WX=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<2rAB1IkTM
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
CkTT19ABM
8;=<cGBM(CUST=YYABGB19DF<cM-195Z198;:0<>=@?A 1M
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
Ck
.0/2G STOP19=C2S<>/214=D0D019CUDF:S@19DF<cM-8M(OmY:<c1<c/214WI=A :14M(h2<c/214N1&A M(8=<>=@?A 1r019ABDk
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

GOT
L

P
S

.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$VIS
S@VIO? M(A(Q|GBABA(N$19SyGBD014D0:NGBC2J195Z198;:0<>GBM
CkaZ1914xABM&?=A(-hchcSy19<X.6=@?AB19GBCR~=N<2tnhcM
N OmM(N14GBC2hcM
N$Om=e
<cGBM(Ck
.0/2G STOP19=C2S<>/214=D0D0N19S@STM
h2<c/214J
ABM&?=A(M
hchcSy19<X<c=@?AB1IkaZ1914xABM&?=A(-hchcSy19<2.0=@?AB19GBCR~0=N$<2tnhcM
NwOPM
N$1
GBC2h`M(NOP=<cGBM(Ck
.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
?M
AkTiYNM
8;19D0:N14ABGBC2HI=JI14<>=@? AB1419C2<cN$VLN19D0GBN$198<>S=nh`:C28<>GBM
C|8;=ABA(<cM<c/214YNM(Y19NwD019Sy<>GBC2=<cGBM
CkT.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
CkaZ1914~NM(819D0:N14E0GBC2HI=J
1v.0=@?AB19GBC|~=N<2tnhcM
NwOPM
N$1vGBC2hcM
N$OP=<cGBM
Ck
.0/2G STOP19=C2S<>/U1YA =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
: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

iN$19ABM
8;=<cGBM
C|19C2<cN$VIS
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/21vaZTaZ.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
=D0D019C2DkT^`CR=ABA(8=S@19S@z<c/214=D0D019C2DF=C2D{<>/2Elf32_Rel
148M(OPY0:<>19DFN19S@:0AB<X:0S@14<>/U1Sy=OP1w?VI<c1M
ND019N&k
Figure 1-22: Relocation Types

\R=OP1

=AB:1

KIGB19ABD

=AB8;:A =<>GBM
C

___________________________________________________
C2M
C21

C2M
C21
R_386_NONE
0


S + A
R_386_32
1


R_386_PC32
2

 S + A - P
R_386_GOT32
3

 G + A - P
R_386_PLT32

4
L + A - P
C2M
C21

C2M
C21
R_386_COPY
5


S
R_386_GLOB_DAT
6


R_386_JMP_SLOT
7
 S
R_386_RELATIVE
8
 B + A
R_386_GOTOFF

9
S + A - GOT
10  GOT + A - P
R_386_GOTPC

___________________________________________________

aM(OP14N19ABM(8=<>GBM
CR<cV
Y19ST/U=WI14S@19OP=CU<>GB8SU?19VIM(CUDSyGBOPYAB148=AB8;:A =<>GBM
Ck
.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
ABSJ
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
ABSTYNM(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 8ABGBC2HI19N 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

R_386_GLOB_DAT

R_3862_JMP_SLOT

R_386_RELATIVE

R_386_GOTOFF

R_386_GOTPC

1-24

.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
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 119CU<>NGB19Sk
.0/21vABGBC2HL19D0GB<cM(Nw8;N19=<>19S<c/2GBSN$19ABM
8;=<cGBM(C|<cV
Y14h`M(NwD0VIC2=OPGB8)ABGBCUH
GBC2J kT^`<cSTM
hchcSy1&<
OP19O? 19N JIGBWX19ST<c/214ABM
8;=<cGBM
CRM
h2=xYN$M
8;19D0:0N$14ABGBCUH
=JI14<c=@?AB1419C2<cN$V kT.0/21D0VIC2=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
ABST=D0D0N19S@SxuS@1914~NM(819D0:N$14E0GBCUH
=JI14.0=@?AB19GBCR~0=N$<2tlk
.0/21vABGBC2HL19D0GB<cM(Nw8;N19=<>19S<c/2GBSN$19ABM
8;=<cGBM(C|<cV
Y14h`M(NwD0VIC2=OPGB8)ABGBCUH
GBC2J kT^`<cSTM
hchcSy1&<
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<>/U1Sy/2=N$19DFM&?
p>198;<XQ|=STABM
=D019DF<>M
<c/214N$19AB=<cGBWX14=D0D0N$19SySkT1&A M(8=<>GBM
CR19C2<cN$GB19ShcM
N <c/2GBST<cVIY14OP:Sy<XSyY198;GBh`Vnh`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(ABSTWX=AB:14=C2DF<c/21
=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
JIABMo? =A(M(hch`S@19<X<c=@?AB14GBCRGB<cST8=AB8;:A =<>R_386_PC32
GBM
CkT.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


      
!
" # " &%(')  " -*, *


  


 
 


PROGRAM LOADING AND DYNAMIC LINKING

Introduction

2-1

Program Header
Base Address
Note Section

2-2
2-4
2-4

Program Loading

2-7

Dynamic Linking

2-10
2-10
2-10
2-11
2-15
2-16
2-17
2-19
2-20

Program Interpreter
Dynamic Linker
Dynamic Section
Shared Object Dependencies
Global Offset Table
Procedure Linkage Table
Hash Table
Initialization and Termination Functions


  


 
 



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

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=ON$19YN1&Sy19C2<>=<cGBM
C2S@z7M(NwYNM(819S@SGBOP=JI19SkTiYN$M
8;19SySTGBOP=JI1/U=STS@19JIe
OP19C2<cS<>/2=<2/2M
ABDFGB<cS<>195Z<>zD6=<>=zSy<>=8H
z7=C2DFS@MM
CkT.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=O195Z198;:0<>GBM
CkT.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$=Ok
0$2$ ;92nxGBWX19CR=C|Mo?Ipq198;<2r0AB19z<>/U14S@VIS@<c19OdOP:0S@<2ABM
=DFGB<2GBC2<cMOP19OPM
N$VLhcM
Nw<>/U14YN$M
JIN$=O<>MN$:0Ck
+

92ni+hc<c19N <c/214SyV
Sy<>19OABM(=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

NOTE

There are naming conventions for ELF constants that have specified processor ranges. Names such as
DT_, PT_, for processor-specific extensions, incorporate the name of the processor:
DT_M32_SPECIAL, for example. Preexisting 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;<2r0AB19SYNM(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@<c19OC21919D0S<>MY0N$19Y=N14<c/214YNM(JIN=Odh`M(Nw195Z198;:<cGBM
CkTi+CRM&?
pq198<Xr0AB14$q I
8;M
C2<c=GBC2SM
C214M
NwOPM
N$14$$`;I&z=Sa19J
Om1&CU<XM
C2<c19C2<>SyD019S@8;NG ?19S?19ABM
Qk~NM
J
N=Od/219=D019N$S=N$14OP19=C2G C2J
h`:A
M
C2ABVLhcM(Nw195Z198;:<c=@?AB14=C2D{S@/2=N19DFMo?Ipq198;<2r0AB19SkTir0AB14S@Y198GBr19SGB<>SM(Q|CRYNM(JIN$=O/219=D019N SyGB14QRGB<c/R<c/21430E0K
/219=D019NS
=C2D
OP19O? 19N$SxuS@191430E0KLR19=D019N$GBCR~0=N$<2lk
e_phentsize

e_phnum

Figure 2-1: Program Header

typedef struct {
Elf32_Word
Elf32_Off
Elf32_Addr
Elf32_Addr
Elf32_Word
Elf32_Word
Elf32_Word
Elf32_Word
} Elf32_Phdr;

p_type
p_offset
p_vaddr
p_paddr

p_filesz
p_memsz
p_flags
p_align

p_type;
p_offset;
p_vaddr;
p_paddr;
p_filesz;
p_memsz;
p_flags;
p_align;

.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<
<c/214=NN$=V19AB19OP19C2<cSGBC2hcM
N$Om=<>GBM
CkT.0VIY14WI=AB:019ST=C2DF<>/U19GBN OP19=C2GBCUJ
ST=YY01&=NX?19ABM
Qk
.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
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
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
S@19JIOP19C2<cSY0/2V
SyGB8;=A(=D0D0N$19SySkj0198;=:0S@14aZVIS@<c19OdGBJIC2M
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=JI1M
h2<c/214Sy1&JIOP19C2<cGB<2OP=V4?1419N$Mk
.0/2G STOP19O? 19N JIGBWI19S<>/214CU:O?19NwM(h7?VI<>19SGBCR<>/U14OP19OPM
N$VLGBOP=JI14M(hU<>/214Sy19J
OP19CU<>GB<2OP=V4?1
19N$Mk
.0/2G STOP19O? 19N JIGBWI19S=JISTN19AB19WI=CU<X<cM-<c/214Sy1&JIOP19C2<lkT]19r0C219DF0=JWX=AB:19ST=YY19=NX?19ABM
Qk
i+ST~NM(JIN$=OE0M(=D6GBC2J
AB=<c19N GBCR<c/2GBSY=N$<2D019S@8N$G ? 19S@zABM
=D0=@?AB14YNM(819S@STSy19J
Om19C2<>SOP:Sy<X/U=WI1
8;M
C2JIN$:01&CU<XWX=AB:19ShcM(N
=C2D
zOPM
D0:ABM<c/214Y=JI14S@GB1Ik.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$19I:G N$19DkT-<c/219N$Q|GBS@19z
S@/UM(:A D+?14=nYM(SyGB<cGBWI19zGBC2<c19J
N=A
p_align
YM
QR19NwM(hUtz=C2D
S@/UM(:A D19I:=A
zOPM
D0:ABM
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
QkT]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

PT_SHLIB
5

PT_PHDR
6

PT_LOPROC 0x70000000
PT_HIPROC 0x7fffffff
___________________________

.0/214=NN$=VL19AB19OP19C2<2GBST:CU:S@19D0M
<>/U19N OP19OL?19N$SyZWX=AB:19ST=N14:C2D019r0C219Dk.0/UGBST<cVIY14AB19<cST<c/21
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<cSTOP19OmM(NVSyGB14f
g2GBSAB=NJ
19Nw<>/2=C|<>/U14rAB14SyGB14f
gcz7<c/21v1957<cN$=
?VI<>19S=N$1vD019rC219DF<cM/2M
ABDFp_memsz
<c/214WI=AB:014n=C2DF<cMhcM
ABABM(Q<c/214S@19JIOP19C2p_filesz
<cSTGBC2G <>GB=ABGB19D{=N$19=2kT.0/214r0AB1
S@GB1vOP=VLC2M
<?14AB=NJ
19Nw<>/U=CR<c/214OP19OmM(NVLS@GB1IkTE0M
=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
CkaZ1914]VIC2=OPGB8)aZ198<>GBM
C2?19ABM
Q
PT_DYNAMIC
hcM
NwOmM(N1vGBC2hcM
N$Om=<>GBM
Ck
.0/214=NN$=VL19AB19OP19C2<2S@Y01&8GBr19S<>/U14ABM(8=<>GBM
CR=C2D{S@GB14M
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/219NGBC2hcM
N$Om=<>GBM
Ck
.0/21v=N$N=V19AB19Om1&CU<XSyY198;GBr019ST<c/214ABM
8;=<cGBM
CR=C2DFSyGB14M
h2=:5ZGBABGB=NVG C2hcM
N$OP=<cGBM
CkaZ191v\RM
<>1vaZ198e
PT_NOTE
<cGBM(C2? 19ABM(QhcM
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@GB1vM(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=Ok.0/2G STSy19J
Om1&CU<2<>VIY14OP=V
C2M
<2M(88;:NwOPM
N$14<c/2=C|M(C2814GBCR=nr0AB1IkM
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=OkT^`h2GB<2GBSTYN19S@19C2<czGB<2OP:Sy<XYN198;19D014=C2V
ABM
=D0=@?AB1vS@19JIOP19C2<219C2<cN$V kaZ191v~NM(JIN$=O^cC2<c19N$Y0N$19<>19No?19ABM(QhcM
Nwh`:N$<c/219NGBC2hcM
N$OP=<cGBM
Ck
<c/2N$M
:JI/
PT_LOPROC
=AB:01&PT_HIPROC
SGBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
PT_NULL


  


 
 



      
!
" # B" 7o%]')  " +*, *

2-3

ELF: Executable and Linkable Format

NOTE

Unless specifically required elsewhere, all program header segment types are optional. That is, a files
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=no$;$$$&zQR/2GB8/RGBST<>/U1ABM
QR19Sy<XWIGBN<>:0=A(=D0D0N$19SyST=S@S@M
8;GB=<c19DFQRGB<c/
<c/214OP19OmM(NVLGBOP=JI14M
h2<c/21vYN$M
J
N=OPSMo?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<Xr0AB19SU?=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@GB19z=CUDF<>/214A M(Q|1&Sy<XWXGBN<>:=A
=D0D0N$19SySTM
h2=nYNM(JIN$=OmSABM
=D0=@?AB1
S@19JIOP19C2<lkTi+S~NM(JIN$=OE0M(=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=OPSOP19OPM
N$VLGBOP=JI1IkT.0M8;M
OPY:0<>14<c/21w?=Sy1=D0D6N$19S@SyzM(CU1D61&<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@GB1Ik
]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+STaZ198<>GBM
C2SyGBC|~=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
p_memsz
p_filesz
/219=D019Nw19AB19OP19C2<lk

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(N9kE0=@? 1&A ST=YY01&=NX? 1&A M(Q<cM-/U19ABY195ZYAB=GBCRCUM(<c14GBC2h`M(NOP=<cGBM(C|M
N$JI=C2GB=<cGBM(C2zy?:<
<c/219VL=N$1vC2M(<UY=N$<2M
hU<>/21vS@Y198GBr8;=<cGBM
Ck
Figure 2-3: Note Information

2-4

__________
__________
namesz

descsz
__________
__________
type
name
. . .
__________
desc
. . .
__________


      
!
" # " &%(')  " -*, *


  


 
 


ELF: Executable and Linkable Format

namesz

=C2D

descsz

=C2D

type

. 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
namesz
19C2<cN$VISM(QR
CU19NM(NM
N$GBJIGBC2=<cM
name
N&kT.6/219N$14GBSTC2M-h`M(NOP=A(OP198/2=C2GBS@Odh`M(Nw=WIM
GBD0GBC2JCU=OP148;M
C20GB8;<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=GBC2ST2kT~ =D0D0GBC2JLGBSYN$19S@19C2<czGBh2CU198;19S@Sy=N$VIz<>M
namesz
19C2S@:0N$1 eu?VI<>1v=ABGBJ
CUOP19C2<2hcM
Nw<>/U14D019S@8N$GBY<cM(N9kTaZ:8/RY=D0D0GBC2JLGBSTC2M
<XGBC28AB:D019DFGBC
k

namesz
. 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=
desc
D019S@8N$GBY<cM
descsz
N$S8M(C2<c19C2<cSkT^`h2C2M
D019Sy8;NGBY<>M
NwGBSTYN19S@19C2<cz
8;M
C2<c=GBC2ST2kT~=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(N9k30=8/|M(NGBJ
GBCU=<>M
Nw8;M
C2<cN$M
ABSGB<cSM(Q|CR<cVIY19S@
OP:0AB<>GBYA 14GBC2<c1&NYN1&<c=<cGBM(CUSTM
h2=nSyGBC2JIAB14<cV
Y14WX=AB:14Om=V195ZGBS@<lk.0/2:0S@z=xYN$M
JIN$=OOP:Sy<2N$198M(JIC2GB1
?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=Ck

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

namesz
descsz
type
name
namesz
descsz
type
name
desc

NOTE

0

0t

0s

______________________
______________________

0
______________________

______________________
X Y Z 
______________________

C o \0
_______________________

_____________________
______________________

8
______________________

______________________
3

X Y Z 
______________________

C o \0
______________________

______________________

n
______________________

\RMLD019S@8N$GBY<cM
N

The system reserves note information with no name (namesz= =0) and with a zero-length name
(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

2-6

Note information is optional. The presence of note information does not affect a programs ABI conformance, provided the information does not affect the programs execution behavior. Otherwise, the program does not conform to the ABI and has undefined behavior.


      
!
" # " &%(')  " -*, *


  


 
 


Program Loading
i+ST<c/214SyV
Sy<>19Od8N$19=<c19STM
N =:0J
Om19C2<>S=nYNM(81&SySTGBOm=J
19zG <XABM
JIGB8;=ABABVL8;M
YGB19S=nrAB19STSy19J
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$=OPS1&5Z198;:0e
<cGBM(Cx?19/2=WXGBM(NzS@VIS@<c19OdABM
=D0z19<c8ZkTiYNM(819S@STD0M
19STCUM(<2N$19I: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;19Dk.0/219N19hcM
N$14D61&A =V
GBC2J
Y/2VIS@GB8=A(N$19=D0ShcN$19I: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(Sy1r0AB14M(hch`S@19<cST=C2DFWIG N$<c:=A
=D0D0N19S@S@19S=N$148M(CUJ
N:19C2<czOPM
D0:ABM<c/214Y=JI14S@GB1Ik
GBN<>:0=A(=D0D0N19S@S@19S=C2DFr0AB14M
hchcSy19<>ShcM
N <c/214aTaZ.030=N$8/2GB<>198<>:0N$14Sy19J
OP19CU<>S=N$148M(CUJ
N:19C2<2OPM
D0:ABM
j
f
gUM(NwAB=NJ
19NwYM
QR19NSM(hUt2kj0198;=:0S@1
jFG ST<>/U1Om=57GBOm:OdY=JI14S@GB19z<c/214rAB19STQ|GBABAo?14Sy:GB<c=@?AB14nhcM
N Y=JIe
n
GBC20x1000
JLN$19JI=N$D0A 1&SySTM
h2Y/2VIS@G 8;=A(Y=JI14S@GB1Ik
Figure 2-5: Executable File

KIGBAB14-hchcSy1&<

KIGBAB1

0
Program header table
0x100

0x2bf00

0x30d00

Figure 2-6: Program Header Segments

1&OL?19N

____________________
30E0KL/U19=D019N
____________________

____________________
-<>/219NTGBC2hcM
N$Om=<>GBM
C
____________________
.0195Z<2Sy1&JIOP19C2<

kkk

?VI<>19S
0x2be00
____________________

]=<c=nSy1&JIOP19C2<

kkk

?VI<>19S

0x4e00
____________________
-<>/219NTGBC2hcM
N$Om=<>GBM
C

kkk
____________________

.01957<

G N$<c:=A(i+D0D0N$19SyS

0x8048100
0x8073eff
0x8074f00
0x8079cff

]=<c=

______________________________________________

p_type
PT_LOAD
PT_LOAD
p_offset
0x100
0x2bf00

p_vaddr 0x8048100
0x8074f00
:C2SyY198;GBr019D
:CUS@Y198;G r19D
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=OPYAB19SrAB14M
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
14SyGB14=C2DFnr0 AB14S@VIS@<c19O?A M(8HSyGB19glk
.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
Ck


  


 
 



      
!
" # 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<2QR19N18M(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=JI1GBC|<>/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<XN19I:GBN19STS@Y198GB=A(/2=C2D0ABG C2Jh`M(Nw:C2GBC2GB<cGB=ABGB19DFD0=<c=zQR/2G 8;/R<c/214S@VIS@<c19OdD019rCU1&S<>M
?19JIGBCRQRGB<c/R19N$MWI=AB:019Sk.0/2:0STGBhU=nrAB19STA =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<>M19NM(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
19Q|/219<c/219N <c/214SyV
Sy<>19O1957Y0:C2JI19S
<c/219OGBST:CUS@Y198;G r19DkT.0/214OP19OmM(NVGBOm=J
14h`M(Nw<>/UGBSTYNM(JIN$=OhcM
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

____________________
$;$ 9

0x8048000
?VI<>19S

0x100
____________________

.0195Z<2Sy1&JIOP19C2<
0x8048100

kkk

?VI<>19S
0x2be00
____________________

+;c9

0x8073f00
?VI<>19S

0x100
____________________
____________________
$29

0x8074000

?VI<>19S

0xf00
____________________

0x8074f00 ]=<c=nSy1&JIOP19C2<

kkk

?VI<>19S

0x4e00
____________________
[+C2GBC2GB<cGB=ABGB19DFD0=<c=
0x8079d00
19N$M4? V
<c19S
____________________
0x1024
02 9

0x807ad24
19N$M4? V
<c19S
0x2dc
____________________

a1&JIOP19C2<
.0195Z<

]=<c=

-C214=S@Y198;<2M(hUS@19JIOP19C2<XA M(=D0GBCUJD0GBh`hc19N$SU? 19<>Q|191&C|1&5Z198;:0<>=@? AB1r0AB19ST=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<>/U1SyV
Sy<>19Od:0S@19ST<c/21
WX=AB:19S
p_vaddr
:C28/2=C2JI19D=STWIG N$<c:=A=D0D6N$19S@Sy19Sk

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<cSTWXGBN$<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/21SyV
Sy<>19Od8/2M(M
S@19STWXGBN<>:=A(=D0D0N19S@Sy19SThcM
N GBC2D0GBWXGBD0:=A(YNM(819S@S@19SyzG <XOP=GBC2<c=GBC2ST<c/214S@19JIOP19C2<cS@$$;c
;$c

kj0198;=:0S@14YM(SyGB<cGBM(C2e`GBC2D019Y19C2D019C2<28;M
D014:S@19STN19AB=<cGBWI14=D0D0N$19SyS@GBC2J4?19<cQR1919CRS@19JIOP19C2<cS@z<c/21D6GBhchc19N19C28;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 1S@/UM(Q|STYM(SyS@G ?A 1S@/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
0x0
~NM(819S@ST

0x80000200
0x8002a400 0x80000000
~NM(819S@STt

~NM(819S@STs 0x80081200 0x800ab400 0x80081000


0x900c0200 0x900ea400 0x900c0000
~NM(819S@S
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&ON1&<cN$G 1&WX19ST=xY=<>/|C2=OP14h`N$M
Od<c/2PT_INTERP
1
S@19JIOP19C2<2=C2DF8N$19=<c19ST<c/214GBC2GB<cGB=A(Yexec
NM(819S@SGBOP_=JI14hcN$M
Od<c/21
GBC2<c19N$YN19<>19NrA 1&SS@19JIOP19C2<cSkT.0/2=<2GBS@zG PT_INTERP
C2S@<c19=DFM(hU:S@GBCUJ<c/214M(NGBJIGBC2=A(1957198:<c=@?AB14rAB19SS@19J
Om19C2<XGBOm=J
19Syz<>/214SyV
Sye
<c1&O8M(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=Ok
.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=CUDZM
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(N9kTGB<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=WX1N$1981&G WI19DkT.0/21vGBC2<c1&NYN1&<c19NwGB<cS@19ABhUOP=VC2M(<UN$19I: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
iS@/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(OM(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@19I:19C2<cABVIz=nS@/U=N$19DFM&?
p>198;<2GBC2<c19N$YN19<>19Nw<>VIYGB8=ABABVLQRGBABA
C2M(<
8;mmap
M
C20GB8; <2Q|_GB<>/|<>/21vM(NGBJ
GBCU=A(1957198:<c=@?AB14r0AB19SM(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=@?AB1IkTM
C2S@19I: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
C20GB8;<cSk

Dynamic Linker
/219Cn? :GBABD0GBCUJ=CR195Z198;:0<>=@?A 1r0AB14<c/2=<X:0S@19SD0V
C2=OmGB8ABGBCUH
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=OmGB8ABG C2H
19Nw=S<>/21vYN$M
e
JIN$=OGBCU<>19NYN$19PT_INTERP
<c19N&k
The locations of the system provided dynamic linkers are processorspecific.
NOTE

fcj0i -aZgU=C2DF<c/214D0VIC2=OmGB8ABG C2H


19Nw8M(M
Y19N$=<c14<cM8;N$19=<c14<c/214YNM(819S@SGBOP=JI14hcM
Nw<>/U14YN$M
JIN$=OPz7QR/2GB8/
91Exec
C2<c=GBABST<c/214_ hcM
ABABM
QRGBC2JL=8;<cGBM(CUS}
i+D0D0GBC2JL<c/214195Z1&8:<c=@?AB14r0AB19STOm1&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=OdR19=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
CkTfc-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
Ck 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
Ck
.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$.plt
M
8;19D0:0N$14ABG C2H
=JI14<c=@?AB1IkTaSHT_PROGBITS
198;<cGBM(CUSU?19ABM
Q1957YA =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$=OGBOPYM
N$<cST<c/21w?=SyGB8SyV
Sy<>19OS@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
Ck
i+ST~NM(JIN$=OE0M
=D0GBC2JI195ZYAB=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/214r0AB19STYNM
J
N=Od/219=D019Nw<c=@?AB1IkT.0/21D0VIC2=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<>/U1Y0N$M
8;19S@S19C2WIGBNM(CUOP19C2<uS@191
fcj0i -aZgc28M(CU<>=GBCUST=vWX=N$GB=@? AB14C2=OP19D
QRGB<c/R=vC2M
C2ecCU:ABA
WX=AB:19z<c/214D0VIC2=OmGB8A 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=OkKIM(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/21D0VIC2=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=ABAB19DkaZ1914~NM(819D0:N14E0GBC2HI=J
1v.0=@?AB19GBC|<>/UGBSTY0=N$<2hcM
NwOPM
N$1
GBC2h`M(NOP=<cGBM(Ck

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


  


 
 



      
!
" "  B" 7o%]')  " +*, *

2-11

ELF: Executable and Linkable Format

Figure 2-9: Dynamic Structure

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

d_val;
d_ptr;

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$=OWIG N$<c:=A(=D0D0N19S@Sy19SkTi+STOP19C2<cGBM
C219DFYN1&WXGBM
:S@ABVIz
d_ptr
=nr0AB19SElf32_Addr
WIGBN<c:=A(=D0D0N19S@S@19SOPGBJI/2<2C2M(<2OP=<c8;/|<>/214Om19OPM(NVLWIGBN<>:0=A(=D0D0N$19SyS@19SD0:N$G C2J195Z198;:<cGBM
Ck
/219CRGBCU<>19NYN$19<cGBC2JL=D0D0N$19SyS@19ST8M(C2<c=GBC219DFGBC|<>/214D0VIC2=OmGB8S@<cN:8;<c:N19z<>/214D0VIC2=OPG 8ABGBC2HI19N 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;VIzrAB19STD0MI;28;M
C2<c=GBCRN19ABM
8;=<cGBM(C|19C2<>NGB19S<>M8;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$GB19S<>/214<c=JN19I: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=OmGB8ABG 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@19zM
Y<>GBM
C2=ABOP19=CUST=C|19C2<cN$VLhcM
Nw<>/U14<>=JLOm=VL=YY19=NX?:<2GBSC2M
<2N$19I:GBN19Dk
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
DT_HASH

4 d_ptr

OP=C2D6=<>M
N$V
OP=CUD0=<>M
N$V
DT_STRTAB
5 d_ptr
P
O

=
2
C
6
D

=
>
<

M
$
N
V

OP=CUD0=<>M
N$V
DT_SYMTAB
6 d_ptr

OP=C2D6=<>M
N$V
M(Y<cGBM
C2=A
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

OP=C2D6=<>M
N$V
OP=CUD0=<>M
N$V
DT_STRSZ
10 d_val
P
O

=
2
C
6
D

=
>
<

M
$
N
V

OP=CUD0=<>M
N$V
DT_SYMENT
11 d_val

M
Y<>GBM
C2=A
M(Y<cGBM
C2=A
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
DT_SONAME

14 d_val

M
Y<>GBM
C2=A
GBJIC2M
N$19D
DT_RPATH
15 d_val
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
_______________________________________________________________________

OP=C2D6=<>M
N$V
M(Y<cGBM
C2=A
DT_REL
17 d_ptr
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

_______________________________________________________________________

DT_NULL
DT_NEEDED

DT_PLTRELSZ

DT_PLTGOT
DT_HASH
DT_STRTAB
DT_SYMTAB
DT_RELA

DT_RELASZ

i+CR19C2<cN$VLQ|GB<>/|=
<c=JLOP=N$HIS<>/21v1&CUDFM
h2<c/21
=NN$=V k
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
=nCU191&D61&D{ABG ?N=N$V kT.0/214M
hchcSy19<XGBS=CRGBCUD0195xGBCU<>M<c/214<>=@? AB14N$198M(ND019DFGBCR<c/21
19C2<cN$V kaZ1914aZ/2=N19DF?
pq198<X+19Y19C2D019C28;G 1&SyhcM(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 119CU<>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(SyGB19zGBCn?VI<c1&SyzM
h2<>/U14N$19ABM
8;=<cGBM(C|19C2<>NGB19ST=SyS@M
8;GB=<c19DFQRGB<c/R<c/21
YNM(81&D6:N$1vABGBC2HI=JI14<c=@?AB1IkT^`h2=C|19C2<cN$VLM
hU<>VIY1
GBSTY0N$19S@19C2<cz=
DT_JMPREL
DT_PLTRELSZ
OP:0S@<X=88;M
OPY=C2VGB<lk
.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
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<>=@? AB19zD019Sy8;NG ?19DFGBCRR=Sy/R.0=@?A 1
k
.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
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/
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
<c=@?AB1/U=WI1195ZYABGB8GB<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<>/U1D6V
C2=OmGB8S@<cN:8;<c:N1Om:S@<
=ABS@M-/U=WI1
=C2D
19AB19OP19C2<cSkT/219C|N$19ABM
8;=<cGBM
C|GBSOP=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(<2N19I:GBN19D0glk
DT_RELA
DT_REL
.0/2G ST19AB19OP19C2<2/2M
ABD0ST<c/214<cM(<c=A(S@GB19zGBCx?V
<c19S@zM
h2<c/21
N1&ABM
8;=<cGBM
C|<c=@?AB1Ik


  


 
 


DT_RELA


      
!
" # B" 7o%]')  " +*, *

2-13

ELF: Executable and Linkable Format

.0/2G ST19AB19OP19C2<2/2M(A D0ST<>/U1SyGB19zGBCn?VI<>19SyzM(h2<c/21


N1&ABM
8;=<cGBM
C19C2<cN$V k
DT_RELA
.0/2G ST19AB19OP19C2<2/2M
ABD0ST<c/214S@GB19zGBCn? V
<c19S@zM
h2<c/214S@<cN$GBCUJ<c=@?AB1Ik
DT_STRSZ
.0/2G ST19AB19OP19C2<2/2M
ABD0ST<c/214S@GB19zGBCn? 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<>/U1GBC2G <>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
Qk
.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
Qk
.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 kaZ1914aZ/2=N19DF?
pq198<2]19Y19C2D019C28GB19S@?19ABM
Qh`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@19DFGBCRa/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<cSTYN1&Sy19C28;14GBCR=nSy/2=N$19DFM&?
p>198;<XA G ?N$=NVL=AB<>19NST<c/214D0V
C2=OmGB8ABGBCUH
19NSS@VIO?M
A
DT_SYMBOLIC
N1&SyM(AB:0<>GBM
C|=ABJ
M
NGB<>/2Oh`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
Elf32_Rel
OP
:0S@<X=ABS@M-/U=WI1
=C2D
19AB19OP19C2<cSk
DT_RELSZ
DT_RELENT
.0/2G ST19AB19OP19C2<2/2M
ABD0ST<c/214<cM(<c=A(S@GB19zGBCx?V
<c19S@zM
h2<c/21
N1&ABM
8;=<cGBM
C|<c=@?AB1Ik
DT_RELSZ
DT_REL
.0/2G ST19AB19OP19C2<2/2M(A D0ST<>/U1SyGB19zGBCn?VI<>19SyzM(h2<c/21
N1&ABM
8;=<cGBM
C19C2<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_REL
Sy14<>/214Sy=OPDT_RELA
14N$19ABM
8;=<cGBM
Ck
.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@19C281SyGBJIC2GBr19S<>/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<XN19I:19S@<
OPM
D0GBr08;=<cGBM(C2S<cM-=nCUM(C2e`QRNGB<>=@? AB14S@19J
Om19C2<>z7=C2DF<c/214D0V
CU=OPGB8A GBC2H
19Nw8;=C|YN$19Y=N14=8;8;M
ND0e
GBC2JIABV k
^`h2YN19S@19C2<cz<>/UGBST19C2<cN$G 1&SyS
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=@?AB1IkaZ19Y=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=@?AB19DkT^`h
<c/2GBS19C2<>NVLGBSYN$19Sy1&CU<>z7<>/21vN$19AB=<c19DF19C2<cN$GB19SM
h2<cVIY19S
=C2D
OP:0S@<
DT_PLTRELSZ
DT_PLTREL
=ABS@M?14Y0N$19S@19C2<lk
<c/2N$M
:JI/
DT_LOPROC
=AB:0DT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J
14=N1N19S@19N$WX19Dh`M(NwYN$M
8;19S@SyM(NecSyY198;GBr08S@19OP=CU<>GB8Sk
DT_RELAENT

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
19Dk

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<>/219OGBC2<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=OmGB8ABGBC2HI19N Om:S@<2=<><c=8;/|<>/214YNM
Y19N
S@/U=N$19DFM&?
p>198;<2rAB19S<>M<c/214YNM(819S@SGBOP=JI14hcM
N 195Z198;:<cGBM
Ck.0/2:0ST1957198:<c=@?AB14=C2DFS@/2=N19DFMo?Ipq198;<2rAB19STD019Sy8;NG ?1
<c/219GBN S@Y198;G r8D019Y19C2D019C28GB19Sk
/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=OmGB8Sy<>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$=OmSS@19NWIGB819SkTj0VLN1&Y01&=<c19D0ABVL8;M
C2C2198;<cGBC2JLN$19h`19N$19C281&D{S@/2=N19DFMo?Ipq198;<cST=CUDF<>/U1&G N D019Y19C2D019C28GB19S@z<c/21
D0VIC2=OPGB8A GBC2H
19NX?:GBABD0S=v8M(OmYAB19<>14YNM(819S@STGBOm=J
1IkT/219CRN$19SyM(ABWXGBC2JLS@VIO?M
ABGB8N19hc19N$19C2819S@z<>/U1D0VIC2=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$=OGB<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
CkaZ/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$19I:G N$19Dk

NOTE

Even when a shared object is referenced multiple times in the dependency list, the dynamic linker will
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<>/U1M&?
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$VM
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(CU1M
N OmM(N14S@AB=Sy/Rf g28;/U=N$=8<>19NST=C2V
Q|/219N$14GBCR<c/21CU=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/
/usr/lib/lib2
directory/file
C2=OP1IkT^`hX<c/214C2=OP14/2=STC2M-S@AB=Sy/219S@zS@:08;/R=S
=@?M
WI19z<c/2N$1914hc=8GBABGB<>G 1&SS@Y198;GBh`VS@/U=N$19DFMo?Ipq198;<2Y=<>/RSy19=N$8/2e
lib1
GBC2JIzQRGB<c/R<c/214hcM
ABABM(Q|GBC2JLYN$19819D019C28;1Ik
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<>/U1D0VIC2=OmGB8
/home/dir/lib:/home/dir2/lib:
ABGBC2HI19Nw<cMSy19:=N$8;/|r0N$Sy<2<c/21vD0GBN$198<>M
N$V
z<c/219C
z=C2D{<>/219C|<>/U148;:NN$19C2<
/home/dir2/lib
D0GBN198;<cM(NVL<>MLrC2D{D019Y19C2D019C28GB19Sk /home/dir/lib
a1&8M(CUD0z=nWX=N$GB=@? AB18=ABAB19D
GBCR<c/214YN$M
8;19SyST19C2WIGBNM
C2OP19C2<uS@191
fcj0i -aZgcUOP=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+?1419I: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
LD_LIBRARY_PATH
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
OmGB8;M
ABM
CRD0GBhch`19N$19C2<cABV
z7<>/214D0VIC2=OmGB8
ABGBC2HI19NwD0M
19SC2M(<lkT\R19WI19N<>/219AB19SyS@z<c/214D0V
CU=OPGB8A GBC2H
19Nw=8;819Y<>S<>/U1Sy19OPGB8M(ABM
CRC2M
<>=<cGBM
C2zQRGB<c/R<c/21

  


 
 



      
!
" # B" 7o%]')  " +*, *

2-15

ELF: Executable and Linkable Format

S@19Om=C2<>GB8SD019Sy8;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

NOTE

For security, the dynamic linker ignores environmental search specifications (such as
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(D618=C2C2M
<>zGBCRJI19C219N$=A z8M(CU<>=GBCR=@? S@M
AB:<c1WXGBN$<c:=A(=D0D6N$19S@Sy19SkTxABM&?=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
YM
S@GB<cGBM(CUecGBC2D019Y19C2D61&CU8;14=C2D{S@/2=N=@?GBABGB<cVLM(hU=nYNM(JIN=OPST<c1957<lkTiYNM(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=SN19I:GBN$19D-?VLGB<cSTN19ABM(8=<>GBM
CR19C2<cNGB19SnS@191419ABM
8;=<cGBM
C2GBC
~=N<2lki+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=OPGB8A 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=OPGB8ABG 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<>/219N19GBCk
^`h2=nYNM(JIN$=ON$19I: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 kj0198;=: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(ABST=D0D0N19S@STOm=V=YY19=NwGBCRS@19WI19N=A(<>=@? AB19SkT.0/214D0VIC2=OPGB8)ABGBC2HI19N YNM(81&SyS@19S=ABA(<>/U1JIABM&?=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
Ck
.0/21v<>=@?A 1&S19C2<>NVL19N$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=OmGB8ABGBCUH
19Nz<>MrC2D{GB<>SM(Q|CRD0VIC2=OPGB8)S@<cN$:8<>:0N$1
QRGB<c/2_DYNAMIC
M
:<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 GB14GB<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$WX19Dk~0N$M
8;19D0:0N$1
E0GBC2HI=JI1.6=@?AB19;? 1&ABM
QD019Sy8;NG ?19ST<c/219Ok
.0/214SyV
Sy<>19OOP=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$=OPSyGB<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=Ok
\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/219DkTi+SABM(C2J
=ST=nY0N$M
8;19S@S1957GBSy<>SyzGB<cSTOP19OPM
NVSy1&JIOP19C2<cSTN19S@GBD014=<2r05719DFWXGBN$<c:=A(=D0D6N$19S@Sy19Sk
iJIABMo? =A(M
hchcSy19<2<>=@? AB19ShcM
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/
.got
C219JI=<>GBWX14=C2DF_GLOBAL_OFFSET_TABLE_
C2M
C2e`C219J
=<cGBWI14S@:?S@8N$GBY0<>SyGBCU<>M<>/U14=N$N=VM
h2=D0D0N19S@Sy19Sk

Procedure Linkage Table


:8;/R=S<>/U1JIABM&?=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(OM(CU1195Z198;:0<>=@?A 1M
NwS@/2=N19DFMo?Ipq198;<2<>M
=C2M
<>/U1&N9kM
C2S@19I: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/214aTaZ.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=@?AB19STOP19OmM(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$=OmS)<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
...

NOTE

As the figures show, the procedure linkage table instructions use different operand addressing modes
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=O8M(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
Q1&5ZYAB=GBC|OPM
N$14=@?M
:<2<c/219S@1
WX=AB:19Sk
tkR^`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
k30=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<Xr0AB1IkTM(CUe
S@19I: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
sk|KIM
N GBABAB:0S@<cN$=<cGBM(CUz=S@S@:0OP14<>/U1Y0N$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
pushl
k
name1
kRM
C2S@19I:019C2<>ABVIz<c/214YNM(JIN$=OY: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<>=@? AB119CU<>NV:Sy19DFGBCR<c/214YN$19WXGBM(:0S
GBR_386_JMP_SLOT
C2Sy<>N:8;<cGBM
CkT.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 S8=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$VGBCR<c/21vYN$M
e
8;19D0:0N$14ABG C2H
=JI14<c=@?AB1IkT.0/21
GBC2Sy<>N:8;<cGBM
CRYAB=81&S<>/U14WI=AB:14M
.PLT0
h2<c/214S@198M(C2D{J
ABM&?=A(M
hchcSy19<X<c=@?AB1419C2<cN$V
fu2; 
M
N
g2M
pushl
CR<c/214S@<c=8;HIz<c/2:SJ
GBWXGBC2JL<>/U14D0V
C2=OmGB8ABG C2H
19NwM(CU14QRM
N$DFM
h2GBD019CU<>GBhcVIGBC2J
_
_
4(%ebx)
GBC2h`M(NOP=<cGBM(Ck.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

2-18


      
!
" # " &%(')  " -*, *


  


 
 


ELF: Executable and Linkable Format

fu2; 
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
ABSTWX=AB:19zSy<>M
N$19S<c/214N$19=AB=D0D0N19S@ShcM(N
GBC|GB<>SJ
A Mo?=A
M(h`hcS@19<2<c=@?AB1419C2<cN$VIz
name1
=C2D{<>N=C2S@h`19N$S8;M
C2<cN$M
A(<cM<>/U14D019S@GBN19DFD019Sy<>GBC2=<cGBM
Ck
kRaZ:Z? S@19I: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
.PLT1
zGBCUS@<c19=DFM
h2hc=ABABG C2JL<>/UN$M
:JI/2<>M<c/21
GBC2Sy<>jmp
N:8;<cGBM
Ck
name1

pushl

.0/21
19C2WXGBN$M
C2OP19C2<2WI=NGB=@?AB148;=CR8;/U=C2J
14D0VIC2=OPGB8ABG C2H
GBCUJ?19/2=WXGBM
N&kT^`hXG <>STWI=A :1GBSTC2M
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=Ok
.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(Ck-<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

NOTE

Lazy binding generally improves overall application performance, because unused symbols do not incur
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$<cSSyV
OL?M
A<c=@?AB14=8;8;19SySkE0=@? 19ABST=YY19=NX?19ABM
Q<cM/219ABY195ZYAB=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
Ck
Figure 2-14: Symbol Hash Table

________________________

nbucket
________________________

nchain
________________________

bucket[0]

. . .
bucket[nbucket - 1]
________________________
chain[0]

. . .

________________________
chain[nchain - 1]

.0/21
=NN$=V8;M
C2<>=GBCUS
19C2<cN$GB19Syz=C2DF<c/21
=NN$=V8;M
C2<>=GBCUS
19C2<cN$GB19SyGBC2D0195Z19S
S@<c=N$<Ubucket
=<22kj0M(<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(:0ABDF19I:=A
S@MS@VIO?M
A(<c=@?AB14GBC2D0195Z1&S=ABS@MS@19AB198;<
8;/U=GBCR<>=@? AB119CU<>NGB19SkTi/2=S@/2G C2Jhc:0C28;<cGBM
Cf`S@/2M
QRCn?19ABM
QRg2=nchain
88;19Y<cST=vSyV
OL?M
ACU=OP1=CUDN19<>:0N$C2ST=nWX=AB:14<>/2=<
OP=V4?14:Sy19DF<>M8;M
OPY:0<>14=
GBC2D0195kTM
C2S@19I:019C2<>ABVIzGBh2<c/214/2=S@/2GBCUJhc:0C28;<cGBM
CRN$19<c:N$CUST<>/U1WX=AB:14nhcM
N
S@M
OP14C2=OP19z
bucket JIGBWI19ST=CRGBC2D61&5Zz2zGBC2<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

chain

19C2<cN$VL8;M
C2<c=GBC2ST<c/214WX=AB:1

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?=Sy1YNM(819S@SU? 1&JIGBC2STG <>ST<c19N$OmGBC2=<>G M(CRS@19I:019C28;1IkT-C28;14=JI=GBC2z<c/214M(ND019atexit
NwGBCRQR/UGB8;/R<c_/21
D0VIC2=OPGB8ABGBCUH
19N 8=ABABST<>19NOPGBC2=<cGBM
Ch`:C28<>GBM
C2STGBST:CUS@Y198;G r19Dk
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<>/U1D6V
C2=OmGB8S@<cN:8;<c:N19zD61&Sy8;NG ?19DFGBCR]VIC2=OPG 8aZ198<>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(CU19DFGBCRaZ198<>GBM
C2SyM
h2~0=N$<22k
.init

NOTE

2-20

.fini

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


      
!
" # " &%(')  " -*, *


  


 
 


C LIBRARY

C Library

3-1
3-2

Global Data Symbols


  


 
 



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

C Library
.0/21vABG ?N=N$VIz
z8;M
C2<c=GBC2ST=ABA(M
h2<>/U1SyV
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<cGBbC2s19ySshcN$M
O<>/21vi]\Ra^USy<>=C2D0=NDk
Figure 3-1: libc Contents, Names without Synonyms

abort
abs
asctime
atof
atoi
atol
bsearch
clearerr
clock
ctime
difftime
div
fclose
feof
ferror
fflush
fgetc
fgetpos
fgets
fopen
fprintf

i+D0D0GB<cGBM(CU=ABABV
z

libc

fputc
fputs
fread
freopen
frexp
fscanf
fseek
fsetpos
ftell
fwrite
getc
getchar
getenv
gets
gmtime
isalnum
isalpha
iscntrl
isdigit
isgraph
islower

isprint
ispunct
isspace
isupper
isxdigit
labs
ldexp
ldiv
localtime
longjmp
mblen
mbstowcs
mbtowc
memchr
memcmp
memcpy
memmove
memset
mktime
perror
printf

putc
putchar
puts
qsort
raise
rand
rewind
scanf
setbuf
setjmp
setvbuf
sprintf
srand
sscanf
strcat
strchr
strcmp
strcpy
strcspn
strlen
strncat

strncmp
strncpy
strpbrk
strrchr
strspn
strstr
strtod
strtok
strtol
strtoul
tmpfile
tmpnam
tolower
toupper
ungetc
vfprintf
vprintf
vsprintf
wcstombs
wctomb

/2M
ABD0ST<c/21h`M(ABABM
QRG C2JS@19NWIGB819Sk

Figure 3-2: libc Contents, Names with Synonyms

_ _assert
cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed
ctermid
cuserid
dup2
fdopen
_ _filbuf
fileno
_ _flsbuf
fmtmsg

getdate
getopt
getpass
getsubopt
getw
hcreate
hdestroy
hsearch
isascii
isatty
isnan
isnand
lfind

lockf
lsearch
memccpy
mkfifo
mktemp
monitor
nftw
nl_langinfo
pclose
popen
putenv
putw
setlabel

sleep
strdup
swab
tcdrain
tcflow
tcflush
tcgetattr
tcgetpgrp
tcgetsid
tcsendbreak
tcsetattr
tcsetpgrp
tdelete

tell
tempnam
tfind
toascii
_tolower
tsearch
_toupper
twalk
tzset
_xftw

KI:C28<>GBM
CRGBS=<XE019WX19A(tnGBCR<c/214aZ4^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|<>/214GB<c/RaV
C2M
C2VIOPST<c=@?AB14=@? M(WX19zS@VIC2M(CUV
OPSM(hU<>/214h`M(NO
I 1957G 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
C2<c=GBC2SU? M(<c/
libc
=C2D
zh`M(Nw195Z=OPYAB1Ik
getopt
_getopt
-h2<c/214N$M
:<cGBC219SABGBS@<c19DF=@?M
WX1&z7<>/21vhcM(A ABM(Q|GBC2JL=N$14CUM(<2D019rCU19DF19ABS@19QR/U19N$1Ik
.0/2G SThc:0C28;<cGBM
CRN$19<c:NC2ST<c/214C2195Z<2GBC2Y:<28;/U=N$=8;<c19NwhcM(N zr0ABABGBC2JLGB<cSU?:0hchc19Nw=S=YYN$M
YN$GB=<c1Ik^c<
f
N1&<c:NC2S
GBhU=CR19NN$M
N M
8;8:NSk

int _ _filbuf(FILE *f);


EOF

.0/2G SThc:CU8;<cGBM(CR0: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:01M
h <cM<>/U14N1&Sy:AB<cGBC2JLM
:<cY:<2Syf<>N19=Opku^ct<UcN$19(<cx:,N$fCU)S
GBhU=CR19N$NM(NwM
8;8;:0N$S=C2D
x
EOF
M
<>/219NQRGBSy1Ik

int _ _flsbuf(int x, FILE *f);

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=N18M(Ome
YGBAB19Dk.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
ftw
_
_xftw()

r0N$S@<2=N$JI:OP19CU<>zQR/UGB8;/ROP:0S@<2/2=WI14<c/21WX=AB:14t2k

a1&1v<>/2G ST8/2=Y<c1&NSTM
<c/219NwABG ?N=N$VLS@198<>GBM
C2ShcM
NwOPM
N$14a^`]zi+\Ra^Uz=C2D{~-aZ^`_bhc=8GBABGB<cGB19SkaZ191vaV
Sy<>19O]=<c=
^`C2<>19Nhc=81&SyAB=<c19N G CR<c/2GBS8;/2=Y0<>19NwhcM
NwOPM
N$1vGBC2hcM
N$OP=<cGBM
Ck

Global Data Symbols


.0/21
ABG ?N=N$VLN19I: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(Yl19iNbABVcki+ABA(<c/214D0=<c=nSyV
O? M(ABSN19I:GBN$19D{hcM
N <c/21
ABG ?N=N$VLOP:0S@<?14YNM(WXGBD019D+?V
z=STQR19ABA(=ST<c/21
libsys
libc
D0=<c=nS@VIO?M
ABSTABGBSy<>19DFGBCR<c/214<c=@?AB1w?19ABM
Qk
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/214I` m
c$ ;;l
+ Ic;I $x0c;mM
Nw<>/U14]=<c=n+19rC2G <>GBM
C2S@0S@198<>GBM
CRM
h2/2=Y0<>19NwnGBC|<>/21v=YYN$M
YN$G =<>14YNM(819S@SyM(NwS@:0Ye
YAB19OP19C2<U<>M <c/214I` LL0 k
KIM(Nw19C2<cN$GB19SGBC|<>/21vhcM
ABABM(Q|GBC2JL<c=@?AB14<c/2=<2=N$1vGBCRI e I hcM
N$Omz@?M
<>/|S@VIO?M
ABSTGBC|19=8;/RY=G N N19YN$19S@19CU<X<c/21
_
S@=Om1D0=<c=2kT.0/214:0C2D019N$Sy8;M
N$14SyV
C2M
C2VIOPS=N$14Y0N$M
WIGBD019D{
<>MS@=<cGBSyhcVL<>/21vi]\|aZ^USy<>=C2D0=NDk
Figure 3-3: libc Contents, Global External Data Symbols

getdate_err
_getdate_err
_ _iob

3-2


  


 
 


optarg
opterr
optind
optopt


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

Index

Index


  


 
 


I-1


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

Index
tST8;M
OPYAB19OP19C2<

1: 6

i+j0^U8;M
C2hcM
N$Om=C28;1

1: 11, 2: 3, 6, 12, 14

abort 3: 1
abs 3: 1

=@?SyM(AB:0<>148;M
D01
=@?SyM(AB:0<>1SyV
OL?M
AB2:S 9
1: 8
=D0D0N19S@S@zWIG N$<c:=A
=ABGBJIC2OP19C2<
1957198:<c=@?AB1vrAB1
S@198<>GBM
C
1: 10
i+\RaZ^
3: 2
=N8;/2GBWX14rAB1

addseverity

2: 7
3: 1

2: 7

1: 18, 2: 15
3: 1
=S@Sy19O?AB19N
1: 1
S@VIO? M(AC2=Om
19S
1: 17
_ _assert 3: 1
fcj0i -aZg
atexit
_
2: 20
atof 3: 1
atoi 3: 1
atol 3: 1

asctime

?=Sy1=D0D0N$19SyS
D019rCUGB<>GBM
C
? bsVIe<>1naM
rNcD0h19N


1: 22, 2: 9, 12
2: 4
3: 1
1: 6

AB=CUJ
:0=J
1
=S@Sy19O?ABV-C2=Om19S
ABG ?N=N$VfcS@191vABG ?N=N$VI1:
g 17
ABG ?N=N$V
3: 1

cfgetispeed
cfgetospeed
cfsetispeed
cfsetospeed
clearerr 3: 1
clock 3: 1

3: 1
3: 1
3: 1
3: 1

8;M
OPOmM(CSyV
OL?M
ABS
8;M
N$1nrAB1

ctermid

1: 8

1: 3
3: 1


  


 
 


ctime 3: 1
cuserid 3: 1

D0=<c=z:0C2GBC2GB<cGB=ABGB19D
D0=<c=]N$19YN1&Sy19C2<c=<>GBM
C
difftime
div 3: 1
dup2 3: 1
_DYNAMIC

2: 8
1: 2, 6

3: 1

@S 1914=ABS@MD0V
2:CU=11OPGB8ABGBCUH
GBC2J
D0VIC2=OPGB8)ABG ?N=N$VLfcS@1914S@/U=N$19DFM&2:?
11
pq198<Xr0AB19g
D0VIC2=OPGB8)ABGBC2HI19N
S@1914=ABS@MD0V
CU=OPGB1:8AB1,GBCU2:
H
GBC21011
J
2: 10
S@191v=ABS@MABGBC2HL19D0GB<cM(N
2: 10
S@1914=ABSyM-Sy/2=N$19DFM&?
p>198;<2rAB1
2: 10
D0VIC2=OPGB8ABGBCUH
GBC2J
2: 10
?=Sy1=D0D0N$19SyS
2: 4
2: 11
19C2WXGBN$M
C2OP19C2<
/2=Sy/Lh`:C28<>GBM
C 2: 11, 15, 19
GBC2GB<cGB=ABGB=<cGBM
Ch`:C22:8<>19
GBM
C
2: 14, 20
AB=V? GBC2D0GBC2J
2: 11, 19
LD_BIND_NOW 2: 11, 19
LD_LIBRARY_PATH 2: 15
N1&ABM
8;=<cGBM
C
S@1914=ABSyM-D0VIC22:
=OP13,GB8)16,
ABGBC2HI1819N
2: 10
S@1914=ABS@M/2=S@/R<c=@?AB1
2: 13

_DYNAMIC

S@1914=A S@MYN$M
8;19D0:0N$14ABG C2H
=JI14<c=@?AB1
S@<cN$G C2JL<c=@?AB1
S@VIO? M(A
N$19SyM(AB:02:<>GB13
M
C
2: 15
S@VIO? M(A(<c=@?AB1
1: 10, 14, 2: 13
<c1&NOPGBCU=<>GBM
CRh`:C28<>GBM
C
2: 14, 20
D0VIC2=OPGB8S@19JIOP19C2<cS

2: 13

2: 9

30E0K
19C2<cN$VLY1:M
1GBC2<2f`S@1914YNM(819S@S@z719C2<cN$VLYM
GBC2<cg
19C2WXGBN$M
C2OP19C2<
fcj0i -aZg 2: 11, 15, 19
exec
1: 1, 2: 1011, 15
Y=JIGBC2J _
2: 7
1957198:<c=@?AB1vrAB1
1: 1
S@19JIOP19C2<cS
2: 9

exit

2: 20


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

I-1

ELF: Executable and Linkable Format

gmtime

fclose 3: 1
fdopen 3: 1
feof 3: 1
ferror 3: 1
fflush 3: 1
fgetc 3: 1
fgetpos 3: 1
fgets 3: 1
_ _filbuf 3: 12

/2=Sy/Lh`:C28<>GBM
C
/2=Sy/<c=@?AB1
hcreate
hdestroy
hsearch

r0AB1&zM&?
p>198;<2fcS@1914M&?
pq198<Xr0AB19g
r0AB14M
hchcSy1&<

GBC2<c19N$YN19<>19NzZS@191nYN$M
JIN$=OGBCU<>19NYN$19<c1&N

3: 12

hcM
N$Om=<>SyzM&?
pq198<2rAB1
KI+T.0Ti+\

1: 1

G
jmp

getc 3: 1
getchar 3: 1
getdate 3: 1
_getdate_err 3: 2
getdate_err 3: 2
getenv 3: 1
getopt 3: 1
_getopt 3: 2
getopt 3: 2
getpass 3: 1
gets 3: 1
getsubopt 3: 1
getw 3: 1

I-2

2: 10

_ _iob 3: 2
isalnum 3: 1
isalpha 3: 1
isascii 3: 1
isatty 3: 1
iscntrl 3: 1
isdigit 3: 1
isgraph 3: 1
islower 3: 1
isnan 3: 1
isnand 3: 1
isprint 3: 1
ispunct 3: 1
isspace 3: 1
isupper 3: 1
isxdigit 3: 1

1: 8
fprintf 3: 1
fputc 3: 1
fputs 3: 1
fread 3: 1
freopen 3: 1
frexp 3: 1
fscanf 3: 1
fseek 3: 1
fsetpos 3: 1
ftell 3: 1
fcj0i E0^`j0g
ftw
_
3: 2
fwrite 3: 1

JIABMo? = A(D0=<>=nSyV
OL?M
ABS
JIABMo? = A(M(h`hcS@19<2<c=@?AB1

2: 19
1: 12, 14, 2: 11, 13, 19
3: 1
3: 1
3: 1

2: 7

fileno 3: 1
_ _flsbuf
fmtmsg 3: 1
fopen 3: 1

3: 1

GBC2Sy<>N:8;<cGBM
C

2: 1718

L
AB=V? GBC23:D01GBC2J

labs

2: 11, 19

LD_BIND_NOW 2: 11, 19
ldexp 3: 1
ldiv 3: 1
LD_LIBRARY_PATH 2: 15
fca +g2f`S@1914ABGBC2HL19D0GB<cM(Ng
ld
_
lfind 3: 1
libc 3: 0, 2

3: 2
1: 14, 2324, 2: 11, 16

S@191v=ABS@MABG ?N=N$V
8;M
C2<c19C2<>S

libc


      
!
" # " &%(')  " -*, *

3: 0
3: 12


  


 
 


ELF: Executable and Linkable Format

ABG ?N=N$V
D0VIC2=OPGB8f`S@1914S@/2=N19DM&?
p>198;<Xr0AB19g
S@1914=ABS@M
0
S@/U=N$19DFfcSyl19i1bSyc/2=N$3:19DF
M&?
pq198<Xr0AB19g
ABGBC2H19D0GB<cM
N3: 12
S@1914=ABSyM-D0VIC21:=1,OP1819,
GB8)ABGBC2HI23,
19N

libsys

2: 11, 13, 1516


2: 10

localtime 3: 1
lockf 3: 1
longjmp 3: 1
lsearch 3: 1

OP=JIGB8C2:O? 19N

1: 45

main 1: 14
mblen 3: 1
mbstowcs 3: 1
mbtowc 3: 1
memccpy 3: 1
memchr 3: 1
memcmp 3: 1
memcpy 3: 1
memmove 3: 1
memset 3: 1
mkfifo 3: 1
mktemp 3: 1
mktime 3: 1
f 3 -aZg
mmap _
2: 10
monitor 3: 1

optarg
opterr
optind

1: 4
3: 2
3: 2
3: 2

Y=JI14S@GB1
2: 7
Y=JIGBC2J
2: 7
Y19N$h`M(NOP=C281

2: 7

Y19N$h`M(NOP=C2819zY0=J
GBC2J

N
nftw 3: 1
nl_langinfo

YNM(JIN$=OABM
=D0GBC2J
2: 2
N1&ABM
8;=<cGBM
C
1: 12, 21, 2: 13
S@198<>GBM
C
8
S@198<>GBM
CR=AB1:GBJI1,
C2OP
19C2<
S@198<>GBM
C|=<><cN$G ?:<c19S 1: 10
1: 12
S@198<>GBM
CR/U19=D019N
1: 2, 8
S@198<>GBM
CC2=Om19S
1: 15
S@198<>GBM
CR<cVIY19S
1: 10
S@1914=ABSyM-=N8;/2GBWX14rAB1
S@1914=ABS@MD0V
CU=OPGB8ABGBCUH
GB1:C2J1
2: 10
S@1914=ABSyM-195Z198;:0<>=@?A 14rAB1
1: 1
S@1914=A S@MN$19ABM
8;=<c=@?AB1vrAB1
S@1914=ABSyM-Sy/2=N$19DFM&?
p>198;<2rAB1 1: 1
1: 1
S@19JIOP19C2<
2: 12, 7
S@/U=N$19DFM&?
pq198<2rAB1
2: 10
S@Y198GB=AZSy198;<cGBM(CUS
1: 13
S@<cN$G C2JL<c=@?AB1
S@VIO? M(A(<c=@?AB1 1: 12, 1617
1: 12, 17
<cV
Y1
1: 3
WX1&NS@GBM
C

pclose

3: 1

perror
popen

3: 1
3: 1

2: 7

YM
S@GB<cGBM(CUecGBC2D019Y19C2D61&CU<X8;M
D01
~-aZ^`_

3: 1

YNM(81&D6:N$1vABGBC2HI=JI14<c=@?AB1

printf

2: 9, 11

3: 2
3: 1

1: 15, 19, 2324, 2: 11,

YNM(81&SyS
19C2<cN$VY0M(GBC2<
1: 4, 14, 2: 20
GBOP=JI1
1: 1, 2: 12
WXGBN$<c:=A(=D0D0N$19SyS@GBC2J
2: 2
YNM(81&SyS@M
N$e`S@Y198;G r8
2: 10
YNM(81&SyS@M
N$e`S@Y198;G r8)GBC2hcM
N$Om=<>GBM
C
1314, 17

M&?
pq198<2rAB1
=N8;/2GBWX14rAB11: 1
D0=<c=]N$19YN1&Sy19C21:<c=18
<>GBM
C
1: 2
D0=<c=n<cVIY19S
1: 2
30E0KL/U19=D019N
1: 1, 3
1957<c19C2SyGBM(C2S
1: 4
hcM
N$Om=<
/2=Sy/<c=@?AB1:
1 1
YNM(JIN$=O/U19=2:D01911,
N 13, 19

1: 2, 2: 2


  


 
 


1: 4, 68, 1112,
1819, 21, 2: 1, 3, 7, 11, 14, 1617, 19
YNM(JIN$=O/U19=D019N
YNM(JIN$=OGBCU<>19NYN$19<c192:N 2
1: 14, 2: 10
YNM(JIN$=OABM
=D0GBC2J
2: 1, 7


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

I-3

ELF: Executable and Linkable Format

GBC2Sy<>N:8;<cGBM
C

pushl
putc 3: 1
fcj0i E0^`j0g
putc
_
putchar 3: 1
putenv 3: 1
puts 3: 1
putw 3: 1

strcmp
strcpy
strcspn
strdup

2: 1718
3: 2

S@<cN$G C2JL<>=@?A 1&z7S@1914M&?


pq198<Xr0AB1

3: 1

R
raise
rand

3: 1
3: 1

N1&ABM
8;=<c=@?AB1nrAB1
N1&ABM
8;=<cGBM
C2zSy1914M&?
1:pq1918<2rAB1

rewind

1: 16

strlen 3: 1
strncat 3: 1
strncmp 3: 1
strncpy 3: 1
strpbrk 3: 1
strrchr 3: 1
strspn 3: 1
strstr 3: 1
strtod 3: 1
strtok 3: 1
strtol 3: 1
strtoul 3: 1
swab 3: 1

Q
qsort

3: 1
3: 1
3: 1
3: 1

S@VIO? M(A(C2=OP19Syz=C2DF=S@Sy19O?ABV
1: 17
S@VIO? M(A(<c=@?AB19zSy1&14M&?
p>198;<2rAB1
1: 17
S@VIO? M(ABS
=@?SyM(AB:0<>1
?GBCUD0GBC2J 1: 8
8;M
OPOmM(C 1: 18
S@1914=ABS@M/2=S@1:/R8<c=@?AB1
S@/U=N$19DFMo?Ipq198;<2rAB14hc:0C21:8;<c14
GBM(CUS
1: 19
<cV
Y1
1: 18
:C2D61&r0C219D
1: 8
WX=AB:1
1: 18, 20
aa.030

1: 21

3: 1

S
S@198<>GBM
C2zM&3:?
1p>1&8<2rAB1
2: 7
S@19JIOP19C2<
D0VIC2=OPGB8
M&?
pq198<2rAB1 2: 1011
Y19N$OmGBS@SyGBM(CUS 2: 12
2: 8
YNM(81&SyS
2: 1, 7, 10, 1516
YNM(JIN$=O/U19=D019N

scanf

2: 7

2: 2

setbuf
setjmp

3: 1
3: 1

S@19<cec:Sy19Nw^cYNM(JIN$=OmS

T
2: 16

S@/U=N$19DFABG ? N$=NVf`S@1914S@/2=N19DFM&?
pq198<Xr0AB19g
S@/U=N$19DFM&?
pq198<2rAB1
1: 1
hc:0C28;<cGBM(CUS
1: 19
S@1914=ABS@MD0V
CU=OPGB8ABGBCUH
GBC2J
2: 10
S@1914=ABSyM-M&?
p>1&8<2rAB1
2: 10
S@19JIOP19C2<cS
S@/U1&A AS@8;NGBY<cS 2: 9

setvbuf

3: 1

1: 1

sleep 3: 1
sprintf 3: 1
srand 3: 1
sscanf 3: 1
strcat 3: 1
strchr 3: 1

I-4

tcdrain 3: 1
tcflow 3: 1
tcflush 3: 1
tcgetattr 3: 1
tcgetpgrp 3: 1
tcgetsid 3: 1
tcsendbreak 3: 1
tcsetattr 3: 1
tcsetpgrp 3: 1
tdelete 3: 1
tell 3: 1
tempnam 3: 1
tfind 3: 1
tmpfile 3: 1
tmpnam 3: 1


      
!
" # " &%(')  " -*, *


  


 
 


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

:C2D61&r0C219D+?19/2=WXGBM
N
:C2D61&r0C219DSyV
OL?M
ABS

1: 10, 2: 67
1: 8

1
:C2G C2GB<>G =ABGB3:19D
D0=<c=
:C2SyY198;GBr019D{YNM(Y19N<>V 2: 8

ungetc

1: 23, 9, 11, 14, 2: 23, 5, 78,

14, 20

V
WXGBN$<c:=A(=D0D0N$193:SyS@1GBC2J

vfprintf
vprintf
vsprintf

2: 2

3: 1
3: 1

W
wcstombs 3: 1
wctomb 3: 1

X
_xftw

3: 12

19N$M
z:0C2GBC2GB<cGB=ABGB19DFD0=<c=

2: 8


  


 
 



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

I-5

Das könnte Ihnen auch gefallen