Ios 如何获取当前流程和其他流程的起始地址';什么是pid的堆?
如果ASLR在IOS中扮演角色并随机化堆的起始地址,那么如何从pid中获取当前进程和其他进程堆的起始地址 在“iOS内核利用”一文提供的aslr.c中,似乎您试图获取当前进程堆代码的起始地址Ios 如何获取当前流程和其他流程的起始地址';什么是pid的堆?,ios,linux,macos,process,heap,Ios,Linux,Macos,Process,Heap,如果ASLR在IOS中扮演角色并随机化堆的起始地址,那么如何从pid中获取当前进程和其他进程堆的起始地址 在“iOS内核利用”一文提供的aslr.c中,似乎您试图获取当前进程堆代码的起始地址 void* heap = malloc(0); 我测试了代码,发现返回值不尽相同。 根据ISO/IEC 9899:TC2(即C99标准),§7.20.3规定: 如果请求的空间大小为零,则行为由实现定义: 要么返回空指针,要么行为就好像大小是某个非零值,除非返回的指针不应用于访问对象 如果ASLR在IOS中
void* heap = malloc(0);
我测试了代码,发现返回值不尽相同。
根据ISO/IEC 9899:TC2(即C99标准),§7.20.3规定:
如果请求的空间大小为零,则行为由实现定义:
要么返回空指针,要么行为就好像大小是某个非零值,除非返回的指针不应用于访问对象
如果ASLR在IOS中扮演角色,并将堆的起始地址随机化
是的
那么如何从pid中获取当前进程和其他进程堆的起始地址呢
你不能(至少不容易——我想不出任何方法,除了附加GDB和检查glibc内部变量\uuu-curbrk
)
我测试了代码,发现返回值不尽相同
你为什么期望他们是一样的
在禁用ASLR的单个可执行文件中,malloc(0)
insidemain
将返回相同的值。如果启用ASLR,将获得不同的值。如果构建不同的可执行文件,则会得到不同的值
如果ASLR在IOS中扮演角色,并将堆的起始地址随机化
是的
那么如何从pid中获取当前进程和其他进程堆的起始地址呢
你不能(至少不容易——我想不出任何方法,除了附加GDB和检查glibc内部变量\uuu-curbrk
)
我测试了代码,发现返回值不尽相同
你为什么期望他们是一样的
在禁用ASLR的单个可执行文件中,
malloc(0)
insidemain
将返回相同的值。如果启用ASLR,将获得不同的值。若您构建不同的可执行文件,您将获得不同的值。Hmmm,似乎很难获得堆的起始地址。我想做的是更改其他进程变量的值,但如果在堆上分配了变量的内存,则每次进程重新启动时,其地址都会不同:(.所以我想检查变量的相对地址是否是固定的。如果偏移量是固定的,那么通过获取堆的起始地址,我就可以获取变量的地址。嗯,似乎很难获取堆的起始地址。我想做的是更改其他进程变量的值,但是如果变量的内存是allo在堆上,每次进程重新启动时,它的地址都会不同:(。所以我想检查变量的相对地址是否固定。如果偏移量固定,通过获取堆的起始地址,就可以获取变量的地址。