Информация об изменениях

Сообщение Переполнение буфера от 14.05.2019 5:37

Изменено 14.05.2019 5:39 Буравчик

Переполнение буфера
Если я правильно понимаю, при переполнении буфера слишком длинные данные затирают в стеке адреса возврата. Это позволяет подставить и выполнить свой код.

Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.

Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А коды возврата хранить в "обычном" стеке.

Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?
Переполнение буфера
Если я правильно понимаю, при переполнении буфера слишком длинные данные затирают в стеке адреса возврата. Это позволяет подставить и выполнить свой код.

Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.

Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А адрес возврата хранить в "обычном" стеке.

Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?