2012-04-16 1 views
1

Если ASLR играет роль в IOS и рандомизирует начальный адрес кучи, то как получить начальный адрес текущего процесса и кучу процесса из pid?Как получить начальный адрес текущего процесса и кучу процесса из pid?

В aslr.c прилагается бумага: «iOS kernel Exploitation», кажется, что вы пытаетесь получить начальный адрес кода кучи текущего процесса.

void* heap = malloc(0); 

Я проверяю код, обнаруживаю, что возвращаемое значение не является одинаковым. Согласно ISO/IEC 9899: СК2 (т.е. стандарт C99), §7.20.3 гласит:

Если размер запрашиваемого пространства равен нулю, то поведение определяется реализацией: либо возвращается нулевой указатель , или поведение такое, как если бы размер был некотором ненулевым значением, за исключением того, что возвращаемый указатель не должен использоваться для доступа к объекту.

ответ

1

Если ASLR играют определенную роль в IOS и рандомизации начальный адрес кучи,

Он делает.

то как получить начальный адрес текущего процесса и кучу процесса из pid?

Вы не можете (по крайней мере, не так легко - я не могу думать о какой-либо метод, уступающий крепления GDB и изучение Glibc-внутренней переменной __curbrk).

Я проверить код, найти, что возвращаемое значение не все равно

Почему вы ожидаете их быть такими же?

В одном исполняемый файл, с ASLR инвалидов, malloc(0) внутри main возвращает то же значение. Если вы включите ASLR, вы получите разные значения. Если вы создадите разные исполняемые файлы, вы получите разные значения.

+0

Хммм, кажется, что получить начальный адрес кучи трудно. То, что я хочу сделать, это изменить значение переменной другого процесса, но если память переменной выделена в куче, ее адрес будет отличаться каждый раз, когда процесс перезагружается :(Поэтому я хочу проверить, относится ли относительная переменная адрес фиксирован. Если смещение фиксировано, получив начальный адрес кучи, я могу получить адрес переменной. – zsounder

Смежные вопросы