【发布时间】:2019-09-17 18:56:59
【问题描述】:
我注意到,在使用otool 检查 Mach 标头时,Cocoa Touch 框架从未设置过PIE 标志,尽管我已经设置了“生成位置相关的可执行文件”和“生成位置相关的代码”在 Xcode 中为 NO。不过,这是我从otool 得到的输出:
otool -hv framework_binary
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 ARM64 ALL 0x00 DYLIB 16 1560 NOUNDEFS DYLDLINK TWOLEVEL NO_REEXPORTED_DYLIBS
如您所见,PIE 标志不存在。但是,在检查应用程序二进制文件时,PIE 现在就在那里:
otool -hv application_binary
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 ARM64 ALL 0x00 EXECUTE 24 3088 NOUNDEFS DYLDLINK TWOLEVEL PIE
谁能解释一下?
我读过很多人在将他们的应用程序上传到 App Store 时遇到问题,因为他们的应用程序使用的框架没有使用与位置无关的代码(例如,请查看 here)。这让我想知道当otool 似乎从未报告框架二进制文件的PIE 标志时,我应该如何检查我的框架是否使用与位置无关的代码?!它只报告应用程序二进制文件。
这让我很困惑。我希望有人能解释一下...
【问题讨论】:
标签: ios xcode dylib ios-frameworks fpic