Was ist erforderlich, damit eine ausführbare Mach-O-Datei geladen werden kann?
Ich versuche, eine ausführbare Mach-O-Datei von Hand zu schreiben. Es gibt drei Ladebefehle:
LC_SEGMENT_64
Wird geladen__PAGEZERO
LC_SEGMENT_64
Wird geladen__TEXT
, mit einem einzelnen__text
SektioLC_UNIXTHREAD
mit einem entsprechend gesetztenrip
Jeder Befehl entspricht den Strukturen inmach/loader.h
und verwandte Header.otool -l
listet die Informationen wie erwartet auf und meldet keine Fehler. Es handelt sich in jedem Fall um eine wohlgeformte Objektdatei, doch OS X 10.10.5 beendet die Task (SIGKILL).
Welche Funktionen einer ausführbaren Mach-O-Datei werden überprüft, bevor sie von OS X geladen wird? Wo befinden sich diese Informationen? Wechseln diese Funktionen von Version zu Version? (Die oft zitierte "OS X ABI Mach-O-Referenz" fehlt anscheinend.)
Hier ist eineilweise kommentierter Hexdu der Binärdatei.
otool
Sanity Check (Auszug):
$ 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
…