Страницы

Поиск по вопросам

вторник, 27 ноября 2018 г.

Защита памяти при сегментной организации

Приветствую. Есть такая штука, как переполнение буффера: мы затираем адрес возврата в стеке на какой-то другой, по которому расположены инструкции, которые мы хотим выполнить. И скорее всего на адрес, который принадлежит сегменту стека (ну или кучи). Почему процессор, когда EIP указывает на адрес не из сегмента кода, не паникует и не выдает ошибку сегментации? Разве это не отслеживается флагами в дескрипторе сегментов? Википедия говорит, что такой защиты нет, но тогда возникает разумный вопрос, почему?


Ответ

По поводу дискуссии, развернувшейся в комментариях (о случайном расположении стека в памяти), можно почитать про Address Space Layout Randomization. По поводу возможности или невозможности исполнения памяти мне было интересно почитать о PaX. Случайно наткнулся на статью Касперски Переполнение буфера на системах с неисполняемым стеком, теперь знаю много умных слов :)

Комментариев нет:

Отправить комментарий