目的碼
目的碼(英語: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年)