苹果自己的ASLR实施如何工作?

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

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

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


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

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

First run: <DCViewController: 0x13d4a0>
Second run: <DCViewController: 0x2880f0>
Third run: <DCViewController: 0x2a2050>

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

编辑:

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

希望这有助于=)


为了完整起见,在Apple iOS 4安全评估中做出了解决该问题工作的人是Dino Zovi。 如果别人在迪诺之前发布过(我不知道你的工作或你是谁),我很抱歉。

Zovi在Apple发布iOS安全性之前发布了他的东西。 迪诺的工作还是比较完整的。

链接地址: http://www.djcxy.com/p/10661.html

上一篇: How does Apples's own ASLR implementation work?

下一篇: What are the different target types in EDE?