Не является ли начальный адрес стека фиксированным в Linux? - PullRequest
0 голосов
/ 17 апреля 2011
unsigned long find_start(void){
    __asm__("movq %rsp, %rax");
}
int main(){
    printf ("OX%x\n" , find_start()) ;
}

Это еще один вопрос о моем предыдущем ,

, когда каждый раз, когда я запускаю программу, вывод будет разным.

не началоадрес стека исправлен в linux?

Версия ядра 2.6.18-194.el5

Обновление из комментариев: Ятеперь, пытаясь использовать эксплойт hello world, как это преодолеть? Будет ли процесс, созданный execve, использовать тот же начальный адрес стека, что и его родительский процесс?

Ответы [ 3 ]

4 голосов
/ 17 апреля 2011

Возможно, вы видите эффект рандомизации макета адресного пространства .Это функция безопасности, которая затрудняет использование переполнения стека или буфера.

0 голосов
/ 17 апреля 2011
0 голосов
/ 17 апреля 2011

Как это возможно в операционной системе, которая поддерживает несколько процессов и несколько потоков?

РЕДАКТИРОВАТЬ: я должен упомянуть то, что я поднял в комментариях: Рандомизация макета адресного пространства ,функция безопасности, которая намеренно перемешивает адрес вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...