一個源文件在生成可執行程序的過程中地址需要經過以下幾個主要步驟。
源文件在經過編譯器處理之後會生成可重定位目標文件,也就是我們常見的.o文件,經過鏈接器處理之後,會將多個.o文件處理成可執行文件。
.o
稱為可重定位目標,包含二進制代碼和數據,其形式可以和其他目標進行合並,創建一個可執行目標文件
因為.o文件也是ELF文件的一種,所以我麼可以使用readelf -h 來查看.o文件的elf頭數據
$ readelf -h main.o
ELF 頭:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
類別: ELF64
數據: 2 補碼,小端序 (little endian)
Version: 1 (current)
OS/ABI: UNIX - System V
ABI 版本: 0
類型: REL (可重定位文件)
系統架構: Advanced Micro Devices X86-64
版本: 0x1
入口點地址: 0x0
程序頭起點: 0 (bytes into file)
Start of section headers: 960 (bytes into file)
標志: 0x0
Size of this header: 64 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 64 (bytes)
Number of section headers: 14
Section header string table index: 13