入口地址由链接编辑器在创建可执行文件时设置。加载程序在将控制权转移到入口地址之前,将程序文件映射到 ELF 标头指定的地址。
要使用具体示例,请考虑以下内容:
% file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, \
for GNU/Linux 2.6.15, not stripped
% readelf -e a.out
... snip ...
Elf file type is EXEC (Executable file)
Entry point 0x8048170
There are 6 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x08048000 0x08048000 0x7cca6 0x7cca6 R E 0x1000
LOAD 0x07cf98 0x080c5f98 0x080c5f98 0x00788 0x022fc RW 0x1000
... snip ...
第一个程序头指定文件偏移量 0 处的文件内容应映射到虚拟地址 0x08048000。该段的文件和内存大小为 0x7cca6 字节。该段将被映射为可读和可执行但不可写(它包含程序的代码)。
在 ELF 头中指定的入口点地址是 0x8048170,它位于包含程序代码的区域内。
John Levine所著的“ Linkers and Loaders ”一书是一个很好的参考链接编辑器和加载器相关问题的资源。