linux,windows 可執行文件(ELF、PE)

如今PC平臺流行的可執行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它們都是COFF(Common file format)格式的變種。
不光是可執行文件(Windows的.exe和Linux下的ELF可執行文件)按照可執行文件格式存儲。動態連接庫(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及靜態連接庫(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可執行文件格式存儲。它們在Windows下都按照PE-COFF格式存儲,Linux下按照ELF格式存儲。
什麼又是COFF格式呢?
COFF是由Unix System V Release 3首先提出而且使用的格式規範,後來微軟公司基於COFF格式,制定了PE格式標準,並將其用於當時的Windows NT系統。System V Release 4在COFF的基礎上引入了ELF格式,目前流行的Linux系統也以ELF做爲基本可執行文件格式。這也就是爲何目前PE和ELF如此類似的主要緣由,由於它們都是源於同一種可執行文件格式COFF。
bash

Unix最先的可執行文件格式爲a.out格式,它的設計很是地簡單,以致於後來共享庫這個概念出現的時候,a.out格式就變得捉襟見肘了。因而人們設計了COFF格式來解決這些問題,這個設計很是通用,以致於COFF的繼承者到目前還在被普遍地使用。編輯器

COFF的主要貢獻是在目標文件裏面引入了「段」的機制,不一樣的目標文件能夠擁有不一樣數量及不一樣類型的「段」。另外,它還定義了調試數據格式。spa

 

目標文件有三種類型:
1. 可重定位文件(Relocatable File) 包含適合於與其餘目標文件連接來建立可執行文件或者共享目標文件的代碼和數據。 (Linux的*.o 文件 Windows的 *.obj文件)
2. 可執行文件(Executable File) 包含適合於執行的一個程序,此文件規定了 exec() 如何建立一個程序的進程映像。(好比/bin/bash文件;Windows的*.exe)
3. 共享目標文件(Shared Object File) 包含可在兩種上下文中連接的代碼和數據。首先連接編輯器能夠將它和其它可重定位文件和共享目標文件一塊兒處理,生成另一個目標文件。其次,動態連接器(Dynamic Linker)可能將它與某個可執行文件以及其它共享目標一塊兒組合,建立進程映像。
目標文件所有是程序的二進制表示,目的是直接在某種處理器上直接執行(Linux的.so,如/lib/ glibc-2.5.so;Windows的DLL
設計

相關文章
相關標籤/搜索