ELF = Executable and Linkable Format,可執行連接格式,是UNIX系統實驗室(USL)作爲應用程序二進制接口(Application Binary Interface,ABI)而開發和發佈的。擴展名爲elf。工具接口標準委員會(TIS)選擇了正在發展中的ELF標準作爲工作在32位INTEL體系上不同操作系統之間可移植的二進制文件格式。假定開發者定義了一個二進制接口集合,ELF標準用它來支持流線型的軟件發展。應該減少不同執行接口的數量。因此可以減少重新編程重新編譯的代碼。
文件格式
Linking View
Elf header |
Program header
table optional |
section1 |
…… |
section n |
section header
table |
Exection View
Elf header |
Program header
table |
segment 1 |
section 2 |
…… |
segment header
table |
一個ELF頭在文件的開始,保存了路線圖(road map),描述了該文件的組織情況。sections保存着object 文件的信息,從連接角度看:包括指令,數據,符號表,重定位信息等等。特別sections的描述會出項在以後的第一部分。第二部分討論了段和從程序的執行角度看文件。
假如一個程序頭表(program header table)存在,那麼它告訴系統如何來創建一個進程的內存映象。被用來建立進程映象(執行一個程序)的文件必須要有一個程序頭表(program header table);可重定位文件不需要這個頭表。一個section頭表(section header table)包含了描述文件sections的信息。每個section在這個表中有一個入口;每個入口給出了該section的名字,大小,等等信息。在聯接過程中的文件必須有一個section頭表;其他object文件可要可不要這個section頭表。
注意: 雖然圖顯示出程序頭表立刻出現在一個ELF頭後,section頭表跟着其他section部分出現,事實是的文件是可以不同的。此外,sections和段(segments)沒有特別的順序。只有ELF頭(elf header)是在文件的固定位置。