¿Qué se requiere para que se cargue un ejecutable Mach-O?
Estoy intentando escribir a mano un ejecutable Mach-O. Hay tres comandos de carga:
LC_SEGMENT_64
cargando__PAGEZERO
LC_SEGMENT_64
cargando__TEXT
, con un solo__text
secciónLC_UNIXTHREAD
con un conjunto apropiadorip
Cada comando coincide con las estructuras enmach/loader.h
y encabezados relacionados.otool -l
enumera la información como se esperaba y no informa ningún error. Según todas las cuentas, es un archivo de objeto bien formado, pero OS X 10.10.5 finaliza la tarea (SIGKILL).
¿Qué características de un ejecutable Mach-O se verifican antes de que OS X lo cargue? ¿Dónde se encuentra esta información? ¿Estas características cambian de versión a versión? (Aparentemente falta la "Referencia de OS-X ABI Mach-O" a menudo citada).
Aquí hay unhexdump parcialmente anotado del binario
otool
control de cordura (extracto):
$ 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
…