介紹
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)是在檔案的固定位置。