linux,windows 可执行文件(ELF、PE)
生活随笔
收集整理的這篇文章主要介紹了
linux,windows 可执行文件(ELF、PE)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
很早記接觸這個縮寫英文了。它是什么意思呢?要理解這個elf文件是還是比較容易的,如果要掌握它就花點功夫。ELF (Executable And Linkable)UNIX類操作系統(tǒng)中普遍采用的目標文件格式 。
首先要知道它有什么作用:
工具接口標準委員會TIS已經(jīng)將ELF作為運行在Intel32位架構之上的各類型操作系統(tǒng)的可導出對象文件格式標準。ELF標準為開發(fā)者提供了一組橫跨多運行環(huán)境的二進制接口定義來組織軟件開發(fā) ;
ELF 標準的目的是為軟件開發(fā)人員提供一組二進制接口定義,這些接口可以延伸到多種操作環(huán)境,從而減少重新編碼、重新編譯程序的需要。接口的內(nèi)容包括目標模塊格式、可執(zhí)行文件格式以及調(diào)試記錄信息與格式等(以上的一段話引用網(wǎng)上的解釋,比較抽象,好像說什么跨操作系統(tǒng)的二進制標準???呵呵 早不到北)
在看一下這段引用:
現(xiàn)在PC平臺流行的可執(zhí)行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它們都是COFF(Common file format)格式的變種。
不光是可執(zhí)行文件(Windows的.exe和Linux下的ELF可執(zhí)行文件)按照可執(zhí)行文件格式存儲。動態(tài)鏈接庫(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及靜態(tài)鏈接庫(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可執(zhí)行文件格式存儲。它們在Windows下都按照PE-COFF格式存儲,Linux下按照ELF格式存儲。
什么又是COFF格式呢?
COFF是由Unix System V Release 3首先提出并且使用的格式規(guī)范,后來微軟公司基于COFF格式,制定了PE格式標準,并將其用于當時的Windows NT系統(tǒng)。System V Release 4在COFF的基礎上引入了ELF格式,目前流行的Linux系統(tǒng)也以ELF作為基本可執(zhí)行文件格式。這也就是為什么目前PE和ELF如此相似的主要原因,因為它們都是源于同一種可執(zhí)行文件格式COFF。
1. 可重定位文件(Relocatable File) 包含適合于與其他目標文件鏈接來創(chuàng)建可執(zhí)行文件或者共享目標文件的代碼和數(shù)據(jù)。 (Linux的*.o 文件 Windows的 *.obj文件)
2. 可執(zhí)行文件(Executable File) 包含適合于執(zhí)行的一個程序,此文件規(guī)定了 exec() 如何創(chuàng)建一個程序的進程映像。(比如/bin/bash文件;Windows的*.exe)
3. 共享目標文件(Shared Object File) 包含可在兩種上下文中鏈接的代碼和數(shù)據(jù)。首先鏈接編輯器可以將它和其它可重定位文件和共享目標文件一起處理,生成另外一個目標文件。其次,動態(tài)鏈接器(Dynamic Linker)可能將它與某個可執(zhí)行文件以及其它共享目標一起組合,創(chuàng)建進程映像。
目標文件全部是程序的二進制表示,目的是直接在某種處理器上直接執(zhí)行(Linux的.so,如/lib/ glibc-2.5.so;Windows的DLL)
跟Windows的PE文件結構類似Linux的目標文件也是由一組結構體構成的。
下面利用Windows的PE文件結構來跟Linux的執(zhí)行文件來進行一些比較。對比起來容易理解。順便“復習”一下Win PE格式。
首先要知道它有什么作用:
工具接口標準委員會TIS已經(jīng)將ELF作為運行在Intel32位架構之上的各類型操作系統(tǒng)的可導出對象文件格式標準。ELF標準為開發(fā)者提供了一組橫跨多運行環(huán)境的二進制接口定義來組織軟件開發(fā) ;
ELF 標準的目的是為軟件開發(fā)人員提供一組二進制接口定義,這些接口可以延伸到多種操作環(huán)境,從而減少重新編碼、重新編譯程序的需要。接口的內(nèi)容包括目標模塊格式、可執(zhí)行文件格式以及調(diào)試記錄信息與格式等(以上的一段話引用網(wǎng)上的解釋,比較抽象,好像說什么跨操作系統(tǒng)的二進制標準???呵呵 早不到北)
在看一下這段引用:
現(xiàn)在PC平臺流行的可執(zhí)行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它們都是COFF(Common file format)格式的變種。
不光是可執(zhí)行文件(Windows的.exe和Linux下的ELF可執(zhí)行文件)按照可執(zhí)行文件格式存儲。動態(tài)鏈接庫(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及靜態(tài)鏈接庫(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可執(zhí)行文件格式存儲。它們在Windows下都按照PE-COFF格式存儲,Linux下按照ELF格式存儲。
什么又是COFF格式呢?
COFF是由Unix System V Release 3首先提出并且使用的格式規(guī)范,后來微軟公司基于COFF格式,制定了PE格式標準,并將其用于當時的Windows NT系統(tǒng)。System V Release 4在COFF的基礎上引入了ELF格式,目前流行的Linux系統(tǒng)也以ELF作為基本可執(zhí)行文件格式。這也就是為什么目前PE和ELF如此相似的主要原因,因為它們都是源于同一種可執(zhí)行文件格式COFF。
Unix最早的可執(zhí)行文件格式為a.out格式,它的設計非常地簡單,以至于后來共享庫這個概念出現(xiàn)的時候,a.out格式就變得捉襟見肘了。于是人們設計了COFF格式來解決這些問題,這個設計非常通用,以至于COFF的繼承者到目前還在被廣泛地使用。
COFF的主要貢獻是在目標文件里面引入了“段”的機制,不同的目標文件可以擁有不同數(shù)量及不同類型的“段”。另外,它還定義了調(diào)試數(shù)據(jù)格式。
總結:看完上面的資料你是已經(jīng)知道ELF是什么作用了吧?其實就是Unix下的執(zhí)行文件和動態(tài)庫(*.so)和目標文件(*.o)文件格式。看前面的跨各類型操作系統(tǒng)。。。。呵呵有點夸張,頂多也就是Unix類型的操作系統(tǒng),比如 fedora redhat unix 等等 利用wine工具不算。
?
好了知道他有作用了。現(xiàn)在就介紹一下他的具體結構把。都是基于COFF格式發(fā)出來的。
目標文件有三種類型:1. 可重定位文件(Relocatable File) 包含適合于與其他目標文件鏈接來創(chuàng)建可執(zhí)行文件或者共享目標文件的代碼和數(shù)據(jù)。 (Linux的*.o 文件 Windows的 *.obj文件)
2. 可執(zhí)行文件(Executable File) 包含適合于執(zhí)行的一個程序,此文件規(guī)定了 exec() 如何創(chuàng)建一個程序的進程映像。(比如/bin/bash文件;Windows的*.exe)
3. 共享目標文件(Shared Object File) 包含可在兩種上下文中鏈接的代碼和數(shù)據(jù)。首先鏈接編輯器可以將它和其它可重定位文件和共享目標文件一起處理,生成另外一個目標文件。其次,動態(tài)鏈接器(Dynamic Linker)可能將它與某個可執(zhí)行文件以及其它共享目標一起組合,創(chuàng)建進程映像。
目標文件全部是程序的二進制表示,目的是直接在某種處理器上直接執(zhí)行(Linux的.so,如/lib/ glibc-2.5.so;Windows的DLL)
跟Windows的PE文件結構類似Linux的目標文件也是由一組結構體構成的。
下面利用Windows的PE文件結構來跟Linux的執(zhí)行文件來進行一些比較。對比起來容易理解。順便“復習”一下Win PE格式。
總結
以上是生活随笔為你收集整理的linux,windows 可执行文件(ELF、PE)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何向别人问问题
- 下一篇: 组装台式电脑如何重装系统图文教程