title

text

Александр Рябиков
Александр Рябиков Системный архитектор ПАК
20:30 26 ноября
60 мин

Почему от ошибки переполнения (исчерпания) стека в C++ не нужно специально защищаться?

 Все методы защиты стека от переполнения (исчерпания) направлены на выявление самого факта этого события, т.е. они ловят момент, когда память стека уже закончилась и продолжение выполнения программы становится невозможным. А что будет, если защиту стека от переполнения реализовать как проверку свободного места на стеке перед его использованием, пока стек ещё не разрушен? Тогда такую ошибку можно было бы реализовать как обычное программное исключение и корректно его обработать изнутри приложения вместо аварийного завершения программы. Но если эта идея настолько простая и лежит на поверхности, то почему это до сих пор не реализуется разработчиками компиляторов С++, а приложения при переполнении стека продолжают завершаться с Segmentation fault?
Надеюсь, что доклад будет полезен разработчикам прикладного и системного ПО, специалистам по безопасности и интересующимся теорией компиляторов на примере плагина для clang.

Другие доклады