我正在分析 iOS 9.3.3 中可执行 Mach-O 文件的加载命令部分,Twitter 应用程序用于说明。
# otool -hV Twitter
Twitter:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 16777228 0 0x00 EXECUTE 49 4208 NOUNDEFS DYLDLINK TWOLEVEL PIE
我读过每个可执行文件都包含 LC_UNIXTHREAD 命令,该命令负责启动二进制文件的主线程。但是,在检查的文件中没有这样的命令。
# otool -l Twitter | grep LC_
cmd LC_SEGMENT_64
cmd LC_SEGMENT_64
cmd LC_SEGMENT_64
cmd LC_SEGMENT_64
cmd LC_SYMTAB
cmd LC_DYSYMTAB
cmd LC_LOAD_DYLINKER
cmd LC_UUID
cmd LC_LOAD_DYLIB
cmd LC_LOAD_DYLIB
cmd LC_LOAD_DYLIB
[...repetition omitted...]
cmd LC_RPATH
cmd LC_RPATH
cmd LC_CODE_SIGNATURE
我不明白为什么它不在那里。它与此应用程序以移动用户权限运行或它是第三方的专有应用程序有什么共同之处吗?我发现这个 LC 命令例如用于 /bin/ls,但不适用于任何经过测试的专有应用程序。