【发布时间】:2016-10-04 23:09:33
【问题描述】:
我正在尝试手写一个 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)。
在 OS X 加载之前检查 Mach-O 可执行文件的哪些功能?此信息位于何处?这些功能是否会因版本而异? (经常被引用的“OS X ABI Mach-O Reference”显然不见了。)
这是二进制文件的partially annotated 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
…
【问题讨论】:
-
另外,发布带注释的 hexdump 是否合适?我没有,因为它有 100 行长,但它们都与问题相关。
-
共享一个 hexdump 会很有用。