ELF文件的入口地址实际为代码段(文本段)的起始地址。用readelf可以查看elf文件的信息,其中包含入口地址信息:
$ readelf -h a.out
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x8048390
Start of program headers: 52 (bytes into file)
Start of section headers: 3548 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 7
Size of section headers: 40 (bytes)
Number of section headers: 36
Section header string table index: 33
这里显示入口地址为0x804390。objdump可以elf文件的符号信息:
$ objdump -t a.out | sort
080482e4 g F .init 00000000 _init
080482e4 l d .init 00000000 .init
08048314 l d .plt 00000000 .plt
08048390 g F .text 00000000 _start
08048390 l d .text 00000000 .text
080483c0 l F .text 00000000 __do_global_dtors_aux
080483f0 l F .text 00000000 frame_dummy
08048414 g F .text 000000a1 main
这里可以看到0x8048390对应的标号为start,即text段的开始处。另外,下面有c中main的符号,这说明gcc将main插入到代码段开始位置。