Object file (目的檔)是指compiler或assembler處理過source code之後處理的產物,因為存放著object code (目的碼,也就是machine code) 而稱為object files,Object files還沒經過linker連結之前沒有辦法直接被執行。
Object file內包含的內容主要是machine code以及其他附加的資訊
Symbol table: 包含symbol (function名稱、global variable名稱、local static variable名稱)資訊,給linker和debugger使用
Data的內容: 程式當中用到的global variable/local static variables,他們的初始值會被記錄下來
Debug information: 讓debugger使用的資料,可以在用binutils或debugger取得詳細內容
Object files的格式
Linux: ELF (Executable and Linkable Format)
Windows: PE (Portable Executable)
GNU binutils是專門用來處理object files的一套工具,binutils是GNU對這種工具的名稱,其他compilation toolchain也會提供類似工具但名稱或指令不一樣,同時binutils也可以用於處理其他compilation toolchain產生的object files,因為使用的格式為共通格式
GNU binutils中主要有兩大部分
和GNU toolchain高度相關的工具
as: GNU assembler,把assembly轉成object files的工具
ld: GNU linker,把object files連結成執行檔的工具
gold: 一個新版,速度更快的linker,只能使用於ELF格式
查看、操作object files內容的工具
addr2line: 把address轉回檔名行號
ar: 把object files打包成C library的工具
nm: 顯示symbol table的工具
objdump: 把object files內容依照指定範圍dump出來的工具
readelf: 針對ELF格式object files去讀取出object files內容的工具,功能類似於objdump