跳至內容

Mach-O

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 17:26 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

'Mach-OMach'Object 檔案格式的縮寫,伊是一種用於可執行檔,目的碼,動態函式庫,核心轉儲的檔案格式。做為 a . out 格式的替代者,Mach-O 提供了閣較強的擴充性,閣提升符號表中資訊的存取速度。

Mach-O 捌為大部份是因為 Mach 核心的作業系統所使用。NeXTSTEP,Darwin 和 Mac OS X 等系統使用這種格式成做其原生會當執行檔,函式庫閣目的碼的格式。仝款使用 GNU Mach 成做其微核心的 GNU Hurd 系統使用 ELF 毋是 Mach-O 成做其標準的二進位檔案格式。

Mach-O 檔案結構

彼每一个 Mach-O 檔案包括一个 Mach-O 標頭,然後是規系列的載入命令,閣是一个抑是偌个區塊,逐塊包括零到兩百五十五个。Mach-O 使用 REL 閣定位格式控制對符號的參照。Mach-O 佇咧兩級號名的空間內底將每一个符號編碼成「東西-符號名」著,咧走揣符號的時陣採用線性搜揣法。

Mach-O 的基本結構,參加檔案中資料頁的變長「載入指令」表,嘛用佇咧 Accent 核心的可執行檔格式內底,毋過這種格式是對來的 Spice Lisp 彼个理念。

偌重架構二進位

佇咧 NeXTSTEP,OPENSTEP 和 Mac OS X 中,會當將多个 Mach-O 檔案組合進一个偌重架構二進位檔案中,用一个單獨的二進位檔案支援多種架構的指令集。比如講,一个 Mac OS X 中的多重架構二進位會當包含三十二位元和六十四位元的 PowerPC 程式碼,抑是 PowerPC 和 x 八十六的三十二位元程式碼,甚至包含三十二位元的 PowerPC 程式碼,六十四位元 PowerPC 程式碼,三十二位元 x 八十六程式碼佮六十四位元 x 八十六(AMD 六十四)。

Mach-O 的未來

因為 Darwin 十曉零(對應 Mac OS X 十曉六)著著 Mach-O 檔案的結構定義進行一寡重要的修改,所以佇遮 Mac OS X 十二分六點內底以預設選項編譯的二進位檔案干焦會當佇十二分六平台中執行。其實差異之一佇咧 Mac OS X 的連結器(` dyld `)產生的載入命令無法度為早期版本的 Mac OS X 所理解。另外一个重要改變是 Link Edit 表(\ _ \ _ LINKEDIT 段)的作用。佇十由六當中,新的 Link Edit 表中的無路用資訊會予人去除去,對而起到壓縮的作用,而且 Mac OS X 十二點五佮較早的版本袂當辨識這種新格式。共解決這个問題,佇咧連結四常需要使用 `-mmacosx-version-min=` 連結器標誌。蘋果公司作為 Mach-O 格式的維護者,推薦開發者佇建立二進位應用程式的時陣使用佮所用的對應 SDK 版本標誌。

參見

  • 大箍二進位
  • 通用二進位
  • Xcode

外部連結

  • Mach-O File Format Reference ( Apple Inc . )
  • Mach Object Files
  • Mach-O Dynamic Library Reference
  • Mach-O Manual Page
  • Mach-O Viewer