目的碼
程序執行 |
---|
基礎概念 |
代碼類型 |
編譯策略 |
|
知名運行環境 |
著名編譯器及工具鏈 |
目標代碼(英語:Object code)指計算機科學中編譯器或匯編器處理源代碼後所生成的代碼,它一般由機器代碼或接近於機器語言的代碼組成。[1]目標文件(英語:Object file)即存放目標代碼的計算機文件,它常被稱作二進制文件(Binaries)。
目標文件包含着機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號(變量和函數的名字),此外還包括其他調試信息。[2]目標文件是從源代碼文件產生程序文件這一過程的中間產物,鏈接器正是通過把目標文件鏈接在一起來生成可執行文件或庫文件。目標文件中唯一的要素是機器代碼,例如,用於嵌入式系統的目標文件可能僅僅含有機器代碼。
目標文件格式
目標文件用以存放目標代碼和由編譯器或匯編器生成的相關數據的計算機文件格式稱為目標文件格式。
目標文件格式有許多不同的種類。最初每種類型計算機都擁有自身獨特的格式,但隨着Unix和其他可移植操作系統的問世,人們定義了例如COFF和ELF這些格式,並在不同的系統上使用它們。通常,鏈接器的輸入和輸出使用相同的文件格式,庫文件和可執行文件格式也是一樣使用相同的格式。
設計或選擇一種目標文件格式是計算系統整體設計的關鍵部分。它影響着鏈接器的性能並因此影響着程序員在開發時的總耗時;如果格式是用於可執行文件,那麼格式的設計還會影響程序的開始運行花費的時間,以及影響到系統對用戶請求的反應速度。大部分目標文件格式以區塊的方式來組織,每一區塊中都裝載着同種數據。在虛擬內存系統需要這些塊的時候,它可以通過將這些塊分頁後調入,無需進一步地處理就可使用。
最簡單的目標文件格式是DOS的COM文件格式(OBJ文件格式),它是一種僅僅由原始數據組成的文件。COM格式的文件始終被加載到某固定位置。其他的格式都由一組複雜精密的數據結構序列組成,這些格式的規範說明書一般會有許多頁。
調試信息可以是目標文件格式中的一個組成部分,就像COFF中的那樣,或是一種可能被數個目標格式使用的半獨立格式,如stabs或DWARF。
GNU計劃的BFD庫提供了一套通用的應用程序編程接口用來操縱各式各樣的目標文件格式。
典型的目標文件格式所支持的數據類型有:
- 符號起始區塊(BSS Block Started by Symbol的縮寫)
- 正文段(text segment 或譯作代碼段)
- 數據段(data segment)
主要格式
- DOS
- COM
- EXE(MZ)
- 可重定位目標模塊格式(Relocatable Object Module Format 一般稱作「OBJ文件」或「OMF」,也在微軟視窗操作系統中被一些開發工具廠商所使用)
- Unix
- 視窗(Windows)
- 其他
- IBM 360目標格式
- NetWare可加載模塊(NetWare Loadable Module 縮寫為NLM)
- OMF(VME)
- SOM(HP)
- XBE(Xbox的可執行文件格式)
- APP(Symbian OS的可執行文件格式)
- 可重定位動態目標文件格式(Relocatable Dynamic Object File Format 縮寫為RDOFF)
- Hunk(AmigaOS)
另見
參考文獻
- ^ 《什麼是目標代碼?》(正文第二節) (頁面存檔備份,存於網際網路檔案館)(英文)
- ^ BFD Internals(第八章object file的解釋) 網際網路檔案館的存檔,存檔日期2007-06-27.(英文)
外部連結
- 《链接器和加载器》(Linkers and Loaders) (頁面存檔備份,存於網際網路檔案館) John R. Levine著 (Morgan Kaufmann出版社,2000年)