安卓系统是否有某种ASLR保护机制?

3

我想知道是否有人可以访问函数地址库,这些地址在程序的不同实例中是相同的?

1个回答

4

在同一设备上,地址空间布局会非常一致。zygote预加载了许多主要的系统库,并且通过派生为应用程序的子进程继承为共享映射。我想,在虚拟内存层面重新映射它们是可能的,但会产生一种动态重链接的惩罚,并且实现起来相当棘手。


1
Zygote不在虚拟内存中运行吗?如果新进程被forked,那么地址应该是相同的,对吗?(我假设共享库加载在应用程序的内存空间中?)你知道在哪里可以找到更多关于Android架构的信息吗? - Dpp
1
许多关键共享库由Zygote加载一次,然后应用程序将它们作为写时复制页面获取(通常不会这样做),因此它们除了用于记账之外不会消耗任何更多的物理内存。要将它们放在随机地址上,您需要对它们进行mremap并修复所有已加载库之间的破损链接,这将导致不仅时间成本而且必须分配私有副本其过程链接表,因为您将使用新地址更改它们。 - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接