1

如果ASLR在IOS中发挥作用,随机化了heap的起始地址,那么如何从pid中获取当前进程和其他进程的heap的起始地址呢?

在随论文提供的 aslr.c 中:“iOS 内核开发”,似乎您试图获取当前进程的堆代码的起始地址自爆。

void* heap = malloc(0);

我测试了代码,发现返回值都不一样。根据 ISO/IEC 9899:TC2(即 C99 标准),§7.20.3 规定:

如果请求的空间大小为零,则行为是实现定义的:要么返回空指针,要么行为好像大小是某个非零值,但返回的指针不应用于访问对象.

4

1 回答 1

1

如果ASLR在IOS中发挥作用,随机化堆的起始地址,

确实如此。

那么如何从pid中获取当前进程和其他进程堆的起始地址呢?

你不能(至少不容易——我想不出任何方法,除了附加 GDB 和检查 glibc-internal variable __curbrk)。

我测试代码,发现返回值不一样

为什么你期望它们是一样的?

在禁用 ASLR 的单个可执行文件中,malloc(0)内部main将返回相同的值。如果启用 ASLR,您将获得不同的值。如果您构建不同的可执行文件,您将获得不同的值。

于 2012-04-16T02:33:08.273 回答