Professional Documents
Culture Documents
Preface
1 OBJECT FILES
Introduction 1-1
ELF Header 1-3
Sections 1-8
String Table 1-16
Symbol Table 1-17
Relocation 1-21
3 C LIBRARY
C Library 3-1
I Index
Index I-1
! " #$ " &%(')" +*, *
i
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
ii
Figures and Tables
#! $" " &%(')" +*, *
iii
Preface
! " #$ " &%(')" +*, *
1
1 OBJECT FILES
Introduction 1-1
File Format 1-1
Data Representation 1-2
Sections 1-8
Special Sections 1-13
Relocation 1-21
Relocation Types 1-22
! " #$ " &%(')" +*, *
i
Introduction
~=N<2nD019S@8;NG ?19S<>/U14GBi]j6^2M&? p>198;<2rAB14hcM NOP=<>z78;=ABAB19DF30E0KLfc3657198;:0<>=@? AB14=C2DFE0GBCUH GBC2JLKIM(NOP=<cglkT.0/U19N$1v=N$1v<>/UN$191
OP=GBC|<>VIY19STM h2M&? pq198<Xr0AB19Sk
i$$;l;co9 /2M ABD0S8;M D014=C2DFD0=<c=nS@:0GB<>=@? AB14hcM N ABGBCUH GBCUJQ|GB<>/|M(<c/219NwMo? p>198;<2rA 1&S<cM-8N$19=<c14=CR1957198:<ce
=@?AB14M Nw=nS@/2=N19DFM&? pq198<2rAB1Ik
i+CR$$Ico /2M ABD0S=nYN$M J N=OdSy:GB<c=@?AB14h`M(Nw1957198:<>G M(C2<c/214r0AB14S@Y198GBr19S/2M Q fcj0i -aZgU8N$19=<c19S
_
=nYNM J N=OPSTY0N$M 8;19S@SGBOm=J 1Ik exec
File Format
¢? pq198<Xr0AB19SY=N$<cGB8;GBY=<c14GBC|YN$M JIN$=O§ABGBC2HIGBC2JLfu?:0GBABD0GBC2JL=nYNM(JIN=OPg2=CUDFYNM(JIN$=O§1957198:<>G M(C|fcN$:0C2C2GBC2JL=nY0N$M e
JIN$=OPg@kKIM N 8;M C2WX19C2GB19C28;14=C2DF19h`r8;G 1&CU8;VIz<>/214M&? pq198<Xr0AB14hcM N$OP=<2YN$M WXGBD019STY=N=ABAB19A(WIGB19Q|STM(hU=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 Cªk
! " #$ " &%(')" +*, *
1-1
ELF: Executable and Linkable Format
Although the figure shows the program header table immediately after the ELF header, and the section
NOTE header table following the sections, actual files may differ. Moreover, sections and segments have no
specified order. Only the ELF header has a fixed position in the file.
Data Representation
i+STD019Sy8;NG ?19DF/219N1&z7<>/214M&? p>1&8<2rAB1X¸;; ¶ ;2S@:0YYM(N<cSTWI=NGBM(:0STYNM(81&SyS@M N$SQRGB<c/R¹eu?GB<?VI<>19ST=CUDFsteu?GB<2=N$8/2GB<>198e
<c:N$19S7kT\R19WI19N<>/219AB19SyS@zGB<2GBSGBC2<c19C2D019DF<cM?14195Z<>19C2SyG ?AB14<cMAB=N$JI19NwfcM N SyOP=ABAB19Ng2=N8;/2GB<c198;<c:N19SkT)?Ipq198;<2r0AB19S<>/219N19e
hcM N$14N19YN$19Sy19C2<2S@M OP148;M C2<cN$M A(D0=<c=nQRGB<c/R=xOP=8;/2G C219ecGBC2D019Y19C2D61&CU<Xh`M(NOP=<czOP=HIGBC2JLGB<2YM(SyS@G ? AB14<>MGBD019C2<cGBhcV
M&? pq198<Xr0AB19ST=CUDFGBC2<c19N$YN19<X<c/219GBNw8;M C2<c19C2<>SGBCR=n8M(OmOPM CRQR=V kTºT1&Om=GBC2GBC2JLD0=<c=nGBCR=CRMo?Ipq198;<2rA 1:0S@14<>/U141&CU8;M D0e
GBC2JLM h2<c/214<c=N$JI19<XYNM 8;19S@SyM(NzN$19JI=N$D6AB19S@STM hU<>/214Om=8;/2GBCU14M(C|QR/2GB8/R<c/214rA 14QR=S8;N$19=<c19D¥k
! " # " &%(')" -*, *
1-2
ELF Header
aM(OP14M&? p>198;<2rAB148M(C2<cNM(A(Sy<>N:8<>:N19ST8=CRJIN$M QRz@?198=:S@14<c/21430E0KL/219=D019Nw8;M C2<c=GBC2ST<c/219GBNw=8;<c:=A(SyGB©19SkT^`h2<c/21
M&? pq198<2rAB1vhcM(NOP=<28/2=C2JI19S@z=xYN$M JIN$=O§OP=VL19C28M(:0C2<>19Nw8M(C2<cNM(A S@<cN$:8<>:0N$19S<c/2=<2=N$1vAB=N$JI19NwM(NwSyOP=ABAB19Nw<c/2=C
1957Y01&8<>19D¥k¥~NM(JIN$=OmSOPG J /2<U<c/219N$19hcM N1vGBJ C2M N1v195Z<>N=(GBC2hcM N$Om=<>GBM CªkT.0/214<cN$19=<cOP19C2<2M h2OPGBSyS@GBC2JIGBC2hcM N$Om=e
<cGBM(CRD61&Y01&CUD0STM CR8;M C2<c1&5Z<2=C2DFQRGBABAo? 14S@Y198;G r19DFQR/U1&C|=C2DFGBh2195Z<>19C2SyGBM(CUST=N$14D019r0C219D¥k
#define EI_NIDENT 16
typedef struct {
unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off e_phoff;
Elf32_Off e_shoff;
Elf32_Word e_flags;
Elf32_Half e_ehsize;
Elf32_Half e_phentsize;
Elf32_Half e_phnum;
Elf32_Half e_shentsize;
Elf32_Half e_shnum;
Elf32_Half e_shstrndx;
} Elf32_Ehdr;
! " #$ " &%(')" +*, *
1-3
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
1-4
ELF: Executable and Linkable Format
.0/2G STOP19O? 19N /2M ABD0ST<c/214S@198<>GBM CR/219=D019Nw<>=@? AB14GBC2D0195xM h2<c/21419C2<cN$VL=S@S@M 8;G =<>19DFQ|GB<>/R<c/214S@198e
e_shstrndx
<cGBM(C|C2=OP14Sy<>NGBC2JL<c=@?AB1IkT^`h2<c/214rAB14/2=SC2M-Sy198;<cGBM(C|C2=OP14S@<cN$G C2J<c=@?AB19z<c/2GBSTOm19O?19Nw/2M(A D0S
<c/21WX=AB:1 kaZ1914a1&8<>GBM C2Sy(=C2DFaZ<cNGBC2JL.0=@?A 1&? 19ABM(Q¦hcM NwOPM N$1vGBC2hcM N$Om=e
<cGBM(Cªk SHN_UNDEF
ELF Identification
i+STOm1&CU<>GBM C219DF=@? M(WX19z30E0KLYN$M WIGBD019S=CRM&? pq198<Xr0AB14hcN=OP19QRM NH<cMS@:YYM N<XOm:AB<cGBYAB14YN$M 8;19SyS@M N$SyzOP:AB<cGBYAB14D0=<c=
19C28;M D0GBC2JIS@z=C2D½OP:0AB<>GBY0AB18;AB=SyS@19SªM h2OP=8;/2G C219SkT.0MSy:YYM N$<2<>/UGBSTM&? p>1&8<2rAB14hc=OmGBABVIz<>/214G C2GB<>G =Ao?VI<>19SM(hU<>/21vrAB1
S@Y198GBhcVL/2M Q·<cM-GBCU<>19NYN$19<2<>/214r0AB19zGBC2D019Y19C2D61&CU<XM h2<c/214YNM(81&SyS@M N M CRQ|/2GB8;/R<c/214GBCUI:GBN$VLGBSOP=D014=C2DFGBC2D61&Y01&CUe
D019C2<2M h2<c/214r0AB19SN$19Om=GBC2GBC2JL8;M C2<c19C2<cSk
.0/214G C2GB<>G =Ao?VI<>19SM(hU=CR30E0KL/219=D019N f`=C2DF=CRM&? p>198;<2rAB19gU8;M N$N19S@YM C2DF<cM-<c/21 OP19O? 19N&k
e_ident
.0/21vC2195Z<?VI<>19z zGBD019C2<cGBr01&S<>/U14rAB19ST8AB=S@SyzM(Nw8;=Y=8GB<>V k
EI_CLASS e_ident[EI_CLASS]
! " #$ " &%(')" +*, *
1-5
ELF: Executable and Linkable Format
Å
0x01 01
Å Æ
0x0102 02 01
Å Æ Ç È
0x01020304 04 03 02 01
! " # " &%(')" -*, *
1-6
ELF: Executable and Linkable Format
Å
0x01 01
Å Æ
0x0102 01 02
Å Æ Ç È
0x01020304 01 02 03 04
Machine Information
KIM(Nwr0AB1vGBD019C2<cGBr8=<>GBM C|GBC z<c/214steu? GB<X^`C2<c19A(i+N$8/2GB<c1&8<>:0N$14N19I:GBN$19S<c/214hcM ABABM(Q|GBC2JLWI=AB:019Sk
e_ident
! " #$ " &%(')" +*, *
1-7
Sections
i+CRM&? pq198<Xr0AB19STSy1&8<>G M(CR/U1&=D61&Nw<c=@?AB14AB19<cSTM C214ABM 8;=<c14=ABA(<>/U14rAB19STSy198;<cGBM(CUSkT.0/214S@198<>GBM CR/219=D019Nw<>=@?A 1GBS=C
=NN$=V¬M h S@<cN$:08;<c:N1&ST=STD61&Sy8;NG ?19D+?19ABM QÄkTiS@198<>GBM CR/219=D019N <c=@?AB14GBCUD0195xGBST=nSy:Z?Sy8;NGBY<XGBCU<>M<>/UGBS
=NN$=V k.0/2Elf32_Shdr
1430E0KL/219=D019NS OP19O? 19N JIGBWX1&S<c/21w?VI<>14M hchcSy19<Xh`N$M Od<c/21w?19JIGBC2C2G C2JM h2<c/214r0AB14<>M<c/214S@198e
<cGBM(C|/219=D019Nw<c=@?AB19 <c1&A ABST/2M Q·Om=C2V19CU<>NGB19ST<c/214S@198;<cGBM CR/219=D019Nw<>=@?A 18M(CU<>=GBCUS@
e_shoff
JIGBWI19S<>/214SyGB©14GBCn?VIe_shnum
<>19SM(hU19=8;/R19C2<cN$V k e_shentsize
Although index 0 is reserved as the undefined value, the section header table contains an entry for
NOTE index 0. That is, if the e_shnum member of the ELF header says a file has 6 entries in the section
header table, they have the indexes 0 through 5. The contents of the initial entry are specified later in
this section.
! " # " &%(')" -*, *
1-8
ELF: Executable and Linkable Format
typedef struct {
Elf32_Word sh_name;
Elf32_Word sh_type;
Elf32_Word sh_flags;
Elf32_Addr sh_addr;
Elf32_Off sh_offset;
Elf32_Word sh_size;
Elf32_Word sh_link;
Elf32_Word sh_info;
Elf32_Word sh_addralign;
Elf32_Word sh_entsize;
} Elf32_Shdr;
! " #$ " &%(')" +*, *
1-9
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
1-10
ELF: Executable and Linkable Format
! " #$ " &%(')" +*, *
1-11
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
1-12
ELF: Executable and Linkable Format
Special Sections
«=NGBM(:0STSy198;<cGBM(CUST/UM(ABD{YN$M J N=O§=C2DF8M(C2<cN$M A GBC2hcM N$Om=<>GBM CªkTa198;<cGBM(CUSTGBCR<c/214ABGBS@<?19ABM Q·=N14:S@19D+? V<c/214S@VIS@<c19O
=C2DF/2=WX14<>/U1G C2D0GB8;=<c19DF<cV Y91 ST=CUDF=<><cN$G ?:<c19Sk
! " #$ " &%(')" +*, *
1-13
ELF: Executable and Linkable Format
.0/2G STS@198;<cGBM CR/2M(ABD6STABGBC214C2:O? 19N GBC2hcM N$Om=<>GBM CRhcM N S@VIO?M ABGB8¥D01? :JIJ GBC2JIzQR/2GB8/RD019S@8;NG ?19ST<c/21
.line
8;M N$N19S@YM C2D019C281w?19<cQR1919CR<c/214S@M :N8;14YNM(JIN$=O§=C2DF<c/214OP=8/2GBC2148;M D01IkT.0/2148M(CU<>19C2<cS=N$1
:C2SyY198;GBr019D¥k
! " # " &%(')" -*, *
1-14
ELF: Executable and Linkable Format
! " #$ " &%(')" +*, *
1-15
String Table
a<>NGBC2J<c=@?AB14Sy198;<cGBM(C2S/2M ABDFC2:ABABe`<>19NOPGBC2=<c19DF8;/2=N=8;<c19N Sy19I:19C28;19Syz8;M OPOPM C2ABVL8;=ABAB19DFSy<>NGBC2JISkT.0/214M&? pq198<2rAB1
:Sy19ST<c/219S@14S@<cN$GBCUJ S<>MN$19YN19S@19C2<2S@VIO?M A(=C2DFS@198<>GBM CRC2=Om19SkT-C214N19hc19N$19C2819ST=nSy<>NGBC2JL=ST=C|GBC2D0195]GBC2<cM-<c/21
S@<cN$G C2JL<>=@? AB14S@198<>GBM CªkT.0/214r0N$Sy<? V <c19zQR/2GB8/RGBSGBC2D0195]©19N$M zGBSTD61&r0C219DF<cM/2M(ABD{=nC2:ABA 8;/2=N=8;<c1&N9kTE0GBH 19Q|GBS@19z=
S@<cN$G C2JL<>=@?A 1&SAB=S@<?VI<>14G STD019r0C219DF<cM-/2M ABDF=xC2:ABA(8/2=N$=8<>19Nz19C2S@:0N$GBCUJCU:ABA(<c19N$OPG C2=<>GBM CRh`M(Nw=ABA(Sy<>NGBC2JISkTi
S@<cN$G C2JLQR/2M S@14GBC2D61&5]GBS©19N$MS@Y198GBr19S19GB<>/219NwC2MC2=OP14M Nw=nC2:ABA C2=OP19zD019Y19C2D0GBCUJM CR<c/2148;M C2<c1957<lkTi+CR19OmY<>V
S@<cN$G C2JL<>=@?A 14S@198;<cGBM CRGBSTY01&NOPGB<c<c1&D6GB<>SS@198<>GBM CR/219=D019NS OP19O? 19N Q|M(:0ABDF8;M C2<c=GBCR©19N$Mk\RM C2ec©19N$M
GBC2D0195Z19ST=N14GBC2WX=ABGBDFhcM Nw=CR19OPY<cVLS@<cN$GBC2JL<c=@?AB1Ik sh_size
! " # " &%(')" -*, *
1-16
Symbol Table
i+CRM&? pq198<2rAB19STSyV OL?M A(<>=@? AB14/2M ABD0STG C2hcM N$OP=<cGBM CRC21919D019DF<cMABM(8=<>14=CUDFN$19ABM 8;=<c14=nYNM(JIN=OPSTSyV O? M(ABG 8
D019rCUGB<>GBM C2S=C2DFN19hc19N$19C2819SkTiS@VIO? M(A(<c=@?AB14GBC2D61&5]GBS=nS@:Z? S@8;NGBY<2GBC2<cM-<c/2GBST=NN$=V k^cC2D61&5]ÁT?M <c/RD019S@GBJIC2=<c19S
<c/214rNS@<219C2<cN$VLGBCR<c/214<c=@?AB14=C2DFSy19N$WX19ST=S<>/214:0C2D019rCU1&D{S@VIO?M A(GBC2D0195kT.0/2148M(CU<>19C2<cSM(hU<>/U14GBC2GB<cGB=A(19CU<>NVL=N$1
S@Y198GBr19DFAB=<c19N GBC|<>/2GBSS@198<>GBM Cªk
\R=OP1 «=AB:1
___________________
STN_UNDEF 0
___________________
iS@VIO? M(A <>=@?A 1419C2<>NVL/2=S<>/214h`M(ABA M(Q|GBC2JLhcM N$OP=<lk
typedef struct {
Elf32_Word st_name;
Elf32_Addr st_value;
Elf32_Word st_size;
unsigned char st_info;
unsigned char st_other;
Elf32_Half st_shndx;
} Elf32_Sym;
External C symbols have the same names in C and object files’ symbol tables.
NOTE
! " "B " &%(')" +*, *
1-17
ELF: Executable and Linkable Format
ËxABM&?=A(=C2DFQ|19=HS@VIO? M(ABSD0GBhchc19NwGBCR<>Q|M-OP=@p>M(NwQR=VISk
¿À/219CR<c/214ABGBCUH19D0GB<cM(Nw8;M O? GBC219STSy19WI19N$=A N$19ABM 8;=<c=@?AB14M&? pq198<Xr0AB19S@zGB<2D0M 19STC2M <2=ABABM(Q¦OP:AB<cGBYAB14D019r0C2GB<cGBM(CUS
M h S@VIO? M(ABSTQ|GB<>/R<c/21Sy=OP14C2=OP1IkT-CR<c/214M <>/219Nw/2=C2D0zG h2=nD019r0C219DFJ A Mo?=A S@VIO?M A
1957G STB_GLOBAL
S@<cS@z<c/214=YY19=N$=C2814M(hU=nQR19=HLS@VIO?M A(QRGB<c/R<c/214S@=OP14CU=OP14QRGBABA(CUM(<28;=:0S@14=CR19N$NM N&kT.0/214ABGBC2HL19D0GBe
<cM(Nw/2M C2M N$S<c/214JIABMo? =A(D019r0C2GB<cGBM(C|=C2D{GBJ CUM(N19ST<c/21vQR19=HLM(CU19SkaZGBOmGBAB=N$ABVIzGBh2=n8;M OPOPM CRS@VIO? M(A(195ZGBS@<cS
fcGk 1Ik z=nS@VIO?M A(QR/2M S@14S@< S@/UC2D05xr019ABDF/2M(A D0S gcz<c/214=YY19=N$=CU8;14M(hU=nQR19=HSyV OL?M A(QRGB<c/
<c/214S@=OP14C2=Om14QRGBABA(CUM(<2_8;=:Sy14=CR19N$NM(N9kT.0/2SHN_COMMON 14ABG C2HL19D0GB<>M Nw/2M C2M(NS<>/21v8;M OPOPM CRD61&r0C2GB<cGBM CR=C2D{GBJ CUM(N19S
<c/214QR19=HLM C219Sk
¿À/219CR<c/214ABGBCUH19D0GB<cM N S@19=N8;/219S=N$8/2GBWX14ABG ?N=N$GB19S@zG <X195Z<>N=8;<cST=N8;/2G WI14OP19O? 19N$S<>/2=<28M(C2<c=GBCRD019r0C2GB<cGBM(CUS
M h2:C2D019r0C219DFJ ABM&?=A(SyV OL?M ABSkT.0/214OP19OL?19N$SD019rC2G <>GBM CROm=V? 1419GB<>/U1&Nw=nJIABM&?=A(M N =xQR19=HLS@VIO?M Ak
.0/21vABGBC2HL19D0GB<cM(NwD0M 19ST¯I;21957<cN=8;<2=N$8/2GBWI14Om1&OL?19N$S<cM-N19S@M ABWI14:CUD019rC219DFQ|19=HSyV OL?M(A SkT[+C2N1&SyM(ABWX19D
QR19=HLS@VIO?M ABST/2=WX14=v©19NM-WX=AB:1Ik
^`CR19=8;/RS@VIO?M A(<>=@? AB19z=A ASyV OL?M ABSTQRGB<c/ ?GBCUD0GBC2JY0N$198;19D014<c/214QR19=HL=C2DFJ ABM&?=A(SyV OL?M ABSkTi+S
aZ198;<cGBM C2S@=@?M WI14D019S@8N$G ? 19S@z=nS@VIO?M A(<>=@STB_LOCAL
? AB14S@198;<cGBM C2S S@198<>GBM CR/219=D019NwOP19O?19Nw/2M ABD0ST<c/214S@VIO?M A
<c=@?AB14GBC2D61&5]h`M(Nw<>/U14rNS@<2C2M C2ecABM 8;=A S@VIO?M Ak sh_info
! " # " &%(')" -*, *
1-18
ELF: Executable and Linkable Format
! " #$ " &%(')" +*, *
1-19
ELF: Executable and Linkable Format
Symbol Values
aV O? M(A <>=@? AB1419C2<cN$GB19ShcM NwD0GBhch`19N$19C2<2M&? pq198<2rAB1v<>VIY19S/2=WI14SyABGBJI/2<>A VLD0GBhchc19N19C2<2GBC2<c19N$YN19<>=<cGBM C2ShcM(Nw<c/21
OP19O? 19N&k
st_value
^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=ABGBJIC2Om1&CU<X8M(C2Sy<>N=GBC2<cSThcM N =nSyV O? M(A(Q|/2M S@14S@198;<cGBM CRGBC2D0195]GBS
k st_value
SHN_COMMON
^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=nSy198;<cGBM(C|M(hch`S@19<2hcM N =nD019r0C219DFS@VIO?M AkT.0/2=<2GBS@z GBST=C
M hchcSy1&<2h`N$M Od<c/21w?19JIGBst_value
C2C2GBCUJM h2<c/214Sy198;<cGBM(C|<>/2=< GBD019C2<cGBr19S7k st_value
st_shndx
^`CR1957198:<c=@?AB14=C2DFS@/U=N$19DFM&? pq198<Xr0AB19S@z /2M ABD0ST=nWIGBN<c:=A(=D0D0N$19SySkT.0MOP=HI14<>/U1&Sy14rAB19SyZSyV Ome
?M ABSOPM(N14:Sy19hc:A(h`M(Nw<>/U14D0V CU=OPGB8)ABGBC2HIst_value 1&Nz<c/214S@198<>GBM CRM hchcSy19<Xf`rAB14GBCU<>19NYN$19<c=<>GBM C2gUJ GBWX19STQ|=V<cM=nWIGBN<c:=A
=D0D0N19S@SfcOP19OPM N$VLGBC2<c19N$Y0N$19<c=<>GBM C2g2h`M(NwQR/UGB8;/R<c/214Sy1&8<>G M(CRCU:O? 1&NwGBSGBN$N19AB19WI=C2<lk
i+AB<>/UM(:0J /R<c/214S@VIO? M(A(<c=@?AB14WI=A :19ST/2=WX14S@GBOPG AB=N OP19=C2G C2J ShcM N D0GBhch`19N$19C2<2Mo?Ipq198;<2rA 1&Syz<>/U1D0=<c=n=ABABM Q·19hcr08;GB19C2<
=8;819S@S?VL<c/214=YYNM(Y0N$GB=<c14YNM(JIN$=OmSk
! " # " &%(')" -*, *
1-20
Relocation
ºT19ABM(8=<>GBM CRGBS<>/214YNM(819S@STM h28;M C2C2198<>GBCUJS@VIO? M(ABGB8)N$19hc19N19C28;19STQ|GB<c/RS@VIO?M ABGB8¥D019r0C2GB<cGBM(CUSkKIM N 1957=OmYAB19zQ|/219C
=nYNM(JIN$=O§8;=ABA ST=nh`:C28;<cGBM C2z<c/214=S@SyM(8GB=<c1&D{8;=ABA(G C2S@<cN$:08;<cGBM(C|OP:Sy<X<cN$=CUS@hc19Nw8;M C2<cN$M A(<cM-<c/214YNM Y19N D019Sy<>GBC2=<cGBM C
=D0D0N19S@S=<X195Z198;:0<>GBM CªkT^`CRM <>/U1&NwQRM ND0S@zN19ABM(8=<>=@? AB14rAB19SOP:Sy<X/U=WI14GBC2h`M(NOP=<cGBM(C|<>/U=<XD019Sy8;NG ?19ST/UM(Q¦<>M
OPM D0GBhcVL<c/219GBN Sy198;<cGBM(C|8;M C2<c1&CU<>Syz<>/U:ST=ABA M(Q|GBC2JL1&5Z198;:0<>=@? AB14=C2DFS@/U=N$19DFM&? pq198<Xr0AB19ST<cM/2M ABDF<>/U14N$GBJI/2<2GBC2hcM N$Om=e
<cGBM(C|hcM Nw=nYNM(819S@S@SYNM(JIN$=O§GBOP=JI1IkTÔT$c®;¯¬$¯ `®$ =N14<>/U19S@14D0=<c=2k
typedef struct {
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;
typedef struct {
Elf32_Addr r_offset;
Elf32_Word r_info;
Elf32_Sword r_addend;
} Elf32_Rela;
! " #$ " &%(')" +*, *
1-21
ELF: Executable and Linkable Format
iN$19ABM 8;=<cGBM CRSy1&8<>G M(CRN19hc19N1&CU8;19S<>Q|M-M <>/U19N Sy198;<cGBM(C2S7}@=nSyV O? M(A <>=@? AB14=C2DF=nSy198;<cGBM(C|<>MOPM D0GBhcV kT.0/214S@198<>GBM C
/219=D019NS =C2D OP19O? 19N$SyzD019Sy8;NG ?19DFGBCRa198;<cGBM C2S@Z=@? M(WX19zS@Y198;GBh`V<c/219S@14N$19AB=<cGBM C2S@/2G YSk
ºT19ABM(8=<>GBM sh_info
C|19C2<>NGB19ShcM N D6GBsh_link
hchc19N19C2<2Mo?Ipq198;<2r0AB19S/2=WI1vS@ABGBJI/2<cABVLD0GBhchc19N19C2<2GBC2<c19N$YN19<>=<cGBM C2ShcM(Nw<c/21
OP19O? 19N&k r_offset
^`CRN19ABM(8=<>=@? AB14r0AB19S@z /2M ABD0ST=nS@198<>GBM CRM hchcSy1&<lkT.0/2=<2GBS@z<c/214N$19ABM 8;=<cGBM CRS@198;<cGBM CRGB<>Sy19ABh2D019S@8N$G ? 19S
/2M Q·<cMOPM D0GBhcVL=C2M <>r_offset /U19N Sy198;<cGBM(C|GBCR<c/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 Cªk
^`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
=OmGB8¥ABGBCUH 19Nz<>/U14S@198;<cGBM CRM hchcSy19<Xf`rAB14G C2<>19NYN$19<c=<>G M(C2gUJ G WI19SQR=VL<>M
=nWXGBN<>:=A =D0D0N19S@SfcOP19OmM(NVLGBC2<c19N$YN19<>=<cGBM C2glk
Relocation Types
ºT19ABM(8=<>GBM CR19C2<cNGB19STD019S@8N$G ? 14/2M Q·<cM-=AB<c19N <c/214h`M(ABABM QRGBCUJGBCUS@<cN$:8<>G M(CR=CUDFD0=<>=xr19ABD0Sfu?GB<2C2:0O?19NST=YY19=NwGBC
<c/214ABM QR19NX? M(5]8M(NC219N$Syglk
Õ Ö×
ÈÆ Å
È Ç Æ Å
0x01020304 ÈÆ 01 02 03 04 Å
! " # " &%(')" -*, *
1-22
ELF: Executable and Linkable Format
! " #$ " &%(')" +*, *
1-23
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
1-24
2 PROGRAM LOADING AND DYNAMIC LINKING
Introduction 2-1
! " #$ " &%(')" +*, *
i
Introduction
~=N<2tnD019S@8N$G ? 1&S<c/214Mo?Ipq198;<2r0AB14GBC2hcM NOP=<>G M(CR=CUDFS@VIS@<c19Od=8<>GBM C2S<>/U=<X8N$19=<c14N$:0C2C2GBC2JLYNM(JIN$=OmSkaZM OP14GBC2h`M(Ne
OP=<cGBM CR/219N$14=Y0YABGB19ST<cM=ABA(S@VIS@<c19OPS@M <c/219N GBCUhcM N$OP=<cGBM CRGBSYN$M 8;19S@SyM(NecSyY198;GBr08Zk
305Z198;:<c=@?AB14=CUDFS@/2=N19DFM&? pq198<2rAB19SS@<c=<>GB8=ABABVLN$19YN19S@19C2<2YNM(JIN$=OmSkT.0M195Z1&8:<c14S@:8/RYNM(JIN$=OmS@z<c/214S@VIS@<c19O
:Sy19ST<c/214r0AB19S<>M8;N19=<>1vD0V CU=OPGB8)YN$M J N=O§N$19YN1&Sy19C2<>=<cGBM C2S@z7M(NwYNM(819S@SGBOP=JI19SkTiYN$M 8;19SySTGBOP=JI1/U=STS@19JIe
OP19C2<cS<>/2=<2/2M ABDFGB<cS<>195Z<>zD6=<>=zSy<>=8H z7=C2DFS@MM CªkT.0/214OP=@pqM N Sy198;<cGBM(C2SGBCR<>/2G STY=N$<2D0GBS@8:S@S<>/214hcM ABABM QRGBC2J k
Û0$µ2$ ¶ $;$$Ün.0/2G STS@198<>GBM CR8M(OmYAB19OP19C2<cST~0=N$<2zD019S@8N$G ?G C2JM&? p>198;<2rAB14Sy<>N:8;<c:N19ST<c/2=<2N$19AB=<c14D0GBN$198<>ABV
<cMLYN$M J N=O§195Z198;:0<>GBM CªkT.0/214YNGBOP=NVLD0=<>=xS@<cN$:08;<c:N$19z7=nYNM(JIN$=O§/219=D019Nw<>=@? AB19zABM 8;=<c19STSy19J Om19C2<2GBOP=JI19S
QRGB<c/2GBC|<c/214rA 14=C2DF8M(CU<>=GBCUSTM <>/U19N GBCUhcM N$OP=<cGBM CRC219819S@S@=NVL<>M8N$19=<c14<c/214OP19OPM NVLGBOP=JI14hcM N <c/214Y0N$M e
JIN$=Ok
Û0$µ2$ ¶ ;®¯9µ2ÜnËxGBWX19CR=C|Mo?Ipq198;<2r0AB19z<>/U14S@VIS@<c19OdOP:0S@<2ABM =DFGB<2GBC2<cMOP19OPM N$VLhcM Nw<>/U14YN$M JIN$=O§<>MN$:0Cªk
Ý+Þ¯ ¶ ®®¯ ß®¯9µ2Üni+hc<c19N <c/214SyV Sy<>19O§ABM(=D0S<>/U14YN$M JIN$=OPz7GB<XOm:S@<28M(OPY0AB19<>14<c/214YNM(819S@SGBOP=JI1w?VLN$19S@M ABWXe
GBC2JLS@VIO? M(ABGB8)N$19hc19N19C28;19S=OPM C2J<c/214M&? pq198<Xr0AB19ST<c/2=<28;M OPYM S@14<c/214YN$M 8;19SySk
There are naming conventions for ELF constants that have specified processor ranges. Names such as
NOTE DT_, PT_, for processor-specific extensions, incorporate the name of the processor:
DT_M32_SPECIAL, for example. Pre–existing processor extensions not using this convention will be
supported.
~N19ec195ZGBS@<cGBC2JL305Z<>19C2SyGBM(CUS
_____________________
DT_JMP_REL
! " #B" 7o%]')" +*, *
2-1
Program Header
i+CR195Z198;:<c=@?AB14M NwS@/2=N19DFMo?Ipq198;<2r0AB19SYNM(JIN$=O§/219=D019N <c=@?AB14G ST=CR=NN$=VLM h2Sy<>N:8;<c:N19S@z19=8/RD019S@8N$G ? GBC2JL=nS@19JIe
OP19C2<UM(NwM <>/U19NwGBC2hcM N$Om=<>GBM C|<>/21vS@VIS@<c19O§C21919D0S<>MY0N$19Y=N14<c/214YNM(JIN=Odh`M(Nw195Z198;:<cGBM CªkTi+CRM&? pq198<Xr0AB14$qµ ¶ ¯I
8;M C2<c=GBC2SM C214M NwOPM N$14$$`®;¯I&z=Sa19J Om1&CU<X¢M C2<c19C2<>SyD019S@8;NG ?19S?19ABM QÄk~NM J N=Od/219=D019N$S=N$14OP19=C2G C2J h`:A
M C2ABVLhcM(Nw195Z198;:<c=@?AB14=C2D{S@/2=N19DFMo?Ipq198;<2r0AB19SkTir0AB14S@Y198GBr19SGB<>SM(Q|CRYNM(JIN$=O§/219=D019N SyGB©14QRGB<c/R<c/21430E0K
/219=D019NS =C2D OP19O? 19N$SxuS@191430E0KLÉR19=D019N$GBCR~0=N$<2¤lk
e_phentsize e_phnum
typedef struct {
Elf32_Word p_type;
Elf32_Off p_offset;
Elf32_Addr p_vaddr;
Elf32_Addr p_paddr;
Elf32_Word p_filesz;
Elf32_Word p_memsz;
Elf32_Word p_flags;
Elf32_Word p_align;
} Elf32_Phdr;
! " # " &%(')" -*, *
2-2
ELF: Executable and Linkable Format
! " #B" 7o%]')" +*, *
2-3
ELF: Executable and Linkable Format
Unless specifically required elsewhere, all program header segment types are optional. That is, a file’s
NOTE program header table may contain only those elements relevant to its contents.
Base Address
305Z198;:<c=@?AB14=C2DFS@/U=N$19DFM&? pq198<XrA 1&S/2=WI14=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@GB©19z=CUDF<>/214A M(Q|1&Sy<XWXGBN<>:=A =D0D0N$19SySTM h2=nYNM(JIN$=OmSABM =D0=@?AB1
S@19JIOP19C2<lkTi+S~NM(JIN$=OàE0M(=D6GBC2J
GBCR<c/2GBS8;/2=Y<c19N D61&Sy8;NG ?19S@z7<>/214WXGBN$<c:=A(=D6D0N$19S@Sy19STGBC|<>/214YNM J N=Od/219=D019NSTOPGBJI/2<2C2M <XN19YN$19Sy19C2<X<c/214=8<>:=A WIGBNe
<c:=A(=D0D0N19S@Sy19STM hU<>/21vYN$M J N=OPSOP19OPM N$VLGBOP=JI1IkT.0M8;M OPY:0<>14<c/21w?=Sy1=D0D6N$19S@SyzM(CU1D61&<c19N$OmGBC219ST<c/21
OP19OPM NV=D0D0N19S@S=S@S@M 8;GB=<c19DFQRG <>/R<c/214ABM QR19S@< WX=AB:14hcM N = S@19JIOP19C2<lkT-C214<c/219CRMo? <>=GBCUS
<c/21w?=S@14=D6D0N$19S@S?VL<cN$:C28=<>G C2J<c/214Om1&OmM(NVL=p_vaddr D0D0N$19SyST<cM-<c/214C219=N19S@<2PT_LOAD
OP:AB<cGBYAB14M h2<c/214OP=5ZGBOP:0OdY=JI14S@GB©1Ik
]19Y19C2D6GBC2JLM(C|<>/U14H GBCUDFM h2r0AB1w?19GBC2JLABM =D019DFGBCU<>MOP19OPM NV z<c/214Om19OPM(NVL=D0D0N$19SySTOmGBJ /U<XM NwOPGBJI/2<2C2M <2OP=<>8/
<c/21 WX=AB:19Sk
p_vaddr
i+STaZ198<>GBM C2SyGBC|~=N$<2nD019Sy8;NG ?19S@z<c/21 S@198<>GBM CR/2=S<c/214<>VIY1 ki]A <>/2M :JI/RGB<XM 8;8:YGB19STC2M
S@Y=814GBC|<>/214r0AB19zGB<28;M C2<cN$G ? :<c1&S<cM<>/214Sy19.bss J Om1&CU<>SOP19OPM N$VLGBOP=JI1IkSHT_NOBITS \RM(NOP=ABABVIz<>/U19S@14:C2GBCUGB<>GB=ABG ©1&DFD6=<>=nN1&SyGBD01
=<2<c/21419C2DFM hU<>/21vS@19JIOP19C2<cz<>/U19N$1?VLOP=HIGBC2J AB=NJ 19Nª<c/2=C GBC|<>/21v=S@S@M 8;G =<>19DFY0N$M J N=O
/219=D019Nw19AB19OP19C2<lk p_memsz p_filesz
Note Section
aM(OP19<cGBOP19S=nWI19CUD0M(NwM N SyV Sy<>19OÊ?:GBABD61&NwC21919D0S<>MOP=NHL=CRM&? pq198<2rAB14Q|GB<>/|S@Y198GB=A(GBC2h`M(NOP=<cGBM(C|<>/2=<2M <>/U1&N
YNM(JIN$=OmSTQRG ABA(8;/2198Hh`M(Nw8;M C2hcM N$Om=C28;19z8M(OPY0=<>G ? GBABGB<>VIz19<c8ZkTa198;<cGBM(CUSTM hU<>VIY1 =C2D{Y0N$M J N=O
/219=D019Nw19AB19OP19C2<cSM(hU<>VIY1 8;=Cn? 1:0S@19DFhcM N <c/2GBSTY:0N$YM S@1IkT.0/214C2M <>14SHT_NOTE
GBCUhcM N$OP=<cGBM CRGBCRSy1&8<>GBM C2S=C2D
YNM(JIN$=O§/219=D019N 19AB19OP19CU<>PT_NOTE
S/2M(A D0ST=C2VLC2:OL?19N M h219C2<cNGB19S@z19=8;/|M(h2Q|/2GB8/RGBST=C|=N$N=VM h eu? V <c14QRM N$D6STGBCR<c/21
hcM N$Om=<2M hU<c/21v<>=NJ 19<UYN$M 8;19S@SyM(N9kªE0=@? 1&A ST=YY01&=NX? 1&A M(Q¦<cM-/U19ABY½195ZYAB=GBCRCUM(<c14GBC2h`M(NOP=<cGBM(»C|M N$JI=C2GB©=<cGBM(C2zy?:<
<c/219VL=N$1vC2M(<UY=N$<2M hU<>/21vS@Y198GBr8;=<cGBM Cªk
! " # " &%(')" -*, *
2-4
ELF: Executable and Linkable Format
=C2D
namesz
. name
0 /21vr0N$S@< ?VI<>19SGBC 8;M C2<c=GBCR=xC2:ABA ec<>19NOPGBC2=<c19DF8/2=N$=8<>19NwN19YN$19S@19CU<>=<cGBM(C|M h2<c/21
19C2<cN$VIS¥M(QR CU19NªM(NªM N$GBJIGBC2=<cM name
namesz
N&kT.6/219N$14GBSTC2M-h`M(NOP=A(OP198/2=C2GBS@Odh`M(Nw=WIM GBD0GBC2JCU=OP148;M C2¨0GB8;<cSkTj0V
8;M C2WX19C2<>GBM C2zWX19C2D0M N$ST:0S@14<c/219GBN M QRC|C2=OP19zS@:08;/R=S_TØ ¢M OPY:0<>19Nw)M OPY=CUV zu=ST<c/21
GBD019C2<cGBr19N9k^`h2C2MC2=OP14GBSTY0N$19S@19C2<cz 8;M C2<c=GBC2STÁ2kT~Ó =D0D0GBC2JLGBSYN$19S@19C2<czGBh2CU198;19S@Sy=N$VIz<>M
19C2S@:0N$1 eu?VI<>1v=ABGBJ CUOP19C2<2hcM Nw<>/U14D019S@8N$GBY<cM(N9kTaZ:8/RY=D0D0GBC2JLGBSTC2M <XGBC28AB:D019DFGBC
namesz
k
» namesz
=C2D
descsz
. desc
0 /21vr0N$S@< ?VI<>19SGBC /2M ABD{<>/21vC2M <>1vD019S@8N$GBY<cM(N9kT.0/214i+j0^UYAB=8;19STCUM-8M(C2Sy<>N=GBC2<cSTM CR=
D019S@8N$GBY<cM descsz
N$S8M(C2<c19C2<cSkT^`h2C2M D019Sy8;NGBY<>M NwGBSTYN19S@19C2<cz
desc
8;M C2<c=GBC2STÁ2kT~=D0D0GBC2JLGBSTYN19S@19C2<czGBh
C2198;19SyS@=NV z7<>M19CUS@:N1 eu? V <c14=ABGBJIC2Om1&CU<2hcM Nw<>/21vC21957<2descsz CUM(<c1419C2<cN$V kTaZ:8/RY=D0D0GBC2JLGBSTC2M <XGBC28AB:D019D
GBC k »
descsz
.0/2G STQ|M(NDFJIGBWX1&S<c/214GBCU<>19NYN$19<c=<>GBM CRM hU<>/U14D019S@8N$GBY<cM(N9kª30=8/|M(NGBJ GBCU=<>M Nw8;M C2<cN$M ABSGB<cSM(Q|CR<cVIY19S@
type
OP:0AB<>GBYA 14GBC2<c1&NYN1&<c=<cGBM(CUSTM h2=nSyGBC2JIAB14<cV Y14WX=AB:14Om=V195ZGBS@<lkª.0/2:0S@z=xYN$M JIN$=O§OP:Sy<2N$198M(JIC2GB©1
?M <>/|<c/214C2=Om14=C2DF<c/21v<>VIY14<cM:0C2D019N$Sy<>=C2D6=xD019S@8N$GBY<cM(N9kT.0VIY19ST8;:0N$N19C2<>ABVLOP:0S@<?14C2M C2e
C219JI=<>GBWX1IkT.0/214i+j0^UD0M 19STC2M <2D019rC214Q|/2=<2D019S@8N$GBY<cM N$SOP19=Cªk
The system reserves note information with no name (namesz= =0) and with a zero-length name
NOTE (name[0]= =’\0’) but currently defines no types. All other names must have at least one non-null
character.
! " #B" 7o%]')" +*, *
2-5
ELF: Executable and Linkable Format
Note information is optional. The presence of note information does not affect a program’s ABI confor-
NOTE mance, provided the information does not affect the program’s execution behavior. Otherwise, the pro-
gram does not conform to the ABI and has undefined behavior.
! " # " &%(')" -*, *
2-6
Program Loading
i+ST<c/214SyV Sy<>19Od8N$19=<c19STM N =:0J Om19C2<>S=nYNM(81&SySTGBOm=J 19zG <XABM JIGB8;=ABABVL8;M YGB19S=nrAB19STSy19J Om19C2<X<cM=nWIGBN<c:=A
OP19OPM NVLSy1&JIOP19C2<lkª¿À/U19C2çÀ=C2DFGBhcçÀ<c/214SyV Sy<>19OdY0/2V SyGB8;=ABABVLN19=D0ST<c/214rAB14D019Y19CUD0STM CR<c/214YN$M JIN$=OPS1&5Z198;:0e
<cGBM(Cx?19/2=WXGBM(NzS@VIS@<c19OdABM =D0z19<c8ZkTiYNM(819S@STD0M 19STCUM(<2N$19I:G N$14=nY/2VIS@GB8=A(Y=JI1:0C2AB19S@SGB<XN19hc19N1&CU8;19ST<c/214ABM J GB8=A
Y=JI14D0:N$G C2J195Z198;:<cGBM C2z=C2DFYNM(819S@S@19S8;M OPOPM C2ABVLAB19=WI14OP=C2VLY=JI19ST:C2N19hc19N1&CU8;19D¥k.0/219N19hcM N$14D61&A =V GBC2J
Y/2VIS@GB8=A(N$19=D0ShcN$19I:019C2<>ABVLM&?WIGB=<c19ST<c/219OPzGBOmYN$M WIGBCUJSyV Sy<>19OdY19NhcM N$Om=C28;1IkT.0MMo? <>=GBCR<c/2GBS1&h`r8GB19C28;VLGBC
YN=8;<cGB8;19z1957198:<>=@? AB14=C2DFS@/2=N19DFMo?Ipq198;<2rAB19STOm:S@<2/2=WI14Sy1&JIOP19C2<2GBOP=JI19STQR/UM(Sy1r0AB14M(hch`S@19<cST=C2DFWIG N$<c:=A
=D0D0N19S@S@19S=N$148M(CUJ N:19C2<czOPM D0:ABM<c/214Y=JI14S@GB©1Ik
«GBN<>:0=A(=D0D0N19S@S@19S=C2DFr0AB14M hchcSy19<>ShcM N <c/214aØTaZ.030¡è«Ú=N$8/2GB<>198<>:0N$14Sy19J OP19CU<>S=N$148M(CUJ N:19C2<2OPM D0:ABM j
f gUM(NwAB=NJ 19NwYM QR19NSM(hUt2kªj0198;=:0S@1 jFG ST<>/U1Om=57GBOm:OdY=JI14S@GB©19z<c/214rAB19STQ|GBABAo?14Sy:GB<c=@?AB14»nhcM é N Y=JIe
GBC20x1000 JLN$19JI=N$D0A 1&SySTM h2Y/2VIS@G 8;=A(Y=JI14S@GB©1Ik »né
! " #B" 7o%]')" +*, *
2-7
ELF: Executable and Linkable Format
! " # " &%(')" -*, *
2-8
ELF: Executable and Linkable Format
! " #B" 7o%]')" +*, *
2-9
Dynamic Linking
Program Interpreter
i+CR195Z1&8:<c=@?AB14r0AB14OP=VL/2=WI14M C21 YNM(JIN$=Oà/219=D019Nw19AB19OP19C2<lkT]:0N$GBC2J fcj0i -aZgcz7<>/214SyV Sye
<c1&O§N1&<cN$G 1&WX19ST=xY=<>/|C2=OP14h`N$M Od<c/2PT_INTERP 1 NM(819S@SGBOP_=JI14hcN$M Od<c/21
S@19JIOP19C2<2=C2DF8N$19=<c19ST<c/214GBC2GB<cGB=A(Yexec
GBC2<c19N$YN19<>19NªrA 1&S¥S@19JIOP19C2<cSkT.0/2=<2GBS@zG PT_INTERP C2S@<c19=DFM(hU:S@GBCUJ<c/214M(NGBJIGBC2=A(1957198:<c=@?AB14rAB19SS@19J Om19C2<XGBOm=J 19Syz<>/214SyV Sye
<c1&O§8M(OmYM(Sy19ST=xOP19OPM NVLGBOP=JI14hcM Nw<c/214GBC2<c19N$Y0N$19<c1&N9k^c<2<c/219C|GBST<c/21vGBC2<>19NYN$19<c19N$SN$19SyYM(CUS@G ?GBA GB<>VL<cMN$1981&G WI1
8;M C2<cN$M A(h`N$M Od<c/214SyV Sy<>19O§=C2DFYNM WIGBD014=C|19C2WIG N$M C2OP19C2<2hcM Nw<>/U14=YYABGB8=<>GBM CRYNM J N=Ok
.0/21vGBC2<c1&NYN1&<c19NwN$1981&G WI19S8;M C2<>NM A(GBC|M(C21vM(hU<>Q|MQR=VISkK GBNS@<czGB<2Om=VLN$198;19GBWX14=nr0AB14D019Sy8;NGBY<>M Nw<>MN19=DF<c/214195Z19e
8;:0<>=@? AB14rAB19zYM S@G <>GBM C219DF=<2<c/21w?19JIGBC2C2GBC2J k^c<28=CR:Sy14<>/UGBSTr0AB14D019S@8N$GBY<cM N <cMN$19=DF=CUD¥îZM NwOP=Y½<c/2141957198:<c=@?AB1
r0AB1&SSy1&JIOP19C2<cSGBC2<cMOP19OPM N$V kTa198;M C2D0zD019Y19C2D0G C2JLM(C|<>/214195Z198;:0<>=@?A 14rAB14h`M(NOP=<cz<>/U14S@VIS@<c19OdOP=VLABM =DF<c/21
1957198:<c=@?AB14r0AB14GBCU<>MOm19OPM(NVLGBC2Sy<>19=D{M(hUJIGBWIGBCUJL<>/21vGBC2<c19N$YN19<>19Nw=C|M(Y19C|rAB1vD019S@8N$GBY<cM(N9kT¿ÀGB<c/R<>/214YM S@SyG ?AB1
1957819Y<>G M(C|M(hU<c/214rA 14D019S@8N$GBY<cM(Nz<c/214GBCU<>19NYN$19<c19N$SGBC2GB<cGB=A(YNM(819S@SS@<c=<>1vOP=<>8/219SQR/2=<2<c/214195Z198;:<c=@?AB1vrAB1
QRM :ABDF/2=WX1N$1981&G WI19D¥kT.0/21vGBC2<c1&NYN1&<c19NwGB<cS@19ABhUOP=V¬C2M(<UN$19I:GBN14=xS@198M(C2D{GBCU<>19NYN$19<c1&N9kTi+C|GBC2<c1&NYN1&<c19NwOP=Vv?1
19GB<c/219N =xS@/2=N19DFM&? pq198<XM Nw=CR195Z198;:<c=@?AB14r0AB1Ik
iS@/2=N19DFMo?Ipq198;<2fc<c/214C2M(NOP=A(8=S@19g2GBSTA M(=D019DF=STY0M(SyGB<>GBM C2ecG C2D019Y19C2D019C2<czQRGB<c/R=D0D0N$19SyS@19ST<c/2=<2OP=VWX=N$V
hcNM(O§M(CU14YN$M 8;19S@S<cM-=C2M <c/219N$<c/214SyV Sy<>19Od8N$19=<c19STGB<cSTSy19J Om19C2<>SGBCR<c/214D0VIC2=OPGB8)S@19JIOP19C2<2=N$19=n:0S@19D+?V
f 3 -aZgU=C2DFN19AB=<>19D{S@19N$WXGB8;19S7k@¢M(CUS@19I:19C2<cABVIz=nS@/U=N$19DFM&? p>198;<2GBC2<c19N$YN19<>19Nw<>VIYGB8=ABABVLQRGBABA C2M(<
8;mmap M C2¨0GB8;é <2Q|_GB<>/|<>/21vM(NGBJ GBCU=A(1957198:<c=@?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=@?AB1IkT¢M C2S@19I:019C2<>ABVIz=C|195Z1&8:<c=@?AB1vrAB14G C2<>19NYN$19<c19N$SWIG N$<c:=A
=D0D0N19S@S@19SOP=VL8;M ABABGBD01vQRGB<c/R<c/214rNS@<2195Z198;:<c=@?AB14r0AB19<c/214GBC2<c19N$YN19<>19NwGBSN$19SyYM(C2SyG ?AB14h`M(NwN1&SyM(A WIGBC2J
8;M C2¨0GB8;<cSk
Dynamic Linker
¿À/219Cn? :GBABD0GBCUJ=CR195Z198;:0<>=@?A 1r0AB14<c/2=<X:0S@19SD0V C2=OmGB8¥ABGBCUH GBCUJ z<c/214ABGBC2HL19D0GB<cM(Nw=D0D0ST=xYN$M J N=Od/219=D019Nw19AB19e
OP19C2<2M hU<>VIY1 <cM-=C|1957198:<c=@?AB14r0AB19z<>19ABABG C2JL<>/21vS@VIS@<c1&O§<cM-GBCUWIM H 14<c/214D6V C2=OmGB8¥ABG C2H 19Nw=S<>/21vYN$M e
JIN$=OïGBCU<>19NYN$19PT_INTERP
<c19N&k
! " # " &%(')" -*, *
2-10
ELF: Executable and Linkable Format
LD_BIND_NOW=1
LD_BIND_NOW=on
LD_BIND_NOW=off
<>/219NQRGBSy19z
- 19GB<c/219N D0M 19STC2M <2M(88;:NwGBCR<c/21419C2WIGBNM C2OP19C2<2M(Nw/2=ST=nCU:ABA(WX=AB:1IkT.0/21D0VIC2=OPG 8
ABGBC2HI19NwGBSTY19NLD_BIND_NOW
OPGB<c<>19D{<>M19WI=AB:0=<>14Y0N$M 8;19D0:N14ABGBC2HI=JI14<>=@? AB1419C2<>NGB19SAB=©GBABV z7<>/2:0ST=WXM(G D0GBC2JLS@VIO?M A(N19S@M AB:<cGBM(C|=C2D
N1&ABM 8;=<cGBM CRM WI19N/219=DFh`M(Nwhc:0C28;<cGBM(CUST<c/2=<2=N14C2M <X8=ABAB19D¥kaZ1914~NM(819D0:N14E0GBC2HI=J 1v.0=@?AB19GBC|<>/UGBSTY0=N$<2hcM NwOPM N$1
GBC2h`M(NOP=<cGBM(Cªk
Dynamic Section
^`h2=CRM&? p>1&8<2rAB14Y=N<>GB8GBY=<c1&SGBCRD0VIC2=OPG 8¥ABGBC2HIGBC2JIzGB<cSTYNM(JIN$=O§/219=D019N <c=@?AB14Q|GBABA(/2=WX14=CR19AB19OP19C2<2M(hU<>VIY1
kª.0/UGBSTS@19JIOP19C2<c8;M C2<>=GBCUST<c/21 S@198<>GBM CªkTiðSyY198;GB=A(S@VIO?M ABz zAB=@?19ABST<c/21
S@PT_DYNAMIC
198<>GBM C2zQ|/2GB8;/R8M(CU<>=GBCUST=CR=NN$=VLM(h2<c/214hcM ABABM QR.dynamic
GBCUJSy<>N:8;<c:N19Sk _DYNAMIC
! " " B" 7o%]')" +*, *
2-11
ELF: Executable and Linkable Format
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
! " # " &%(')" -*, *
2-12
ELF: Executable and Linkable Format
! " #B" 7o%]')" +*, *
2-13
ELF: Executable and Linkable Format
<c/2N$M :JI/
DT_LOPROC
«=AB:0DT_HIPROC
1&SGBCR<>/2GBSGBC28;AB:0S@GBWX1N=C2J 14=N1N19S@19N$WX19D½h`M(NwYN$M 8;19S@SyM(NecSyY198;GBr08¥S@19OP=CU<>GB8Sk
! " # " &%(')" -*, *
2-14
ELF: Executable and Linkable Format
Even when a shared object is referenced multiple times in the dependency list, the dynamic linker will
NOTE connect the object only once to the process.
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:;
! " #B" 7o%]')" +*, *
2-15
ELF: Executable and Linkable Format
For security, the dynamic linker ignores environmental search specifications (such as
NOTE LD_LIBRARY_PATH) for set-user and set-group ID programs. It does, however, search DT_RPATH
directories and /usr/lib.
! " # " &%(')" -*, *
2-16
ELF: Executable and Linkable Format
µ2;
.PLT0:pushl
µ2;_ _ ñ
jmp * _ _ò
nop; nop
nop; nop
¯I $æ ®¯
* ¶
.PLT1:jmp
¸¸;$$ _ _óô+ì
pushl $
¯I $@PC × ®¯
* ¶
.PLT2:jmp
¸¸;$$ _ _óô+ì
push $
jmp .PLT0@PC
...
! " #B" 7o%]')" +*, *
2-17
ELF: Executable and Linkable Format
.PLT0:pushl 4(%ebx)
jmp *8(%ebx)
nop; nop
nop; nop
.PLT1:jmp
¸¸;$$
*name1@GOT(%ebx)
pushl $
jmp .PLT0@PC
.PLT2:jmp
¸¸;$$
*name2@GOT(%ebx)
pushl $
jmp .PLT0@PC
...
As the figures show, the procedure linkage table instructions use different operand addressing modes
NOTE for absolute code and for position-independent code. Nonetheless, their interfaces to the dynamic linker
are the same.
! " # " &%(')" -*, *
2-18
ELF: Executable and Linkable Format
Lazy binding generally improves overall application performance, because unused symbols do not incur
NOTE the dynamic linking overhead. Nevertheless, two situations make lazy binding undesirable for some
applications. First, the initial reference to a shared object function takes longer than subsequent calls,
because the dynamic linker intercepts the call to resolve the symbol. Some applications cannot tolerate
this unpredictability. Second, if an error occurs and the dynamic linker cannot resolve the symbol, the
dynamic linker will terminate the program. Under lazy binding, this might occur at arbitrary times. Once
again, some applications cannot tolerate this unpredictability. By turning off lazy binding, the dynamic
linker forces the failure to occur during process initialization, before the application receives control.
Hash Table
i/2=S@/R<c=@?AB14M h M&? pq198<>STS@:0YYM $N <cSªSyV OL?M A<c=@?AB14=8;8;19SySkªE0=@? 19ABST=YY19=NX?19ABM Q·<cM/219ABY½195ZYAB=GBC
<c/214/2=Sy/R<c=@?AB14M Elf32_Word
NJ =C2GB©=<cGBM C2z@? : <2<>/U1&VL=N14C2M <2Y =N$<2M hU<>/21vS@Y198;G r8;=<cGBM Cªk
! " #B" 7o%]')" +*, *
2-19
ELF: Executable and Linkable Format
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;
}
Although the atexit(BA_OS) termination processing normally will be done, it is not guaranteed to
NOTE have executed upon process death. In particular, the process will not execute the termination process-
ing if it calls _exit [see exit(BA_OS)] or if the process dies because it received a signal that it nei-
ther caught nor ignored.
! " # " &%(')" -*, *
2-20
3 C LIBRARY
C Library 3-1
Global Data Symbols 3-2
! " #$ " &%(')" +*, *
i
C Library
.0/21vABG ?N=N$VIz z8;M C2<c=GBC2ST=ABA(M h2<>/U1SyV OL?M ABST8;M C2<c=GBC219DFGBC z=C2D0zGBCR=D6D0GB<>GBM C2z8M(C2<c=GBC2S<>/214NM(:0e
<cGBC219STABGBSy<>19DFGBC|<>l/2i14bh`cM(ABABM QRGBCUJ<cQRM<>=@? AB19SkT.0/214r0N$Sy<2<>=@?A 14ABGBS@<cSN$M :li<cBG bC2s19ySshcN$M O§<>/21vi]\Ra^USy<>=C2D0=ND¥k
! " #$ " &%(')" +*, *
3-1
ELF: Executable and Linkable Format
j019S@GBD61&S<>/U14S@VIO?M ABSTABGBSy<>19DFGBC|<>/214¿ÀGB<c/RaV C2M C2VIOPST<c=@?AB14=@? M(WX19zS@VIC2M(CUV OPSM(hU<>/214h`M(NO ¯I ¶ 91 57G S@<UhcM N ¯I ¶
19C2<cN$GB19S<>/U=<2=N$14C2M <2ABGBS@<c19DFQ|GB<>/|=nAB19=D0GBCUJ:0C2D019N$Sy8;M N$14Y0N$19Y19C2D019D{<>M<c/219GBNwC2=OP1Ikª.0/2:0S _ 8;M 2C <c=GBC2SU? M(<c/
=C2D zh`M(Nw195Z=OPYAB1Ik libc
getopt _getopt
-h2<c/214N$M :<cGBC219SABGBS@<c19DF=@?M WX1&z7<>/21vhcM(A ABM(Q|GBC2JL=N$14CUM(<2D019rCU19DF19ABS@19QR/U19N$1Ik
getdate_err optarg
_getdate_err opterr
_ _iob optind
optopt
! " #$ " &%(')" +*, *
3-2
I Index
Index I-1
! " #$ " &%(')" +*, *
i
Index
tST8;M OPYAB19OP19C2<
1: 6 ctime 3: 1
cuserid 3: 1
A
i+j0^U8;M C2hcM N$Om=C28;1 D
1: 11, 2: 3, 6, 12, 14
D0=<c=z:0C2GBC2GB<cGB=ABGB©19D
abort 3: 1
D0=<c=]N$19YN1&Sy19C2<c=<>GBM C 2: 8
=@?SyM(AB:0<>148;M D01
abs 3: 1 1: 2, 6
S@<cN$G C2JL<c=@?AB1 2: 13
? bsVIe<>1naMrNcD0h19N
3: 1
1: 6 S@VIO? M(A N$19SyM(AB:02:<>GB13
M C
S@VIO? M(A(<c=@?AB1 2: 15
<c1&NOPGBCU=<>GBM CRh`:C28<>GBM C
1: 10, 14, 2: 13
C D0VIC2=OPGB8¥S@19JIOP19C2<cS 2: 14, 20
AB=CUJ :0=J 1 2: 9
=S@Sy19O?ABV-C2=Om19S
ABG ?N=N$V¬fcS@191vABG ?N=N$VI1:
g 17
ÌABG ?N=N$V E
3: 1 30E0K
cfgetispeed 3: 1 19C2<cN$VLY1:M 1GBC2<2f`S@1914YNM(819S@S@z719C2<cN$VLYM GBC2<cg
cfgetospeed 3: 1 19C2WXGBN$M C2OP19C2<
cfsetispeed 3: 1 fcj0i -aZg 2: 11, 15, 19
cfsetospeed 3: 1
exec
Y=JIGBC2J _ 1: 1, 2: 10–11, 15
clearerr 3: 1 1957198:<c=@?AB1vrAB1
2: 7
S@19JIOP19C2<cS 1: 1
8;M P O OmM(C¬SyV OL?M ABS
clock 3: 1
2: 9
;8 M $N 1nrAB1 1: 8
exit 2: 20
1: 3
ctermid 3: 1
! " #$ " &%(')" +*, *
I-1
ELF: Executable and Linkable Format
F gmtime 3: 1
fclose 3: 1
fdopen 3: 1
feof 3: 1
H
/2=Sy/Lh`:C28<>GBM C
ferror 3: 1
/2=Sy/¬<c=@?AB1 2: 19
fflush 3: 1 1: 12, 14, 2: 11, 13, 19
fgetc 3: 1 hcreate 3: 1
fgetpos 3: 1 hdestroy 3: 1
fgets 3: 1 hsearch 3: 1
_ _filbuf 3: 1–2
r0AB1&zM&? p>198;<2fcS@1914M&? pq198<Xr0AB19g
r0AB14M hchcSy1&<
2: 7 I
fileno 3: 1 GBC2<c19N$YN19<>19NzZS@191nYN$M JIN$=OàGBCU<>19NYN$19<c1&N
2: 10
_ _flsbuf 3: 1–2
_ _iob 3: 2
fmtmsg 3: 1
isalnum 3: 1
fopen 3: 1
hcM N$Om=<>SyzM&? pq198<2rAB1 isalpha 3: 1
KI+ºT.0ºTi+\ 1: 1
isascii 3: 1
1: 8
isatty 3: 1
fprintf 3: 1
iscntrl 3: 1
fputc 3: 1
isdigit 3: 1
fputs 3: 1
isgraph 3: 1
fread 3: 1
islower 3: 1
freopen 3: 1
isnan 3: 1
frexp 3: 1
isnand 3: 1
fscanf 3: 1
isprint 3: 1
fseek 3: 1
ispunct 3: 1
fsetpos 3: 1
isspace 3: 1
ftell 3: 1
fcj0i E0^`j0g isupper 3: 1
ftw _ 3: 2
isxdigit 3: 1
fwrite 3: 1
G J
GBC2Sy<>N:8;<cGBM C
jmp 2: 17–18
getc 3: 1
getchar 3: 1
getdate 3: 1
_getdate_err 3: 2
L
getdate_err 3: 2 labs
AB=©V? GBC23:D01GBC2J
getenv 3: 1 2: 11, 19
getopt 3: 1 LD_BIND_NOW 2: 11, 19
_getopt 3: 2 ldexp 3: 1
getopt 3: 2 ldiv 3: 1
getpass 3: 1 LD_LIBRARY_PATH 2: 15
fca ¢¡£+g2f`S@1914ABGBC2HL19D0GB<cM(Ng
gets 3: 1 ld _
getsubopt 3: 1 lfind 3: 1
getw 3: 1
JIABMo? = A(D0=<>=nSyV OL?M ABS S@191v=ABS@MABG ?N=N$V
libc 3: 0, 2
JIABMo? = A(M(h`hcS@19<2<c=@?AB1 3: 2
8;M C2<c19C2<>S 3: 0
1: 14, 23–24, 2: 11, 16 libc 3: 1–2
! " # " &%(')" -*, *
I-2
ELF: Executable and Linkable Format
S@/U=N$19DFfcSyl19i1bSyc/2=N$3:19DF
0
M&? pq198<Xr0AB19g S@198<>GBM CR=AB1:GBJI1, C2OP
8
19C2<
S@198<>GBM C|=<><cN$G ?:<c19S 1: 10
libsys
ABGBC2H¬19D0GB<cM N3: 1–2 S@198<>GBM CR/U19=D019N 1: 12
S@1914=ABSyM-D0VIC21:=1,OP18–19,
GB8)ABGBC2HI23,
19N 2: 11, 13, 15–16
S@198<>GBM C¬C2=Om19S 1: 2, 8
2: 10
S@198<>GBM CR<cVIY19S 1: 15
localtime 3: 1
S@1914=ABSyM-=N8;/2GBWX14rAB1 1: 10
lockf 3: 1
S@1914=ABS@MD0V CU=OPGB8¥ABGBCUH GB1:C2J1
longjmp 3: 1
S@1914=ABSyM-195Z198;:0<>=@?A 14rAB1 2: 10
lsearch 3: 1
S@1914=A S@MN$19ABM 8;=<c=@?AB1vrAB1 1: 1
S@1914=ABSyM-Sy/2=N$19DFM&? p>198;<2rAB1 1: 1
S@19JIOP19C2< 1: 1
M S@/U=N$19DFM&? pq198<2rAB1
2: 1–2, 7
OP=JIGB8¥C2:O? 19N
1: 4–5 S@Y198GB=AZSy198;<cGBM(CUS 2: 10
mbtowc 3: 1 WX1&NS@GBM C 1: 3
1: 4
memccpy 3: 1
optarg 3: 2
memchr 3: 1
opterr 3: 2
memcmp 3: 1
optind 3: 2
memcpy 3: 1
memmove 3: 1
memset 3: 1
mkfifo 3: 1
P
Y=JI14S@GB©1
mktemp 3: 1
Y=JIGBC2J 2: 7
mktime 3: 1
f 3 -aZg Y19N$h`M(NOP=C281
2: 7
mmap é _ 2: 10 2: 7
monitor 3: 1 pclose
Y19N$h`M(NOP=C2819zY0=J GBC2J
3: 1
2: 7
perror 3: 1
N YM S@GB<cGBM(CUecGBC2D019Y19C2D61&CU<X8;M D01
popen 3: 1
nftw 3: 1 ~ -aZ^`_ 2: 9, 11
3: 2
nl_langinfo 3: 1
printf
YNM(81&D6:N$1vABGBC2HI=JI14<c=@?AB1
3: 1
1: 15, 19, 23–24, 2: 11,
O YNM(81&SyS
13–14, 17
D0=<c=n<cVIY19S 1: 2
YNM(81&SyS@M N$e`S@Y198;G r8 2: 2
30E0KL/U19=D019N 1: 2
YNM(81&SyS@M N$e`S@Y198;G r8)GBC2hcM N$Om=<>GBM C
2: 10
hcM N$Om=< 1: 4
YNM(JIN$=Oà/U19=D019N
18–19, 21, 2: 1, 3, 7, 11, 14, 16–17, 19
/2=Sy/¬<c=@?AB1:
1 1 YNM(JIN$=OüGBCU<>19NYN$19<c192:N 2
YNM(JIN$=Oà/U19=2:D01911,
N 13, 19 YNM(JIN$=OàABM =D0GBC2J 1: 14, 2: 10
1: 2, 2: 2 2: 1, 7
! " #$ " &%(')" +*, *
I-3
ELF: Executable and Linkable Format
GBC2Sy<>N:8;<cGBM C
pushl 2: 17–18 strcmp 3: 1
putc 3: 1
fcj0i E0^`j0g strcpy 3: 1
putc _ 3: 2 strcspn 3: 1
putchar 3: 1 strdup
S@<cN$G C2JL<>=@?A 1&z7S@1914M&? pq198<Xr0AB1
3: 1
putenv 3: 1 1: 16
puts 3: 1 strlen 3: 1
putw 3: 1 strncat 3: 1
strncmp 3: 1
strncpy 3: 1
Q strpbrk 3: 1
strrchr 3: 1
qsort 3: 1
strspn 3: 1
strstr 3: 1
strtod 3: 1
R strtok 3: 1
raise 3: 1 strtol 3: 1
rand
N1&ABM ;8 =<c=@?AB1nrAB1
3: 1 strtoul 3: 1
N1&ABM ;8 =<cGBM C2zSy1914M&? 1:qp 1918<2rAB1 S@VIO? M(A(C2=OP19Syz¼=C2DF=S@Sy19O?ABV
swab 3: 1
1: 21
S@VIO? M(A(<c=@?AB19zSy1&14M&? p>198;<2rAB1 1: 17
rewind 3: 1
S@VIO? M(ABS 1: 17
=@?SyM(AB:0<>1
?GBCUD0GBC2J 1: 8
S 8;M OPOmM(C 1: 18
scanf S@1914=ABS@M/2=S@1:/R8<c=@?AB1
S@198<>GBM C2zM&3:? 1p>1&8<2rAB1 S@/U=N$19DFMo?Ipq198;<2rAB14hc:0C21:8;<c14
GBM(CUS
S@19JIOP19C2< 2: 7
<cV Y1 1: 19
D0VIC2=OPGB8 :C2D61&r0C219D
1: 18
M&? pq198<2rAB1 2: 10–11 WX=AB:1 1: 8
Y19N$OmGBS@SyGBM(CUS 2: 1–2 aتa.030¡ý« 1: 18, 20
YNM(81&SyS 2: 8
2: 7
YNM(JIN$=Oà/U19=D019N
2: 1, 7, 10, 15–16
2: 2
setbuf 3: 1
setjmp
T
S@19<cec:Sy19Nw^cYNM(JIN$=OmS
3: 1
2: 16 tcdrain 3: 1
setvbuf
S@/U=N$19DFABG ? N$=NVf`S@1914S@/2=N19DFM&? pq198<Xr0AB19g
3: 1 tcflow 3: 1
S@/U=N$19DFM&? pq198<2rAB1 tcflush 3: 1
hc:0C28;<cGBM(CUS 1: 1 tcgetattr 3: 1
S@1914=ABS@MD0V CU=OPGB8¥ABGBCUH GBC2J
1: 19 tcgetpgrp 3: 1
S@1914=ABSyM-M&? p>1&8<2rAB1 2: 10 tcgetsid 3: 1
S@19JIOP19C2<cS 2: 10 tcsendbreak 3: 1
S@/U1&A AS@8;NGBY<cS 2: 9 tcsetattr 3: 1
1: 1 tcsetpgrp 3: 1
sleep 3: 1 tdelete 3: 1
sprintf 3: 1 tell 3: 1
srand 3: 1 tempnam 3: 1
sscanf 3: 1 tfind 3: 1
strcat 3: 1 tmpfile 3: 1
strchr 3: 1 tmpnam 3: 1
! " # " &%(')" -*, *
I-4
ELF: Executable and Linkable Format
toascii 3: 1
_tolower 3: 1
tolower 3: 1
_toupper 3: 1
toupper 3: 1
tsearch 3: 1
twalk 3: 1
tzset 3: 1
U
:C2D61&r0C219D+?19/2=WXGBM N
:C2D61&r0C219D½SyV OL?M ABS 1: 10, 2: 6–7
1: 8
ungetc
:C2G C2GB<>G =ABGB©3:19D½
1
D0=<c=
:C2SyY198;GBr019D{YNM(Y19N<>V 2: 8
1: 2–3, 9, 11, 14, 2: 2–3, 5, 7–8,
14, 20
V
vfprintf
WXGBN$<c:=A(=D0D0N$193:SyS@1GBC2J
2: 2
vprintf 3: 1
vsprintf 3: 1
W
wcstombs 3: 1
wctomb 3: 1
X
_xftw 3: 1–2
Z
©19N$M z:0C2GBC2GB<cGB=ABGB©19DFD0=<c=
2: 8
! " #$ " &%(')" +*, *
I-5