Рет қаралды 341
Ближайшая конференция: С++ Russia 2024, 24 мая (online), 2-3 июня (offline, Москва)
Подробности и билеты: jrg.su/W8skjE
- -
К появлению уязвимостей в программах могут приводить не только ошибки, допущенные программистом, или злой умысел, но и агрессивные оптимизации, применяемые компилятором. Такая опасность возникает прежде всего для кода, содержащего конструкции с неопределенным поведением (undefined behavior), появление которых в программе может быть связано как с недостаточным знанием стандарта языка C, так и с попытками «эффективно» реализовать некоторую семантику (что иногда даже «срабатывает» для конкретной версии компилятора для заданной архитектуры). Тем не менее компилятор вправе выполнять оптимизации исходя из того, что исходный код написан в строгом соответствии со стандартом, и что в нем отсутствует неопределенное поведение.
Дмитрий рассмотрел примеры кода с различными видами неопределенного поведения, а также неочевидные эффекты от его оптимизации современными версиями GCC и Clang. Он также показал разработанный ими безопасный компилятор на основе GCC, цель которого - предотвращать некорректные оптимизации кода, содержащего неопределенное поведение. Кроме того, спикер рассказал и про другие методы улучшения безопасности кода, применяемые как в безопасном компиляторе, так и в стандартном GCC, а также их влияние на производительность.
Скачать презентацию с сайта С++ Russia - jrg.su/ATjyXh