程式設計師每天充電5分鐘:目標文件與可執行文件小歷史

ADVERTISEMENT

目標文件與可執行文件的格式跟作業系統和編譯器密切相關,所以不同的系統平台下會有不同的格式,但這些格式又大同小異,目標文件格式與可執行文件格式的歷史幾乎是作業系統的發展史。

ADVERTISEMENT

COFF(common file format)是由Unix System V Release 3 首先提出並且使用的格式規範,後來微軟公司基於COFF格式,定製了PE(Portable Executable)格式標準,並將其用於當時的Windows NT 系統。System V Release 4 在COFF的基礎上引入了ELF(Executable Linkable Format)格式。目前流行的Linux系統也以ELF作為基本可執行文件格式。這也就是為什麼目前PE和ELF十分相似的原因,因為他們都源於同一種可執行文件格式COFF。

ADVERTISEMENT

Unix最早的可執行文件格式為a.out格式,他的設計非常的簡單,以至於後來共享庫這個概念出現的時候,a.out格式就變得捉襟見肘了。於是人們設計了COFF格式來決絕這些問題,這個設計非常通用,以至於COFF的繼承者們到目前還被廣泛地使用。COFF的主要貢獻是在目標文件裡面引入了「段」的機製,不同的目標文件可以擁有不同數量和不同類型的「段」。另外它還定義了調試數據格式。

ADVERTISEMENT

不光是可執行文件(Windows 的.exe 和 Linux 下的ELF 可執行文件)按照可執行文件格式存儲。動態連結庫DLL, Dynamic Linking Library)(Windows 的 .dll 和 Linux 的.so).以及靜態連結庫(Static Linking Library)(Windows的 .lib 和 linux 的.a)都按照可執行文件存儲。

ELF文件標準把系統中採用的ELF格式的文件分為四類:可重定位文件(Relocatable File)、可執行文件(Executable File)、共享目標文件(Shared Object File)和核心轉出文件(Core Dump File)

ADVERTISEMENT