Мачо - Mach-O

Мачо
Значок исполняемого двоичного файла Mac OS X
Расширение имени файла
никто, .o, .dylib, .bundle
Единый идентификатор типа (UTI)com.apple.mach-o-binary
РазработанУниверситет Карнеги Меллон, Apple Inc.
Тип форматаДвоичный, исполняемый файл, объект, общие библиотеки, дамп ядра
Контейнер дляРУКА, SPARC, PA-RISC, PowerPC и x86 исполняемый файл код, дампы образов памяти

Мачо, Короче для Мах объект формат файла, это формат файла для исполняемые файлы, объектный код, общие библиотеки, динамически загружаемый код и дампы керна. Замена а. выход формат, Mach-O предлагает больше расширяемость и более быстрый доступ к информации в таблица символов.

Mach-O используется в большинстве систем на базе Ядро Маха. Следующий шаг, macOS, и iOS являются примерами систем, которые используют этот формат для собственных исполняемых файлов, библиотек и объектного кода.

Макет файла Mach-O

Каждый файл Mach-O состоит из одного заголовка Mach-O, за которым следует серия команд загрузки, за которыми следуют один или несколько сегментов, каждый из которых содержит от 0 до 255 разделов. Mach-O использует REL переезд формат для обработки ссылок на символы. При поиске символов Mach-O использует двухуровневую пространство имен который кодирует каждый символ в пару «объект / имя символа», которую затем выполняет линейный поиск, сначала по объекту, а затем по имени символа.[1]

Базовая структура - список «команд загрузки» переменной длины, которые ссылаются на страницы данных в другом месте файла.[2]- также использовался в формате исполняемого файла для Акцент.[нужна цитата ] Формат файла Accent, в свою очередь, был основан на идее от Spice Lisp.[нужна цитата ]

Бинарные файлы с несколькими архитектурами

Под Следующий шаг, ОТКРЫТЬ, macOS, и iOS, несколько файлов Mach-O можно объединить в двоичный файл с несколькими архитектурами. Это позволяет одному двоичному файлу содержать код для поддержки нескольких архитектур наборов команд. Например, многоархитектурный двоичный файл для iOS может иметь 6 архитектур наборов инструкций, а именно ARMv6 (для iPhone, 3G и 1/2 поколения Ipod Touch ), ARMv7 (для iPhone 3GS, 4, 4S, iPad, 2, 3-е поколение и iPod touch 3–5-го поколения), ARMv7s (для iPhone 5 и iPad (4-го поколения) ), ARMv8 (для айфон 5с ), x86 (для симулятора iPhone на 32-битных машинах) и x86_64 (для 64-битного симулятора).[нужна цитата ]

Минимальная версия ОС

С введением Mac OS X 10.6 платформе файл Mach-O претерпел значительные изменения, в результате чего двоичные файлы, скомпилированные на компьютере под управлением 10.6 или новее, становятся (по умолчанию) исполняемыми только на компьютерах под управлением Mac OS X 10.6 или новее. Разница связана с командами загрузки, которые динамический компоновщик в предыдущих версиях Mac OS X не понимает. Еще одно существенное изменение формата Mach-O - это изменение того, как работают таблицы редактирования ссылок (находятся в разделе __LINKEDIT). В версии 10.6 эти новые таблицы редактирования ссылок сжимаются путем удаления неиспользуемых и ненужных битов информации, однако Mac OS X 10.5 и более ранние версии не могут читать этот новый формат таблицы редактирования ссылок. Чтобы сделать исполняемые файлы с обратной совместимостью, можно использовать флаг компоновщика «-mmacosx-version-min =».

Другие реализации

Некоторые версии NetBSD была добавлена ​​поддержка Mach-O как часть реализации двоичной совместимости, которая позволяла запускать некоторые двоичные файлы Mac OS 10.3.[3][4]

Для Linux загрузчик Mach-O написал Шиничиро Хамаджи.[5] который может загружать бинарные файлы 10.6. Как более обширное решение на основе этого загрузчика, Любимый проект стремится предоставить полную среду, позволяющую приложениям OS X работать в Linux.

Для Рубин язык программирования, рубиновый мачо[6] Библиотека предоставляет реализацию двоичного анализатора и редактора Mach-O.

Смотрите также

использованная литература

  1. ^ «Справочник по формату файла OS X ABI Mach-O». Apple Inc. 4 февраля 2009 г. Архивировано с оригинал 19 августа 2009 г.. Получено 27 апреля, 2016.
  2. ^ Авадис Теванян младший; Ричард Ф. Рашид; Майкл В. Янг; Дэвид Б. Голуб; Мэри Р. Томпсон; Уильям Болоски; Ричард Санси. "Интерфейс Unix для совместно используемой памяти и файлов, отображаемых в памяти под Mach": 8. Цитировать журнал требует | журнал = (Помогите)
  3. ^ Эммануэль Дрейфус (20 июня 2006 г.). "Бинарная совместимость Маха и Дарвина [sic] для NetBSD / powerpc и NetBSD / i386 ". Получено 18 октября, 2013.
  4. ^ Эммануэль Дрейфус (сентябрь 2004 г.), Двоичная совместимость Mac OS X с NetBSD: проблемы и реализация (PDF)
  5. ^ Шиничиро Хамадзи, Загрузчик Mach-O для Linux - я писал ...
  6. ^ Уильям Вудрафф, Библиотека на чистом Ruby для анализа файлов Mach-O.

внешние ссылки