gpt4 book ai didi

ios - Cocoa Touch 框架不使用与位置无关的代码吗?

转载 作者:行者123 更新时间:2023-11-29 05:27:53 25 4
gpt4 key购买 nike

我注意到,当使用 otool 检查 Mach header 时,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 标志时,我应该如何检查我的框架是否使用位置无关代码?!它仅报告应用程序二进制文件。

这让我很困惑。希望有人能解释一下...

最佳答案

来自 :

#define MH_PIE 0x200000         /* When this bit is set, the OS will
load the main executable at a
random address. Only used in
MH_EXECUTE filetypes. */

注意:“仅用于 MH_EXECUTE 文件类型。”

只有可执行文件才有 PIE/非 PIE 区别。 Dylib 和 bundle 则不然。它们始终隐式地与位置无关。

关于ios - Cocoa Touch 框架不使用与位置无关的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57980449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com