X86 反彙編/Mac OS X
外觀
< X86 反彙編
MacOS(以前稱為 OS X)使用 Mach-O 檔案格式來編碼可執行檔案、目標檔案和共享庫(.dylib 檔案)。在這裡,我們將關注 Mach-O 格式的 64 位版本。Mach-O 檔案中的大部分資料是“段”和“節”,其中段是節的容器,儲存有關每個節的資訊。節本身是資料的容器。Mach-O 檔案有五個主要結構
| 結構 | 描述 |
|---|---|
| 頭部 | 包含有關檔案結構的用途和大小的資訊 |
| 載入命令 | 所有段和節的宣告 |
| 資料 | 檔案的實際內容(例如,資料節、文字節)。 |
| 符號表 | 指示每個符號在檔案中的位置 |
| 字串表 | 包含每個符號的名稱 |
請注意,每個結構都是一個完整的位元組序列,它們之間沒有空隙。
頭部是檔案的第一部分,它包含 8 個無符號 32 位整數
| 名稱 | 用途 | 位元組序 | 典型值 |
|---|---|---|---|
| 魔數 | 檔案的魔數 | 大端序 | 64 位架構為 0xFEEDFACF |
| CPU 型別 | 可執行檔案的目標 CPU 型別 | 小端序 | x86_64 為 0x01000007 |
| CPU 子型別 | 使用的特定 CPU 型別 | 小端序 | 所有 x64 CPU 為 0x00000003 |
| 檔案型別 | 檔案用途 | 小端序 | 目標檔案為 0x00000001,可執行檔案為 0x00000002 |
| 載入命令數量 | 載入命令的數量(不包括節頭部) | 小端序 | 變數 |
| 載入命令大小 | 載入命令佔用的位元組數 | 小端序 | 變數 |
| 標誌 | 額外的檔案資訊 | 小端序 | 0x00000000 |
| 保留 | 無實際用途 | 小端序 | 0x00000000 |