Я думаю, что это невозможно.
Похоже, что нет стандартных команд, редактирующих объектный файл Mach-O (который включает исполняемые файлы).Команда otool
позволяет вам просматривать структуру такого файла (используйте otool -l
), но это все.
Структура объектного файла Mach-O задокументирована в Appleссылка на сайт .Таким образом, объектный файл Mach-O имеет следующую структуру:
- заголовок, после которого
- последовательность «команд загрузки», за которой следует
- последовательность «сегментов» (некоторые из команд загрузки отвечают за указание на смещения сегментов в файле)
Сегменты содержат ноль или более «секций».Считается, что команды header и load находятся в первом сегменте файла, перед любым из разделов этого сегмента.Есть несколько дюжин задокументированных команд загрузки и другие команды, определенные в соответствующем заголовочном файле, поэтому они явно закрытые.
Добавление раздела подразумевает изменение длины сегмента.Если бы раздел не был очень маленьким, для этого потребовалось бы вставить следующий сегмент в файл.Это нет-нет, потому что партия команд загрузки относится к данным в файле с абсолютными смещениями от начала файла (в отличие, скажем, от начала сегмента или раздела, который содержитих), так что перемещение сегментов в предполагаемом редакторе Mach-O потребовало бы исправления большого количества смещений.Это выглядит нелегко.
В Интернете есть один или два средства просмотра файлов Mach-O, но ни один из них не сильно отличается от otool
, насколько я вижу (это не особенно сложно.Я написал большинство из них сегодня днем, пытаясь понять формат).Есть по крайней мере один редактор Mach-O, но он, похоже, не делает ничего такого, чего не делал lipo
(называемого 'moatool', но источник, похоже, исчез из кода Google).
Ну что ж.Полагаю, пришло время найти план Б.