相比較重定位檔案,可執行檔案的elf header中入口位址是0x8048320.而且除了section header外,還存在program header.program header起始於第52個位元組,因此program header應該是緊接著elf header。
可執行檔案的elf 布局如下:
我們來看一下0x8048320位址是什麼。
0x8048320是_start的位址,是程式執行開始的地方。
我們知道可重定位檔案的elf中有section的概念。但在可執行檔案中變成了segment.
section和segment的關係是,乙個segment是乙個或多個屬性類似的section合併而成。
為什麼要將section進行合併呢?這樣做的好處是可以減少頁面碎片。可執行檔案是要裝載到記憶體中執行的。如果不進行合併,假設頁面大小為4096,如果.text 為4097,.init為512,那麼將占有3個頁面,而合併後只有2個頁面。
再看一下可執行檔案的section header:
通過readelf -l test檢視section到segment的對映關係,
30個section對映到9個segment。在可執行檔案執行時,並非所有的segment都需要裝載到記憶體,只有「load」型別的segment才需要裝載。
interp是動態鏈結器的路徑。
檢視可執行檔案的符號,readelf -s test
可執行檔案的符號增加了很多,包括編譯器加入的和libc的符號。main.o中呼叫的add不是und型別的。而libc中的一些需要動態鏈結進來的符號是und.
可執行檔案 ELF 格式
elf executable and linking format 是一種物件檔案的格式,用於定義不同型別的物件檔案 object files 中都放了什麼東西 以及都以什麼樣的格式去放這些東西。它自最早在 system v 系統上出現後,被 unix 世界所廣泛接受,作為預設的二進位制檔案格式來使...
Linux下ELF可執行檔案裝載與執行
1 建立子程序 核心建立task struct資料結構,繼承父程序的虛擬位址空間 virtual memory space,vms 2 呼叫execve 系統呼叫執行指定的elf檔案 1 呼叫核心態函式sys execve 動態申請乙個linux binprm資料結構,並用elf可執行檔案的資料填充...
可執行檔案格式elf和bin
常用的可執行檔案包含兩類 原始二進位制檔案 bin 和可載入執行的二進位制檔案,在linux中可載入執行的二進位制檔案為elf檔案。在linux os上,為了執行可執行檔案,他們是遵循elf格式的,通常gcc o test test.c,生成的test檔案就是elf格式的。執行elf檔案時核心會使用...