Android上有某种ASLR保护功能吗?

问题描述:

我想知道某人是否可以访问函数地址相同的程序库到另一个程序库?Android上有某种ASLR保护功能吗?

从运行到在同一设备上运行的地址空间布局将非常一致。很多主要的系统库都是由zygote预先加载的,所以它们被共享映射继承,这些共享映射是由它们分离出来以区分为应用程序的。我猜想在虚拟内存级重新映射它们是可能的,但会产生一种动态重新链接的惩罚,并且实现起来相当棘手。

+1

zygote不在虚拟内存中运行吗?如果新进程分叉,它应该是相同的地址? (我假设共享库被加载到应用程序的内存空间中?)您知道我可以在哪里找到有关Android架构的更多信息吗? – Dpp 2011-05-10 05:16:22

+1

许多共享密钥库都由zygote加载一次,然后应用程序将它们作为写时复制页面(通常不会) - 因此它们不会花费除计费以外的任何其他物理内存。为了将它们放在随机地址中,你必须将它们映射并修复加载的库之间的所有断开的链接,这将导致不仅时间成本,而且必须分配其过程链接表的私人副本,因为你会用新地址更改它们。 – 2011-05-10 08:35:55