Сообщение Переполнение буфера от 14.05.2019 5:37
Изменено 14.05.2019 5:39 Буравчик
Переполнение буфера
Если я правильно понимаю, при переполнении буфера слишком длинные данные затирают в стеке адреса возврата. Это позволяет подставить и выполнить свой код.
Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.
Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А коды возврата хранить в "обычном" стеке.
Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?
Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.
Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А коды возврата хранить в "обычном" стеке.
Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?
Переполнение буфера
Если я правильно понимаю, при переполнении буфера слишком длинные данные затирают в стеке адреса возврата. Это позволяет подставить и выполнить свой код.
Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.
Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А адрес возврата хранить в "обычном" стеке.
Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?
Но почему-бы не разделить стек? Сделать отдельный стек для данных и отдельный стек для адресов возврата.
Простейший способ — организовать где-то в памяти стек и использовать его для хранения локальных переменных и параметров процедур. А адрес возврата хранить в "обычном" стеке.
Это же вроде компилятор решает, где и как хранить данные? Есть такая настройка?