elf(executable and linking format)是一種物件檔案的格式,用於定義不同型別的物件檔案(object files)中都放了什麼東西、以及都以什麼樣的格式去放這些東西。它自最早在 system v 系統上出現後,被 unix 世界所廣泛接受,作為預設的二進位制檔案格式來使用。
這是由彙編器彙編生成的 .o 檔案。後面的鏈結器(link editor)拿乙個或一些 relocatable object files 作為輸入,經鏈結處理後,生成乙個可執行的物件檔案 (executable file) 或者乙個可被共享的物件檔案(shared object file)。我們可以使用 ar 工具將眾多的 .o relocatable object files 歸檔(archive)成 .a 靜態庫檔案。
這些就是所謂的動態庫檔案,也即 .so 檔案。如果拿前面的靜態庫來生成可執行程式,那每個生成的可執行程式中都會有乙份庫**的拷貝。如果在磁碟中儲存這些可執行程式,那就會占用額外的磁碟空間;另外如果拿它們放到linux系統上一起執行,也會浪費掉寶貴的物理記憶體。如果將靜態庫換成動態庫,那麼這些問題都不會出現。動態庫在發揮作用的過程中,必須經過兩個步驟:
a) 鏈結編輯器(link editor)拿它和其他relocatable object file以及其他shared object file作為輸入,經鏈結處理後,生存另外的 shared object file 或者 executable file。
b) 在執行時,動態鏈結器(dynamic linker)拿它和乙個executable file以及另外一些 shared object file 來一起處理,在linux系統裡面建立乙個程序映像。
ELF學習 可執行檔案
相比較重定位檔案,可執行檔案的elf header中入口位址是0x8048320.而且除了section header外,還存在program header.program header起始於第52個位元組,因此program header應該是緊接著elf header。可執行檔案的elf 布局如...
可執行檔案格式elf和bin
常用的可執行檔案包含兩類 原始二進位制檔案 bin 和可載入執行的二進位制檔案,在linux中可載入執行的二進位制檔案為elf檔案。在linux os上,為了執行可執行檔案,他們是遵循elf格式的,通常gcc o test test.c,生成的test檔案就是elf格式的。執行elf檔案時核心會使用...
可執行檔案格式elf和bin
常用的可執行檔案包含兩類 原始二進位制檔案 bin 和可載入執行的二進位制檔案,在linux中可載入執行的二進位制檔案為elf檔案。在linux os上,為了執行可執行檔案,他們是遵循elf格式的,通常gcc o test test.c,生成的test檔案就是elf格式的。執行elf檔案時核心會使用...