編譯階段:`源碼 (.c) → 預處理 (.i) → 編譯 (.s 組語) → 組譯 (.obj/.o)`。
**.obj 內容**:機器指令 (二進制)、符號表 (函式/變數名、型別、可見性)、重定位條目 (外部符號引用、段偏移)、除錯資訊 (DWARF/CodeView/PDB)、**無原始碼**。
| 平台/工具鏈 | 檢視機器碼 (反組譯) | 檢視符號/段/重定位 | 檢視除錯資訊 |
|---|---|---|---|
| GCC/Clang (Linux/macOS/MinGW) | `objdump -d file.obj` / `objdump -D file.obj` (全段) | `nm -C file.obj` (符號表)、`readelf -S file.obj` (段表)、`objdump -r file.obj` (重定位) | `objdump -g file.obj` / `readelf --debug-dump=info file.obj` |
| MSVC (Windows) | `dumpbin /DISASM file.obj` | `dumpbin /SYMBOLS file.obj`、`dumpbin /SECTIONS file.obj`、`dumpbin /RELOCATIONS file.obj` | `dumpbin /PDB:file.pdb` (需對應 .pdb) |
| 通用圖形化 | IDA Pro / Ghidra / Binary Ninja / Hopper — 載入 .obj,自動識別函式、交叉引用、控制流圖 | 同上 | 同上 |
| 線上快速查看 | Compiler Explorer — 貼上源碼,即時看對應組語 (支援 GCC/Clang/MSVC/ICC/Zapcc,可勾選「Show object file」) | — | — |
**現代工作流不看 .obj,看源碼除錯**:
.obj 是**給鏈接器看的中間產物**,人類讀取需反組譯工具 (`objdump`/`dumpbin`/IDA/Ghidra)。**日常開發請直接用源碼級除錯器**,只在鏈接錯誤、優化驗證、逆向分析、固件提取等特定場景才需檢視 .obj。