Перейти к содержанию

Mach-O

Материал из Википедии — свободной энциклопедии
Mach-O
Расширение .без расширения, .o, .dylib, .app
Разработчик Университет Карнеги — Меллон/Apple Inc.
Последний выпуск
  • 64bit
Тип формата двоичный, исполняемый, объектный, динамическая библиотека, дамп памяти
Содержит исполняемый код архитектур ARM, SPARC, PA-RISC, PowerPC, дампы памяти.

Mach-O (сокращение от Mach object) — формат исполняемых и объектных файлов, динамических библиотек и дампов памяти, использующийся в операционных системах Apple Inc. и некоторых других. Был введён вместо формата a.out и предоставляет большие возможности для расширяемости и более быстрый доступ к информации в таблице символов.

Mach-O используется в большинстве систем, основанных на ядре Mach, например NeXTSTEP, iOS и Mac OS X. В GNU Hurd, основанном на микроядре GNU Mach, в качестве стандартного формата двоичных файлов используется ELF, а не Mach-O.

Заголовок файла

[править | править код]
Заголовок файла Mach-O[1]
СмещениеБайтыОписание
04Магическое число
44Тип ЦП
84Подтип ЦП
124Тип файла
164Количество команд загрузки
204Размер команд загрузки
244Флаги
284Зарезервировано (только для 64-бит)

Магическое число для 32-битного кода — 0xfeedface, а для 64-битных архитектур — 0xfeedfacf.

Зарезервированное значение присутствует только в 64-битных файлах Mach-O. Оно зарезервировано для будущего использования или расширения 64-битного заголовка.

Тип ЦП указывает архитектуру набора инструкций для кода. Если файл предназначен для 64-битной версии архитектуры набора инструкций, значение типа ЦП имеет установленный бит 0x01000000. Если файл предназначен для 64-битной версии архитектуры набора инструкций, но с 32-битными указателями, значение типа ЦП имеет установленный бит 0x02000000.

Значения типа ЦП следующие:[2]

Тип ЦП
ЗначениеТип ЦП
0x00000001VAX
0x00000002ROMP
0x00000004NS32032
0x00000005NS32332
0x00000006MC680x0
0x00000007x86
0x00000008MIPS
0x00000009NS32352
0x0000000BHP-PA
0x0000000CARM
0x0000000DMC88000
0x0000000ESPARC
0x0000000Fi860 (big-endian)
0x00000010i860 (little-endian) или, возможно, DEC Alpha[3]
0x00000011RS/6000
0x00000012PowerPC / MC98000
0x00000018RISC-V

Примечания

[править | править код]