Académique Documents
Professionnel Documents
Culture Documents
JBEOS-TN-03-005
2003 5
ELF
2003 5
863
..................................................................................................................................... 1
............................................................................................................................. 1
2.1
SYSTEM V ABI........................................................................................................................................ 1
2.2
LSB ........................................................................................................................................................ 2
ELF ..................................................................................................................... 2
3.1
3.1.1
........................................................................................................................................................ 2
................................................................................................................ 2
3.2
........................................................................................................................................ 3
3.3
3.4
SECTIONS ................................................................................................................................ 6
3.4.1
................................................................................................................................ 6
3.4.2
....................................................................................................................................... 7
3.4.3
..................................................................................................................................... 10
3.5
STRING TABLE............................................................................................................... 12
3.6
3.6.1
st_info....................................................................................................................... 13
3.6.2
..................................................................................................................................... 14
3.6.3
.......................................................................................................................... 15
3.6.4
STN_UNDEF....................................................................................................................... 15
3.6.5
3.7
..................................................................................................................................... 15
.......................................................................................................................................... 16
3.7.1
.................................................................................................................................. 16
3.7.2
.................................................................................................................................. 17
3.8
.......................................................................................................................... 19
3.8.1
3.8.2
..................................................................................................................................... 21
3.8.3
..................................................................................................................................... 23
3.8.4
GOT ................................................................................................................. 27
3.8.5
PLT................................................................................................................... 28
3.8.6
Hash Table................................................................................................................ 30
3.8.7
...................................................................................................................... 31
3.9
C ....................................................................................................................................................... 31
3.9.1
C............................................................................................................................... 31
3.9.2
.............................................................................................................................. 33
1 ................................................................................................................................ 3
2 ELF Header ................................................................................................................. 3
3 ....................................................................................................................... 7
4 ..................................................................................................................... 13
5 st_info ...................................................................................................... 13
6 ..................................................................................................................... 16
7 ..................................................................................................................... 19
8 ............................................................................................................................. 21
9 ................................................................................................................. 22
10 ................................................................................................................... 24
11 ........................................................................................................................ 28
12 ........................................................................................................... 29
13 ................................................................................................................... 30
2003 5
PKU/SSDB-03-TR-005
1
Executable and Linking Format UNIX UNIX
System LaboratoriesUSLApplication Binary
InterfaceABITool Interface StandardsTIS
ELF 32 Intel
[1, 2]
ELF
2
2.1 System V ABI
System V Application Binary Interface(ABI)
1 38
2003 5
PKU/SSDB-03-TR-005
2.2 LSB
Linux Linux LSB
(Linux Standard Base)LSB Linux
ABI
gLSBGeneric LSB
archLSBArchitecture Specific LSB LSB
LSB SourceForge
3 ELF
3.1
Relocatable File
Executable File
exec()
Shared Object File
Dynamic Linker
3.1.1
8 /32
1 ELF
Elf32_Addr
Elf32_Half
Elf32_Off
Elf32_SWord
Elf32_Word
unsigned char
4 4
2 38
2003 5
PKU/SSDB-03-TR-005
3.2
ELF
ELF
...
n
...
...
...
ELF
ELF Header
2
ELF Header
#define EI_NIDENT 16
typedef struct{
unsigned char
e_ident[EI_NIDENT];
Elf32_Half e_type;
Elf32_Half e_machine;
Elf32_Word e_version;
Elf32_Addr e_entry;
Elf32_Off
e_phoff;
Elf32_Off
e_shoff;
3 38
2003 5
PKU/SSDB-03-TR-005
Elf32_Word
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
Elf32_Half
}Elf32_Ehdr;
e_flags;
e_ehsize;
e_phentsize;
e_phnum;
e_shentsize;
e_shnum;
e_shstrndx;
e_ident ELF 2
2 e_ident[]
EI_MAG0
EI_MAG1
EI_MAG2
EI_MAG3
EI_CLASS
EI_DATA
EI_VERSION
EI_PAD
EI_NIDENT
16
e_ident[]
3 e_ident[]
0x7f
e_ident[EI_MAG0]
'E'
e_ident[EI_MAG1]
EI_MAG2
'L'
e_ident[EI_MAG2]
EI_MAG3
'F'
e_ident[EI_MAG3]
EI_MAG0
EI_MAG0
EI_MAG3
EI_MAG1
EI_CLASS
ELFCLASSNONE 0
ELFCLASS32
32
ELFCLASS64
64
ELFCLASS32 4 GBELFCLASS64 64
64
EI_DATA
e_ident[EI_DATA]
4 38
2003 5
PKU/SSDB-03-TR-005
ELFDATANONE 0
ELFDATA2LSB 1
ELFDATA2MSB 2
e_ident 0
ELF
32 Intel
1
e_ident[EI_CLASS] ELFCLASS32
e_ident[EI_DATA]
ELFDATA2LSB
2e_machine EM_386
ELF Header 4
4 ELF Header
e_ident
e_type
ET_NONE
0
ET_REL
1
ET_EXEC
2
ET_DYN
3
ET_CORE
4
Core
ET_LOPROC
0xff00
ET_HIPROC
0xffff
ET_LOPROC ET_HIPROC
e_machine
EM_NONE 0
EM_M32
1
AT&T WE 32100
EM_SPARC 2
SPARC
EM_386
3
Intel 80386
EM_68K
4
Motorola 68000
EM_88K
5
Motorola 88000
5 38
2003 5
PKU/SSDB-03-TR-005
EM_860
7
Intel 80860
EM_MIPS 8
MIPS RS3000
ELF
e_version
EV_NONE
0
EV_CURRENT 1
e_entry
e_phoff
e_shoff
e_flags
EF_machine_flag
e_ehsize
ELF
e_phentsize
e_phnum
e_shentsize
e_shnum
e_shstrndx
SHN_UNDEF
3.4 Sections
ELF
(1).
(2). 0
(3).
(4). INACTIVE SPACE
3.4.1
ELF e_shoff e_shnum
e_shentsize
SHN_UNDEF
6 38
2003 5
PKU/SSDB-03-TR-005
SHN_LORESERVE
OXFF00
SHN_LOPROC
0XFF00
SHN_HIPROC
0XFF1F
SHN_ABS
OXFFF1
SHN_COMMON
OXFFF2
FORTRAN
COMMON C
SHN_HIRESERVE
0XFFFF
SHN_LORESERVE SHN_HIRESERVE
3.4.2
3
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;
sh_name
sh_type
sh_flags
sh_addr
sh_offset
SHT_NOBITS sh_offset
sh_size
SHT_NOBITS sh_size
7 38
2003 5
PKU/SSDB-03-TR-005
SHT_NOBITS
sh_link
sh_info
doublewordsh_addr
sh_addralign
sh_addralign 0 0 2
0 1
sh_entsize
SHN_UNDEF
7 SHN_UNDEF(0)
sh_name
sh_type
SHT_NULL
sh_flags
sh_addr
sh_offset
sh_size
sh_link
SHN_UNDEF
sh_info
sh_addralign
sh_entsize
3.4.2.1
sh_type
8
8
SHT_NULL
SHT_PROGBITS
SHT_SYMTAB
SHT_SYMTAB ld
SHT_STRTAB
addend
32 Elf32_Rela
SHT_RELA
8 38
2003 5
PKU/SSDB-03-TR-005
SHT_HASH
SHT_DYNAMIC
SHT_NOTE
SHT_PROGBITS
sh_offset
SHT_REL
addends
32
Elf32_rel
SHT_SHLIB
10
ABI
SHT_DYNSYM
11
SHT_DYNSYM
SHT_LOPROC
0X70000000
SHT_HIPROC
OX7FFFFFFF
SHT_LOUSER
0X80000000
SHT_HIUSER
0X8FFFFFFF
SHT_NOBITS
3.4.2.2
sh_flags
sh_flags
1 0
9 sh_flags
SHF_WRITE
0x1
SHF_ALLOC
0x2
SHF_EXECINSTR
0x4
SHF_MASKPROC
0xF0000000
SHF_WRITE:
SHF_ALLOC:
0
SHF_EXECINSTR:
SHF_MASKPROC:
9 38
2003 5
3.4.2.3
PKU/SSDB-03-TR-005
sh_link sh_info
sh_link sh_info
10 sh_link sh_info
sh_type
sh_link
sh_info
SHT_DYNAMIC
SHT_HASH
SHT_REL
SHT_RELA
SHT_SYMTAB
SHT_DYNSYM
STB_LOCAL
SHN_UNDEF
3.4.3
11
.bss
SHT_NOBITS
SHF_ALLOC
SHF_WRITE
.comment
SHT_PROGBITS
()
.data
SHT_PROGBITS
SHF_ALLOC
SHF_WRITE
.data1
SHT_PROGBITS
SHF_ALLOC
SHF_WRITE
.debug
SHT_PROGBITS
()
+
0
SHT_DYNAMIC
SHF_ALLOC SHF_WRITE
.dynstr
SHT_STRTAB
SHF_ALLOC
.dynsym
SHT_DYNSYM
SHF_ALLOC
.fini
SHT_PROGBITS
SHF_ALLOC
+
SHF_EXECINSTR
.got
SHT_PROGBITS
.dynamic
10 38
2003 5
.hash
PKU/SSDB-03-TR-005
SHT_HASH
SHF_ALLOC
SHT_PROGBITS
SHF_ALLOC
+
SHF_EXECINSTR C
main
SHT_PROGBITS
SHF_ALLOC
0
.line
SHT_PROGBITS
()
.note
SHT_NOTE
()
.plt
SHT_PROGBITS
.relname
SHT_REL
.init
.interp
procedure linkage
table
SHF_ALLOC
0 name
.text
.rel.text .rela.text
.relaname SHT_RELA
.rodata
SHT_PROGBITS
SHF_ALLOC
.rodata1
SHT_PROGBITS
SHF_ALLOC
.shstrtab SHT_STRTAB
.strtab
SHT_STRTAB
SHF_ALLOC 0
.symtab
SHT_SYMTAB
SHF_ALLOC
0
.text
SHT_PROGBITS
SHF_ALLOC
+
SHF_EXECINSTR
e_machine .FOO.psect
FOO psect
11 38
2003 5
PKU/SSDB-03-TR-005
.sdata
.tdesc
.sbss
.lit4
.lit8
.reginfo
.gptab
.liblist
.conflict
0
NULL NULL 0
NULL
sh_size 0
0
sh_name
ELF e_shstrndx 25
12
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
\0
\0
10
\0
20
\0
\0
\0
12
()
name.
Variable
11
able
16
able
24
()
12 38
2003 5
PKU/SSDB-03-TR-005
4
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;
13
13
st_name
C C
st_value
st_size
st_info
st_other
st_shndx
3.6.1 st_info
st_info
5 st_info
13 38
2003 5
PKU/SSDB-03-TR-005
#define ELF32_ST_BIND(i)
((i)>>4)
#define ELF32_ST_TYPE(i)
((i)&0xf)
#define ELF32_ST_INFO(b, t) (((b)<<4) + ((t)&0xf))
st_info
14
STB_GLOBAL
STB_WEAK
STB_LOPROC
13
STB_HIPROC
15
STB_LOCAL
(1).
STB_GLOBAL
st_shndx SHN_COMMON
0
STB_LOCAL
sh_info
3.6.2
ELF32_ST_TYPE
15
STT_NOTYPE
STT_OBJECT
STT_FUNC
STT_SECTION
STB_LOCAL
STT_FILE
STB_LOCAL
14 38
2003 5
PKU/SSDB-03-TR-005
SHN_ABS STB_LOCAL
STT_LOPROC
13
STT_HIPROC
15
STT_FUNC
STT_FUNC
st_shndx
3.6.3
SHN_ABS
SHN_COMMON
sh_addralign
st_value
SHN_UNDEF
3.6.4 STN_UNDEF
0STN_UNDEF
16 STN_UNDEF
st_name
st_value
st_size
st_info
st_other
st_shndx
3.6.5
st_value
(1). st_value SHN_COMMON
15 38
2003 5
PKU/SSDB-03-TR-005
(2). st_value
st_value st_shndx
(3). st_value
3.7
3.7.1
6
6
typedef struct {
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;
typedef struct
Elf32_Addr
Elf32_Word
Elf32_Word
} Elf32_Rela;
{
r_offset;
r_info;
r_addend;
17
r_offset
r_info
STN_UNDEF 0
16 38
2003 5
PKU/SSDB-03-TR-005
r_info ELF32_R_TYPE
ELF32_R_SYM
#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
Elf32_Rela Elf32_Rel
sh_info
sh_link r_offset
(1).
(2).
r_offset
r_offset
r_offset
3.7.2
A
B
G
GOT GOT
L /
P r_offset
r_offset
17 38
2003 5
PKU/SSDB-03-TR-005
SYSTEM V Elf32_Rel
X86
18 x86
R_386_NONE
()
()
R_386_32
word32
S+A
R_386_PC32
word32
S+A-P
R_386_GOT32
word32
G+A-P
R_386_PLT32
word32
L+A-P
()
word32
B+A
word32
S+A-GO
T
GOT+AP
R_386_PC32
_GLOBAL_OFFSET_TABLE_
R_386_COPY
R_386_GLOB_DAT
R_386_JMP_SLOT
R_386_RELATIVE
R_386_GOTOFF
R_386_GOTPC
10
()
word32
word32
word32
18 38
2003 5
PKU/SSDB-03-TR-005
3.8
Program Header
Segment Contents
typedef struct
Elf32_Word
Elf32_Off
Elf32_Addr
Elf32_Addr
Elf32_Word
Elf32_Word
Elf32_Word
Elf32_Word
{
p_type;
p_offset;
p_vaddr;
p_paddr;
p_filesz;
p_memsz;
p_flags;
p_align;
} Elf32_phdr;
7
p_type
p_offset
p_vaddr
p_paddr
p_filesz
p_memsz
p_flags
p_align
19
System V
0
0
p_vaddr p_offset
19 38
2003 5
PKU/SSDB-03-TR-005
0 1 p_align
2 p_vaddr p_offset p_align
3.8.1.1
ELF 19
19
PT_NULL
PT_LOAD
p_filesz p_memsz
p_memsz
p_fileszp_filesz p_memsz
p_vaddr
PT_DYNAMIC
PT_INTERP
NULL
PT_NOTE
PT_SHLIB
ABI
PT_PHDR
PT_LOPROC
0x70000000
PT_HIPROC
0x7fffffff
3.8.1.2
Base Address
PT_LOAD p_vaddr
p_vaddr
.bss SHT_NOBITS
p_memsz
20 38
2003 5
PKU/SSDB-03-TR-005
p_filesz
3.8.1.3
Note Section
SHT_NOTE PT_NOTE
namesz
descsz
type
name
...
desc
...
8
ABI [3]
3.8.2
21 38
2003 5
PKU/SSDB-03-TR-005
0
ELF
Ox8048100
0x2BE00 0x8073eff
0x2BF00
0x8074f00
0x100
0x4E00 0x8079cff
0x30D00
20
p_type
PT_LOAD
PT_LOAD
p_offset
0X100
0x2bf00
p_vaddr
0x8048100
0x8074f00
p_paddr
p_filesz
0x2BE00
0x4e00
p_memsz
0x2BE00
0x5e24
p_flags
PF_R + PF_X
p_align
0x1000
0x1000
(1).
(2).
(3).
(4).
ELF
p_vaddr
21
22 38
2003 5
PKU/SSDB-03-TR-005
0x200
0x2a400
0x0
0x80000200
0x8002a400
0x80000000
0x80081200
0x800ab400
0x80081000
0x900c0200
0x900ea400
0x900c0000
0x900c6200
0x900f0400
0x900c6000
3.8.3
3.8.3.1
PT_INTERP exec()
PT_INTERP
mmap
3.8.3.2
PT_INTERP
Exec()
(1).
(2).
(3).
(4).
(5). exec
23 38
2003 5
PKU/SSDB-03-TR-005
SHT_DYNAMIC .dynamic
SHT_HASH .hash
SHT_PROGBITS .got .plt
ABI
ABI
3.8.3.3
PT_DYNAMIC
.dynamic _DYNAMIC
10
typedef struct {
Elf32_Sword d_tag;
union {
Elf32_Word d_val;
Elf32_Addr d_ptr;
} d_un;
} Elf32_Dyn;
extern Elf32_Dyn _DYNAMIC[];
d_tag d_un
d_val Elf32_Word
d_ptr Elf32_Addr
ABI
22
DT_NULL
DT_NEEDED
d_un
DT_NULL _DYNAMIC
NULL
DT_STRTAB
d_val
24 38
2003 5
PKU/SSDB-03-TR-005
DT_PLTRELSZ
d_val
PLT
DT_JMPREL
DT_PLTRELSZ
DT_PLTGOT
d_ptr
PLT/
DT_HASH
d_ptr
DT_SYMTAB
DT_STRTAB
d_ptr
DT_SYMTAB
d_ptr
32
Elf32_Sym
DT_RELA
d_ptr
32 Elf32_Rela
DT_RELASZ
DT_RELAENT
DT_RELA DT_REL
DT_RELASZ
d_val
DT_RELA
DT_RELAENT
d_val
DT_RELA
DT_STRSZ
10
d_val
DT_SYMENT
11
d_val
DT_INIT
12
d_ptr
DT_FINI
13
d_ptr
Termination Function
NULL
DT_STRTAB
DT_SONAME
14
d_val
DT_RPATH
15
d_val
NULL
DT_STRTAB
DT_SYMBOLIC
16
25 38
2003 5
PKU/SSDB-03-TR-005
DT_REL
17
d_ptr
DT_RELA
32 Elf32_Rel
DT_RELSZ DT_RELENT
DT_RELSZ
18
d_val
DT_REL
DT_RELENT
19
d_val
DT_REL
DT_PLTREL
20
d_val
d_val DT_REL
DT_RELA
DT_DEBUG
21
d_ptr
ABI
ABI
d_ptr
DT_PLTRELSZ
DT_PLTREL
DT_TEXTREL
22
DT_JMPREL
23
d_ptr
DT_LOPROC
0x70000000
DT_HIPROC
0x7fffffff
DT_LOPROC DT_HIPROC
DT_NULL DT_NEEDED
3.8.3.4
26 38
2003 5
PKU/SSDB-03-TR-005
DT_NEEDED
DT_NEEDED
DT_NEEDED
DT_SONAME
DT_RPATH :
LD_LIBRARY_PATH
:; LD_LIBRARY_PATH
DT_RPATH
/usr/lib
SUID SGID
LD_LIBRARY_PATH DT_RPATH
/usr/lib
3.8.4 GOT
R_386_GLOB_DAT
27 38
2003 5
PKU/SSDB-03-TR-005
0 _DYNAMIC
32 Intel 1 2
32 Intel
_GLOBAL_OFFSET_TABLE_
extern Elf32_Addr _GLOBAL_OFFSET_TABLE[];
_GLOBAL_OFFSET_TABLE_ .got /
3.8.5 PLT
GOT
PLT
//
System V
.PLT0: pushl
jmp
nop;
nop;
.PLT1: jmp
pushl
.PLT2: jmp
pushl
jmp
...
got_plus_4
*got_plus_8
nop
nop
*name1_in_GOT
$offset@PC
*name2_in_GOT
$offset
.PLT0@PC
11
28 38
2003 5
PKU/SSDB-03-TR-005
.PLT0: pushl
jmp
nop;
nop;
.PLT1: jmp
pushl
jmp
.PLT2: jmp
pushl
jmp
...
4(%ebx)
*8(%ebx)
nop
nop
*name1@GOT(%ebx)
$offset
.PLT0@PC
*name2@GOT(%ebx)
$offset
.PLT0@PC
12
11 12
1.
2. %bx
3. name1name1 .PLT1
4. name1
pushl name1
5. offset 32
R_386_JMP_SLOT
jmp GOT
name1
6. .PLT0
pushl got_plus_4 4(%ebx)
GOT
got_plus_8 8(%ebx)
7.
name1
29 38
2003 5
PKU/SSDB-03-TR-005
8. name1
.PLT1 jmp name1 pushl
LD_BIND_NOW
R_386_JMP_SLOT
13
nbucket
nchain
bucket[0]
...
bucket[nbucket-1]
chain[0]
...
chain[nchain-a]
ELF Linux
30 38
2003 5
PKU/SSDB-03-TR-005
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;
}
3.8.7
atexit()
DT_INIT DT_FINI /
.init .fini
atexit()
_exit
3.9 C
3.9.1 C
C libc libsys
ANSI C
23 libc
abort
fputc
isprint
putc
strncmp
abs
fputs
ispunct
putchar
strncpy
asctime
fread
isspace
puts
strpbrk
atof
freopen
isupper
qsort
strrchr
31 38
2003 5
PKU/SSDB-03-TR-005
atoi
frexp
isxdigit
raise
strspn
atol
fscanf
labs
rand
strstr
bsearch
fseek
ldexp
rewind
strtod
clearerr
fsetpos
ldiv
scanf
strtok
clock
ftell
localtime
setbuf
strtol
ctime
fwrite
longjmp
setjmp
strtoul
difftime
getc
mblen
setvbuf
tmpfile
div
getchar
mbstowcs
sprintf
tmpnam
fclose
getenv
mbtowc
srand
tolower
feof
gets
memchr
sscanf
toupper
ferror
gmtime
memcmp
strcat
ungetc
fflush
isalnum
memcpy
strchr
vfprintf
fgetc
isalpha
memmove
strcmp
vprintf
fgetpos
iscntrl
memset
strcpy
vsprintf
fgets
isdigit
mktime
strcspn
wcstombs
fopen
isgraph
perror
strlen
wctomb
fprintf
islower
printf
strncat
24 Libc
__assert
getdate
lockf
sleep
tell
cfgetispeed
getopt
lsearch
strdup
tempnam
cfgetospeed
getpass
memccpy
swab
tfind
cfsetispeed
getsubopt
mkfifo
tcdrain
toascii
cfsetospeed
getw
mktemp
tcflow
_tolower
ctermid
hcreate
monitor
tcflush
tsearch
cuserid
hdestroy
nftw
tcgetattr
_toupper
dup2
hsearch
nl_langinfo
tcgetpgrp
twalk
fdopen
isascii
pclose
tcgetsid
tzset
__filbuf
isatty
popen
tcsendbreak
_xftw
fileno
24 name _name
libc getopt _getopt
32 38
2003 5
PKU/SSDB-03-TR-005
_xftw() 2
SVIDANSI CPOSIX
3.9.2
libc libsys
libc
System V Interface
Definition, 3rd Edtion System V ABI 6 Data Definition
name - _name
ANSI C
25 libc
getdate_err
optarg
_getdate_err
opterr
__iob
optind
optopt
[1] Tool Interface Standards(TIS) Committee, Portable Formats Specification, Version 1.1.
[2] Tool Interface Standards(TIS) Committee, Executable and Linking Format(ELF) Specification, Version
1.2, May, 1995.
[3] AT&T, The Santa Cruz Operation, Inc. System V Application Binary Interface, Edtion 4.1. DRAFT
COPY, March 18, 1997.
[4] AT&T, The Santa Cruz Operation, Inc. System V Application Binary Interface, Intel386 Architecture
Processor Supplement. Fourth Edition.
[5] Free Standards Group, Linux Standard Base, Version 1.3, http://www.linuxbase.org/spec
33 38