エントリ アドレスは、リンカーが実行可能ファイルを作成するときに、リンカーによって設定されます。ローダーは、制御をエントリ アドレスに転送する前に、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」という本は、リンク エディターとローダーに関連する問題について相談するための優れたリソースです。