苹果公司自己的ASLR实施如何运作?

tim*_*tee 7 linux memory aslr ios

根据ASLR(地址空间布局随机化),它在每次进程启动时提供随机堆栈和堆分配以及页面加载,并随机化对象放置在给定进程的虚拟空间中的地址.

但是在ios上运行的应用程序中,我创建了一个名为ObjectA的对象,经过几次重载后,我发现ObjectA的地址都是一样的,没有随机化.

苹果公司自己的ASLR实施如何运作?为什么ObjectA的地址都一样?

Gre*_*nds 3

“多次重新加载”是什么意思?您应该明确退出应用程序,因为多任务处理可能会重新打开同一进程。

例如。这是我打印出 UIViewController 实例地址的应用程序之一,您可以看到该对象的地址在每次执行中都是不同的。

First run: <DCViewController: 0x13d4a0>
Second run: <DCViewController: 0x2880f0>
Third run: <DCViewController: 0x2a2050>
Run Code Online (Sandbox Code Playgroud)

(我不认为是这种情况,但在 XCode 中,有一个选项可以在“构建设置”下启用 PIE(位置独立可执行文件),它被称为“不要创建位置独立可执行文件”,您可以轻松找到它,但输入“pie” ”在搜索框中。此选项应设置为否)。

编辑:

此外,如果部署目标 >= 4.3,Xcode 只会生成 PIE 二进制文件

希望这有帮助 =)