如果ASLR在IOS中扮演角色并随机化堆的起始地址,那么如何从pid获取当前进程和其他进程堆的起始地址?
在论文提供的aslr.c中:“iOS内核漏洞利用”,似乎是你试图让当前进程的堆代码的起始地址爆炸。
void* heap = malloc(0);
我测试代码,发现返回值并不完全相同。 根据ISO / IEC 9899:TC2(即C99标准),§7.20.3规定:
如果请求的空间大小为零,则行为是实现定义的: 返回空指针,或者行为就像大小是非零值一样,但返回的指针不应用于访问对象。
答案 0 :(得分:1)
如果ASLR在IOS中扮演角色并随机化堆的起始地址,
确实如此。
然后如何从pid获取当前进程和其他进程堆的起始地址?
你不能(至少不容易 - 我想不出任何方法,缺少附加GDB和检查glibc内部变量__curbrk
)。
我测试代码,发现返回值不完全相同
你为什么期望它们是一样的?
在单个可执行文件中,如果禁用了ASLR,malloc(0)
内的main
将返回相同的值。如果启用ASLR,您将获得不同的值。如果您构建不同的可执行文件,您将获得不同的值。