我试图手写一个Mach-O可执行文件.有三个加载命令:
LC_SEGMENT_64 装载 __PAGEZEROLC_SEGMENT_64装载__TEXT,单个__text部分LC_UNIXTHREAD 适当的设置 rip每个命令都匹配结构mach/loader.h和相关标头.otool -l按预期列出信息,不报告任何错误.从各方面来看,它是一个格式良好的目标文件 - 但OS X 10.10.5终止了任务(SIGKILL).
在OS X加载之前,会检查Mach-O可执行文件的哪些功能?这些信息在哪里?这些功能是否会将版本更改为版本?(经常引用的"OS X ABI Mach-O参考"显然是缺失的.)
这是二进制文件的部分注释hexdump.
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
…
Run Code Online (Sandbox Code Playgroud)