метод переполнения стека - PullRequest
0 голосов
/ 27 января 2011

В некоторых операционных системах для любого процесса есть стек и куча. Оба растут навстречу друг другу. Между ними должна быть защитная полоса для проверки на перекрытие. Может кто-нибудь дать мне некоторую иллюстрацию об этом. Я хочунаписать свою собственную функцию для проверки ошибки переполнения стека.

Ответы [ 2 ]

3 голосов
/ 27 января 2011

В такой системе у вас обычно есть защитное слово или что-то подобное в верхней части кучи, что-то вроде 0xa55a или 0xdeadbeef.

Тогда периодически это защитное словопроверил, если он был поврежден.Если что-то перезаписывает память.

Теперь это может не обязательно переполнение стека, это может быть неконтролируемая запись в память.Но в обоих этих случаях что-то серьезно не так, поэтому вы также можете относиться к ним одинаково.

Конечно, более современные операционные системы могут использовать подход аппаратного обеспечения, например, в Intel.чипы.В них вы можете настроить сегмент стека на определенный размер, и, если вы попытаетесь писать вне его (используя селектор стека), вы получите ловушку.

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

1 голос
/ 27 января 2011

Многие операционные системы размещают защитную страницу (или аналогичные методы) между стеком и кучей для защиты от таких векторов атаки. Я еще не видел там канареек (метод, упомянутый paxdiablo), они в основном используются для защиты от переполнений внутри стека (иначе говоря, для защиты адреса возврата).

Защитные страницы в Windows: http://msdn.microsoft.com/en-us/library/aa366549(VS.85).aspx

В Linux некоторое время назад был интересный эксплойт, основанный на этой проблеме: http://www.h -online.com / open / news / item / Root-privileges-through-Linux-kernel-bug-Update-1061563. HTML

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