Beruflich Dokumente
Kultur Dokumente
Contents
Preface
OBJECT FILES
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
!
" #$ "&%(')
"+*, *
ii
!
" # "&%(')
"-*, *
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;<2rA14hcM(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$=<cGBC2JL19C2WIGN$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
!
" #$ "&%(')
"+*, *
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;<2rA1&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:<>GM(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=OPGB8AGBC2H
19Nw8;M
O?GC219STGB<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=C2DFABGC2HL19D0GB<>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=<>GM(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:<>GM(C|fcN$:0C2C2GBC2JL=nY0N$M
e
JIN$=OPg@kKIM
N 8;M
C2WX19C2GB19C28;14=C2DF19h`r8;G1&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
;`
_______________________
!
" #$ "&%(')
"+*, *
1-1
i$2$ $;$`;o&zGBhUYN$19Sy1&CU<>z<c19ABABST<c/214SyV
Sy<>19O/2M(Q<>M8N$19=<c14=nYN$M
8;19SySTGBOP=JI1IkTK
GAB19ST:Sy19DF<>M?:GBADF=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 ?GC2J<c/214rAB19STSy198;<cGBM(CUSkT36WI19N$VLS@198<>GBM
CR/2=S=CR19C2<cN$VLGBCR<c/21
<c=@?AB1919=8;/R19C2<cN$VLJ
GWI19STGBCUhcM(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<>=@?A1&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;/2GC219ecGBC2D019Y19C2D61&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;<2rA1: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/214rA14QR=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&A1&WX=C2<28;AB=SySkT^`h2C219819S@S@=NV
z7D0=<>=nSy<>N:8<>:N19ST8M(CU<>=GBC|1957YABGB8GB<2Y=D0D0GBC2JL<cM-19C2Sy:N1 eu?VI<>14=AGBJ
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<>=GC2GBC2JL=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$=OmSOPGJ
/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;Gr19DFQR/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
OPYA1&<c14D019S@8N$GBY<cGBM
C2ST=YY01&=N
?19ABM
QRz7GBC|30E0KL^`D019C2<cGBr08;=<cGBM(Ck
.0/2GSTOP19OL?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;Gr8ET_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
e_machine
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@GJ
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<>GC2J
: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/2GSTOP19O? 19N GBD019C2<cGBr19S<>/U1M&?
p>198;<Xr0AB14WI19NS@GBM
Ck
\R=OP1
=AB:1
19=C2GBC2J
______________________________________
0
^`C2WI=ABGDWI19NS@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/2GSTOP19O? 19N JIGBWI19S<>/214WXGBN$<c:=A(=D0D0N19S@S<>MQR/2GB8/R<c/214S@VIS@<c19OdrNS@<2<>N=C2S@h`19N$S8;M
C2<>NM(Az<>/2:0S
S@<c=N$<cGBC2J<>/21vYN$M
8;19SySkT^`h2<c/214rA14/2=STCUM-=SyS@M
8;GB=<c19DF19C2<cN$VLYM
GBC2<cz<>/2GSTOP19OL?19N /UM(ABD0S19N$Mk
.0/2GSTOP19OL?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/2GSTOP19O? 19N /2M
ABD0ST<c/214S@198<>GBM
CR/219=D019Nw<>=@?A1&SrAB14M
hchcSy1&<2GBCn? V
<c19SkT^`h2<>/U1r0AB14/2=STCUM-S@198e
<cGBM(C|/219=D019N <c=@?AB19z7<>/2GBSOP19OL?19N /UM(ABD0S19N$Mk
.0/2GSTOP19O? 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/2GSTOP19O? 19N /2M
ABD0ST<c/21430E0K/219=D019NSTS@GB14GBCn? V
<c19Sk
.0/2GSTOP19OL?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/2GSTOP19OL?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/2GSTOP19O? 1&Nw/2M(AD0ST=nS@198;<cGBM
C/U19=D019N$STS@G1GBCn? V
<c19SkTiSy1&8<>GM(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/2GSTOP19O? 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
!
" # "&%(')
"-*, *
e_shstrndx
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;/2GC219SkT.0MSy:YYM
N$<2<>/UGBSTM&?
p>1&8<2rAB14hc=OmGBABVIz<>/214GC2GB<>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/214GC2GB<>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
\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
irA1&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
\R=OP1
=AB:1
19=C2GBC2J
______________________________________
^`C2WI=ABGD|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@GC2J<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;Gr19Dk-<>/U19N68AB=S@Sy19S
QRGBAAo?14D019rC219DF=STCU1&819S@Sy=N$VIzQRGB<c/RD0GB hchc19N19C2<? =S@GB8<cVIY19ST=C2DFS@G1&ShcM
N M&?
pq198<XrA1D0=<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=ABGDD6=<>=n19C28;M
D0GBC2J
ELFDATANONE 0
a1&1?19ABM
Q
ELFDATA2LSB 1
a1&1?19ABM
Q
_ELFDATA2MSB
___________________________________________
2
EI_VERSION
EI_PAD
M(N14GBC2hcM
NOP=<>GM(C|M(C|<>/219Sy1419C28;M
D0GBC2JIST=Y0Y19=N$S?19ABM
Qk-<>/U1&NwWI=AB:019ST=N$14N19S@19N$WX19DF=C2D
QRGBAA? 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/2GSTWI=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
QRGBAA(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
C2Gr8;=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
30C28M(D0GBCUJ
S@Y198GBr19StS8;M
OPYAB19OP19C2<2WI=AB:019S@zQRGB<c/R<>/U1OmM(Sy<XS@GJ
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
~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<>GM(CR/U1&=D61&Nw<c=@?AB14AB19<cSTM
C214ABM
8;=<c14=ABA(<>/U14rAB19STSy198;<cGBM(CUSkT.0/214S@198<>GBM
CR/219=D019Nw<>=@?A1GBS=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?19JIGBC2C2GC2JM
h2<c/214r0AB14<>M<c/214S@198e
e_shoff
<cGBM(C|/219=D019Nw<c=@?AB19
<c1&AABST/2M
QOm=C2V19CU<>NGB19ST<c/214S@198;<cGBM
CR/219=D019Nw<>=@?A18M(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/2GSTWI=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<>GM(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.
a1&8<>GBM
C2S8;M
C2<c=GBCR=ABA
GBC2hcM
N$Om=<>GBM
CRGCR=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<>GM(C2SS@=<cGBS@hcVLS@19WI19N=A(8;M
C2D0GB<cGBM(CUSk
1-8
!
" # "&%(')
"-*, *
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
1957GS@<2<>/U=<XD0MC2M
<2/2=WX14=nS@198;<cGBM
Ck
30=8;/RSy198;<cGBM(CRM
8;8:YGB19STM
C2148;M
C2<>GJ
: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@GD019STGBCROmM(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;Gr19Dk
iS@198<>GBM
CR/219=D019Nw/2=S<>/214h`M(ABAM(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;
!
" #$ "&%(')
"+*, *
1-9
sh_info
sh_addralign
sh_entsize
iS@198<>GBM
CR/219=D019NS
.0/2GSTOP19OL?19Nw/2M(ABD0S195Z<>N=nGBC2hcM
N$Om=<>GBM
C2zQ|/2M
S@14GBC2<c19N$YN19<>=<cGBM
CRD019Y19C2D0SM
CR<c/214S@198;<cGBM
C
<cV
Y1Iki<>=@?A1 ?19ABM
QD019S@8N$G ? 19ST<>/214WI=AB:019Sk
aM(OP14Sy1&8<>GM(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<>GM(CR/2=SC2M-=ABGBJIC2OP19CU<X8;M
C2Sy<>N=GBC2<cSk
aM(OP14Sy198;<cGBM(C2S/2M
ABDF=n<>=@?A1M
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
\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
SHT_DYNSYM
!
" # "&%(')
"-*, *
.0/214Sy198;<cGBM(CR/UM(ABD0S=nS@<cN$GBCUJ<c=@?AB1IkTi+CRM&?
pq198<Xr0AB1Om=V/U=WI14OP:A<>GBYAB14Sy<>NGBC2JL<>=@?A1Sy198;<cGBM(CUSk
a1&1va<cN$GBC2JL.6=@?AB19?19ABM
QhcM
NwD019<>=GABSk
.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<>GBYA1N19ABM
8;=Elf32_Rela
<cGBM(CRSy198;<cGBM(CUSk
a1&1vT19ABM
8;=<cGBM
C2?19ABM
QhcM
NwD019<>=GABSk
.0/214S@198<>GBM
CR/2M
ABD0ST=nS@VIO?M
A(/2=S@/R<c=@?AB1IkTi+ABA(Mo?Ipq198;<cSTY=N<>G8;GBY=<cGBC2JGCRD0V
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<>=GBASk
.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<>=GBASk
iS@198;<cGBM
CRM(hU<>/2GST<>VIY14M
8;8;:0YGB19STC2MS@Y=81GCR<>/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
:<21957YAGB8;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&AM(QhcM
NwD019<>=GABSk
.0/2GSTS@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/2GSTWI=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/2GSTWI=A:14S@Y198;Gr19ST<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/2GST19C2<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
\RMABGBCUHLGBC2hcM
N$Om=<>GBM
C
SHN_UNDEF
sh_link
\RM=:057GBAGB=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$GC2JYNM(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;<2rA1&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
C2zD019Y19C2D0GC2JM
C
sh_link
sh_info
S@198<>GBM
C|<>VIY1Ik
1-12
!
" # "&%(')
"-*, *
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<>/U1GC2D0GB8;=<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
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
.bss
.comment
.data
=C2D
.debug
.dynamic
.dynstr
.dynsym
.fini
.got
.hash
.init
.interp
.line
1-14
.data1
!
" # "&%(')
"-*, *
.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&GN 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|<>/214ABGS@<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<XGST<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$GC2JL<>=@? 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$GC2JL<>=@?A1&SAB=S@<?VI<>14GSTD019r0C219DF<cM-/2M
ABDF=xC2:ABA(8/2=N$=8<>19Nz19C2S@:0N$GBCUJCU:ABA(<c19N$OPGC2=<>GBM
CRh`M(Nw=ABA(Sy<>NGBC2JISkTi
S@<cN$GC2JLQR/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$GC2JL<>=@?A14S@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
______________________________________________________
^`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<>14GCR<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<>GYAB14<>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
ABD0STGC2hcM
N$OP=<cGBM
CRC21919D019DF<cMABM(8=<>14=CUDFN$19ABM
8;=<c14=nYNM(JIN=OPSTSyV
O? M(ABG8
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
<>=@?A1419C2<>NVL/2=S<>/214h`M(ABAM(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;
External C symbols have the same names in C and object files symbol tables.
NOTE
st_value
st_size
st_info
.0/2GSTOP19O?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/2GSTOP19O? 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=C2GY: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
st_other
st_shndx
iS@VIO?M
ABSU?GBCUD0GBC2JD61&<c19N$OmGBC219ST<c/214ABGBC2HI=J
14WXGBS@G ?GABGB<>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(AST=N14C2M(<2WXGBS@G ?A14M(:<cS@GD014<>/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<cGBYAB14rA1&SQRGB<c/2M
:<XGC2<>19Nhc19N$GC2JQ|GB<>/|1&=8/
M
<>/219N9k
xABM&?=A(SyV
O? M(ABS=N$14WIGBSyG ?AB14<>M=ABA(Mo?Ipq198;<2rAB19SU? 1&GC2J8M(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<>GM(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=C2D0zGh2=nD019r0C219DFJ
AMo?=A
S@VIO?M
A
1957GSTB_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(AD0S
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
14ABGC2HL19D0GB<>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;/2GWI14OP19O? 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(ASkT[+C2N1&SyM(ABWX19D
QR19=HLS@VIO?M
ABST/2=WX14=v19NM-WX=AB:1Ik
^`CR19=8;/RS@VIO?M
A(<>=@? AB19z=AASyV
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
!
" # "&%(')
"-*, *
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;Gr19Dk
.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<>GM(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(ASC2=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
<>GM(C|hcN$M
Od=xS@/2=N19DFM&?
pq198<>z<c/214ABGBCUH19D0G<>M
N =:0<>M
OP=<cGB8;=ABAV8N$19=<c19ST=xYN$M
e
8;19D0:0N$14AGBC2H
=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
QRGBAA(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<>GM(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&AM(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=AGBJ
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&AABST/2M
QOm=C2V? V
<c19ST=N14N$19I:GBN19Dk
st_value
.0/2GSTS@198;<cGBM
CR<>=@?A1GBC2D61&5]OP19=C2ST<c/214S@VIO?M
A(GBST:C2D019r0C219DkT/219CR<c/214ABGBC2HL19D0GB<cM(Nw8;M
O?GC219S
SHN_UNDEF
<c/2GBSTM&?
p>198;<2rAB14Q|GB<c/R=C2M
<>/219Nw<c/2=<2D019rC219S<>/21vGBC2D0GB8;=<c19DFSyV
O? M(ABz7<>/2GSTr0AB19SN$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
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<>AVLD0GBhchc19N19C2<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<>GM(CRCU:O? 1&NwGBSGBN$N19AB19WI=C2<lk
i+AB<>/UM(:0J
/R<c/214S@VIO? M(A(<c=@?AB14WI=A:19ST/2=WX14S@GBOPGAB=N OP19=C2GC2J
ShcM
N D0GBhch`19N$19C2<2Mo?Ipq198;<2rA1&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;=ABAST=nh`:C28;<cGBM
C2z<c/214=S@SyM(8GB=<c1&D{8;=ABA(GC2S@<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=ABAM(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
#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
i+STS@/UM(Q|C=@? M(WX19zM(C2ABV
19C2<cN$GB19S8;M
C2<>=GBC|=CR1957YABG8;GB<2=D0D019C2DkT30CU<>NGB19STM
hU<>VIY1
S@<cM
N$1
=CRGBOmYABGB8;GB<2=D0D019C2DFGBC|<>Elf32_Rela
/214AM(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
<>/219NwOPGJ
/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
iN$19ABM
8;=<cGBM
CRSy1&8<>GM(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@/2GYSk
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`rAB14GC2<>19NYN$19<c=<>GM(C2gUJ
GWI19SQR=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=<>GM(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<>GM(CR=CUDFD0=<>=xr19ABD0Sfu?GB<2C2:0O?19NST=YY19=NwGBC
<c/214ABM
QR19NX? M(5]8M(NC219N$Syglk
Figure 1-21: Relocatable Fields
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=AABVY19Ne
hcM
N$OmS<>/U14N1&AM(8=<>GBM
CkTT19ABM
8;=<cGBM(CUST=YYABGB19DF<cM-195Z198;:0<>=@?A1M
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/2GSTOP19=C2S<>/214=D0D019CUDF:S@19DF<cM-8M(OmY:<c1<c/214WI=A:14M(h2<c/214N1&AM(8=<>=@?A1r019ABDk
A
.0/2GSTOP19=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
!
" # "&%(')
"-*, *
GOT
L
P
S
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/2GSTN1&AM(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
AMo?=A
M(h`hcS@19<2<c=@?AB1Ik
.0/2GSTN19ABM(8=<>GBM
CR<cV
Y0148;M
OPY:<c19ST<c/214=D0D0N19S@SM(hU<>/214SyV
OL?M
ABSTYNM(819D0:N$14AGBC2H
=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$14AGBC2H
=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=OPG8ABGBC2HI19N 8M(YG1&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;Gr19D+?VL<c/214M(h`hcS@19<lk
!
" #$ "&%(')
"+*, *
1-23
R_386_GLOB_DAT
R_3862_JMP_SLOT
R_386_RELATIVE
R_386_GOTOFF
R_386_GOTPC
1-24
.0/2GSTN19ABM(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<>=@?A119CU<>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=OPG8
ABGBC2HI19NwOPM
D0GBr01&S<c/21vYN$M
8;19D0:0N$14AGBC2H
=JI1v<>=@?A1419C2<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=vAM(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
C2D0GBC2JLWIGN$<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&AM(8=<>GBM
CR19C2<cN$GB19ShcM
N <c/2GBST<cVIY14OP:Sy<XSyY198;GBh`Vnh`M(Nw<>/214SyV
Ome
?M
A(<c=@?AB14GBC2D61&5k
.0/2GSTN$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/2GSTN1&AM(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|<>/2GSTN1&AM(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
!
" # "&%(')
"-*, *
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=<>GM(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<>/2GSTY=N$<2D0GBS@8:S@S<>/214hcM
ABABM
QRGBC2J k
0$2$ $;$$n.0/2GSTS@198<>GBM
CR8M(OmYAB19OP19C2<cST~0=N$<2zD019S@8N$G ?GC2JM&?
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/214rA14=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=@?AB14GST=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=C2GC2J
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
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;
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$G1&SOP=VL=YY01&=NwGBC|=C2VLM(ND019N$z71957819Y<X=S195ZYABGB8;GB<cABVLC2M
<>19D-?19ABM
QkT]19r0C219D
<cV
Y14WX=AB:19ShcM(AABM(Q|M(<c/219NwWI=AB:19S=N$14N19S@19N$WX19DFhcM
N h`:<c:N$14:0S@1Ik
2-2
!
" # "&%(')
"-*, *
\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=vAM(=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?19JIGBC2C2GC2JLM(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$OPGC2=<>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<XGS
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=NVGC2hcM
N$OP=<cGBM
CkaZ191v\RM
<>1vaZ198e
PT_NOTE
<cGBM(C2? 19ABM(QhcM
NwD019<>=GABSk
.0/2GSTS@19J
Om19C2<X<cV
Y14GBSTN$19Sy19N$WX19D]? :<X/2=ST:0C2S@Y198GBr19DFS@19OP=CU<>GB8Sk~NM(JIN$=OmST<c/2=<28;M
C2<>=GCR=C
PT_SHLIB
=NN$=VL19AB19OP19C2<2M
hU<>/UGBS<>VIY14D0MCUM(<28M(C2h`M(NO<>M<c/214i+j0^@k
.0/21v=N$N=V19AB19Om1&CU<>zGh2YN19S@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/2GSTSy19J
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
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<XrA1&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<>/214AM(Q|1&Sy<XWXGBN<>:=A
=D0D0N$19SySTM
h2=nYNM(JIN$=OmSABM
=D0=@?AB1
S@19JIOP19C2<lkTi+S~NM(JIN$=OE0M(=D6GBC2J
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$=OmSTQRGABA(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(AD0ST=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&AST=YY01&=NX? 1&AM(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
. . .
__________
!
" # "&%(')
"-*, *
namesz
=C2D
descsz
=C2D
type
. name
0
/21vr0N$S@<
?VI<>19SGBC
8;M
C2<c=GBCR=xC2:ABAec<>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/2GSTQ|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<>GBYA14GBC2<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
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:GN$14=nY/2VIS@GB8=A(Y=JI1:0C2AB19S@SGB<XN19hc19N1&CU8;19ST<c/214ABM
J
GB8=A
Y=JI14D0:N$GC2J195Z198;:<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=C2DFWIGN$<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
jFGST<>/U1Om=57GBOm:OdY=JI14S@GB19z<c/214rAB19STQ|GBABAo?14Sy:GB<c=@?AB14nhcM
N Y=JIe
n
GBC20x1000
JLN$19JI=N$D0A1&SySTM
h2Y/2VIS@G8;=A(Y=JI14S@GB1Ik
Figure 2-5: Executable File
KIGBAB14-hchcSy1&<
KIGBAB1
0
Program header table
0x100
0x2bf00
0x30d00
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<
GN$<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;Gr19D
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=nfcD019Y19C2D0GC2JM
CRY0=J
14SyGB14=C2DFnr0 AB14S@VIS@<c19O?AM(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
.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=<>GM(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/214rA14/2M(AD0GBC2JL<>/U1419C2DFM
h2<c1957<2=C2D{<>/U1w?19JIGBC2C2GBC2JLM
h2D0=<c=
QRGBAAo?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=C2D0ABGC2Jh`M(Nw:C2GBC2GB<cGB=ABGB19DFD0=<c=zQR/2G8;/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;Gr19DkT.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=
2-8
!
" # "&%(')
"-*, *
-CR<>/U14M(<c/219N /U=C2D0zS@/U=N$19DFM&?
p>1&8<XSy19J
Om19C2<>S<>VIYGB8=ABABV8M(CU<>=GBC|YM(SyGB<>GM(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=ABGD0=<>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@19STGCROP19OPM
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<>=@?A1S@/UM(Q|STYM(SyS@G ?A1S@/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
!
" # 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$G1&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<>19NrA1&SS@19JIOP19C2<cSkT.0/2=<2GBS@zGPT_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 ?GBAGB<>VL<cMN$1981&GWI1
8;M
C2<cN$M
A(h`N$M
Od<c/214SyV
Sy<>19O=C2DFYNM
WIGBD014=C|19C2WIGN$M
C2OP19C2<2hcM
Nw<>/U14=YYABGB8=<>GBM
CRYNM
J
N=Ok
.0/21vGBC2<c1&NYN1&<c19NwN$1981&GWI19S8;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
C2D0zD019Y19C2D0GC2JLM(C|<>/214195Z198;:0<>=@?A14rAB14h`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<>GM(C|M(hU<c/214rA14D019S@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&GWI19DkT.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@19g2GBSTAM(=D019DF=STY0M(SyGB<>GBM
C2ecGC2D019Y19C2D019C2<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=@?AB1vrAB14GC2<>19NYN$19<c19N$SWIGN$<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(AWIGBC2J
8;M
C20GB8;<cSk
Dynamic Linker
/219Cn? :GBABD0GBCUJ=CR195Z198;:0<>=@?A1r0AB14<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<>19ABABGC2JL<>/21vS@VIS@<c1&O<cM-GBCUWIM
H
14<c/214D6V
C2=OmGB8ABGC2H
19Nw=S<>/21vYN$M
e
JIN$=OGBCU<>19NYN$19PT_INTERP
<c19N&k
The locations of the system provided dynamic linkers are processorspecific.
NOTE
2-10
!
" # "&%(')
"-*, *
<>/219NQRGBSy19z
19GB<c/219N D0M
19STC2M
<2M(88;:NwGBCR<c/21419C2WIGBNM
C2OP19C2<2M(Nw/2=ST=nCU:ABA(WX=AB:1IkT.0/21D0VIC2=OPG8
ABGBC2HI19NwGBSTY19NLD_BIND_NOW
OPGB<c<>19D{<>M19WI=AB:0=<>14Y0N$M
8;19D0:N14ABGBC2HI=JI14<>=@? AB1419C2<>NGB19SAB=GBABV
z7<>/2:0ST=WXM(GD0GBC2JLS@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=OPG8ABGBC2HIGBC2JIzGB<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
typedef struct {
Elf32_Sword
d_tag;
union {
Elf32_Word
Elf32_Addr
} d_un;
} Elf32_Dyn;
d_val;
d_ptr;
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$=OWIGN$<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$GC2J195Z198;:<cGBM
Ck
/219CRGBCU<>19NYN$19<cGBC2JL=D0D0N$19SyS@19ST8M(C2<c=GBC219DFGBC|<>/214D0VIC2=OmGB8S@<cN:8;<c:N19z<>/214D0VIC2=OPG8ABGBC2HI19N 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=OPG8
S@<cN$:08;<c:N1
k
.0/214h`M(ABAM(Q|GBC2J<c=@?AB14Sy:OPOm=N$GB19S<>/214<c=JN19I:GBN19OP19C2<cSThcM
N 195Z198;:0<>=@?A1=CUDFS@/2=N19DFMo?Ipq198;<2r0AB19SkT^`h2=n<c=JGS
OP=NH
19D{Om=C2D0=<cM(NV
zu<c/219CR<c/214D0VIC2=OmGB8ABGC2H
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
!
" # "&%(')
"-*, *
\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;Gr19D
DT_LOPROC
0x70000000 :C2SyY198;GBr019D :C2S@Y01&8GBr19D :CUS@Y198;Gr19D
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/2GST19AB19OP19C2<2/2M
ABD0ST<c/214S@<cN$GC2J<c=@?AB14M
hchcSy19<XM
h2=nC2:0ABABec<c19N$OmGBC2=<>19DFSy<>NGBC2JIzJ
GWIGBC2JL<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;G1&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<>GBYA119CU<>NGB19STQ|GB<>/R<c/2GBS<>VIY1Ik.6/219S@1419CU<>NGB19S@N19AB=<>GWI1
M
N$D019NwGBSSyGBJ
C2GBr08;=CU<>z7<>/2M
:JI/|<>/219GBNwN19AB=<cGBM(C|<cM19C2<>NGB19SM(hUM
<>/U1&Nw<cVIY19SGBSC2M(<lk
.0/2GST19AB19OP19C2<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/2GST19AB19OP19C2<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<>=GABSk
.0/2GST19AB19OP19C2<X/UM(ABD0ST<c/214=D0D0N1&SySTM
h2<>/214S@VIO? M(A(/2=Sy/R<>=@? AB19zD019Sy8;NG ?19DFGBCRR=Sy/R.0=@?A1
k
.0/2GST/2=Sy/R<c=@?AB14N$19h`1&NST<cM<>/214SyV
OL?M
A(<>=@? AB14N$19hc19N19C28;19D+? V<c/21
19AB19OP19C2<lk
DT_SYMTAB
.0/2GST19AB19OP19C2<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|<>/2GST<c=@?AB1Ik
.0/2GST19AB19OP19C2<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/2GST19AB19OP19C2<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&AM(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@GC2J
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/2GST19AB19OP19C2<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
2-14
!
" # "&%(')
"-*, *
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&=NwGCR=C2VLM
ND019N&kT.0=JLWX=AB:19STCUM(<2=YY19=NGBC2JLGBCR<c/214<>=@? AB14=N$14N19S@19N$WXDT_NEEDED
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$GC2J
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?:GBAD0ST=CR195Z198;:<c=@?AB14r0AB14:S@GC2JM
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$GBCUJD0GN$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<>G1&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&AABST<>/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<>/214AGBS@<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=OPGB8AGBC2H
19Nw=8;819Y<>S<>/U1Sy19OPGB8M(ABM
CRC2M
<>=<cGBM
C2zQRGB<c/R<c/21
!
" # B"7o%]')
"+*, *
2-15
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.
2-16
!
" # "&%(')
"-*, *
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
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
.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
AMo?=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$14ABGC2H
=JI14<c=@?AB1419C2<cNVM
C2ABVLh`N$M
OdQ|GB<>/UGBCR<c/214Sy=OP14M&?
pq198<Xr0AB1IkTM(CUe
S@19I:01&CU<>ABVIz<c/2148;=ABABGC2Jh`:C28<>GBM
CRGBSN$19SyYM(CUS@G ?AB14h`M(NwS@19<c<>GC2J<c/214JIABM&?=A(M
hchcSy19<X<c=@?AB1w? =S@14N$19JIGBS@<c19NI? 19hcM
N$1
8;=ABAGBC2JL<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;=AABS
zQ|/2GB8;/|<>N=C2S@hc19NST8M(CU<>NM(A(<cM<>/U14AB=@?19A
k
name1
.PLT1
kR.0/214r0N$Sy<XGBCUS@<cN$:8<>GM(Cxpq:OmYST<cM<>/214=D6D0N$19S@SGBC|<>/214JIABM&?=A(M
hchcSy19<2<>=@?A1419C2<>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=<>GM(CRM
hch`S@19<2fc;$$cg2M
CR<c/214S@<c=8;H kT.0/214N1&AM(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&AM(8=<>GBM
CR19C2<cN$VL=ABSyM-8M(C2<c=GBC2S=nS@VIO?M
A(<c=@?AB14GBCUD01957z<c/2:S<>19ABAGBC2JL<>/214D0VIC2=OPG8
ABjmp
GBC2HI19N Q|/2=<2S@VIO?M
A(GBSU? 19GBC2JN19hc19N1&CU8;19D0z
GBCR<>/2GS8=S@1Ik
name1
k|i+hc<c19N Y:0S@/2GBC2JL<c/214N1&AM(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$14ABGC2H
=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=OmGB8ABGC2H
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
AMo?=A
M(h`hcS@19<2<c=@?AB1419C2<cN$V
2-18
!
" # "&%(')
"-*, *
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
AMo?=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;=ABAGBC2J<c/214D0VIC2=OPGB8)ABGBC2HI1&Nw=nS@198;M
C2DF<cGBOP1IkT.0/2=<2GBS@z<c/21
GBC2Sy<>N:8;<cGBM
CR=<
QRGBAA(name1
<cN$=C2Syhc19Nw<>M
.PLT1
zGBCUS@<c19=DFM
h2hc=ABABGC2JL<>/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=OPGB8ABGC2H
GBCUJ?19/2=WXGBM
N&kT^`hXG<>STWI=A:1GBSTC2M
C2ecCU:ABABz
<c/214D0LD_BIND_NOW
VIC2=OPGB8)ABGC2H
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@STGC2GB<>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$G1&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;Gr8;=<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@/2GC2Jhc: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@GN$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(AD0ST<c/214D019S@GBN19D
chain
!
" # B"7o%]')
"+*, *
2-19
C2=OP1vM(Nw<c/21
chain
19C2<cN$VL8;M
C2<c=GBC2ST<c/214WX=AB:1
STN_UNDEF
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;
}
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
!
" #$ "&%(')
"+*, *
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<>=@?A14ABGBS@<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
QRGC2JS@19NWIGB819Sk
_ _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
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 1957GS@<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(AABM(Q|GBC2JL=N$14CUM(<2D019rCU19DF19ABS@19QR/U19N$1Ik
.0/2GSThc: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
.0/2GSThc:CU8;<cGBM(CR0:Sy/219ST<c/214M(:0<>Y:<28;/U=N$=8;<c19N$ShcM
N =STGBh
/2=D+?1919CR8;=ABA1&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
r0N$S@<2=N$JI:OP19CU<>zQR/UGB8;/ROP:0S@<2/2=WI14<c/21WX=AB:14t2k
a1&1v<>/2GST8/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 GCR<c/2GBS8;/2=Y0<>19NwhcM
NwOPM
N$1vGBC2hcM
N$OP=<cGBM
Ck
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@zWIGN$<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=AS@MYN$M
8;19D0:0N$14ABGC2H
=JI14<c=@?AB1
S@<cN$GC2JL<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
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
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
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<>=@?A14rAB1
1: 1
S@1914=AS@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$GC2JL<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
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;Gr8
2: 10
YNM(81&SyS@M
N$e`S@Y198;Gr8)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
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
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&AAS@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
!
" # "&%(')
"-*, *
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
:C2GC2GB<>G=ABGB3:19D
D0=<c=
:C2SyY198;GBr019D{YNM(Y19N<>V 2: 8
ungetc
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