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

时间:2012-04-16 01:24:13

标签: ios linux macos process heap

如果ASLR在IOS中扮演角色并随机化堆的起始地址,那么如何从pid获取当前进程和其他进程堆的起始地址?

在论文提供的aslr.c中:“iOS内核漏洞利用”,似乎是你试图让当前进程的堆代码的起始地址爆炸。

void* heap = malloc(0);

我测试代码,发现返回值并不完全相同。 根据ISO / IEC 9899:TC2(即C99标准),§7.20.3规定:

如果请求的空间大小为零,则行为是实现定义的: 返回空指针,或者行为就像大小是非零值一样,但返回的指针不应用于访问对象。

1 个答案:

答案 0 :(得分:1)

  

如果ASLR在IOS中扮演角色并随机化堆的起始地址,

确实如此。

  

然后如何从pid获取当前进程和其他进程堆的起始地址?

你不能(至少不容易 - 我想不出任何方法,缺少附加GDB和检查glibc内部变量__curbrk)。

  

我测试代码,发现返回值不完全相同

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

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