Я пытаюсь вручную написать исполняемый файл Mach-O. Есть три команды загрузки:
LC_SEGMENT_64
загрузка__PAGEZERO
LC_SEGMENT_64
загрузка__TEXT
с одной секцией__text
LC_UNIXTHREAD
с соответствующим образом настроеннымrip
Каждая команда соответствует структурам в mach/loader.h
и связанных заголовках. otool -l
перечисляет информацию, как и ожидалось, и не сообщает об ошибках. По общему мнению, это правильно сформированный объектный файл, но OS X 10.10.5 завершает задачу (SIGKILL).
Какие функции исполняемого файла Mach-O проверяются перед тем, как OS X загрузит его? Где находится эта информация? Изменяются ли эти функции от версии к версии? (Очевидно, отсутствует часто цитируемый «Справочник OS X ABI Mach-O».)
Вот частично аннотированный шестнадцатеричный дамп двоичного файла.
otool
проверка работоспособности (отрывок):
$ otool -l machtest
machtest:
Load command 0
cmd LC_SEGMENT_64
cmdsize 72
segname __PAGEZERO
…
Load command 1
cmd LC_SEGMENT_64
cmdsize 152
segname __TEXT
…
Section
sectname __text
segname __TEXT
…
Load command 2
cmd LC_UNIXTHREAD
…