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。

Unix最早的可執行文件格式為a.out格式,它的設計非常地簡單,以至於后來共享庫這個概念出現的時候,a.out格式就變得捉襟見肘了。於是人們設計了COFF格式來解決這些問題,這個設計非常通用,以至於COFF的繼承者到目前還在被廣泛地使用。

COFF的主要貢獻是在目標文件里面引入了“段”的機制,不同的目標文件可以擁有不同數量及不同類型的“段”。另外,它還定義了調試數據格式。

 

目標文件有三種類型:
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM