Утилита Stack предотвращает опасные потери кода Си при компиляции

16:15 22.10.2013

|   1259 прочтений



Утилита StackСпециалисты Массачусетского технологического института написали утилиту Stack, помогающую не «потерять» ценные проверки программ на Си/С++ на защищенность, которые компиляторами могут быть приняты за «мертвый» — никогда не исполняемый — код.

Типичный пример, объясняют авторы утилиты, — упрощенная проверка на целочисленное переполнение «if a + b < a» вместо «if a > int_max — b»; программисты могут пользоваться первым вариантом, рассчитывая, что в случае превышения максимального для целых чисел объема памяти лишние биты значения суммы будут просто «отрезаться», и в результате получится меньшее число. Однако, некоторые современные компиляторы вместо важной проверки «видят» код, который никогда не выполнится, и отбрасывают его.

Stack же «знает» все подобные приемы, а также код, для которого поведение языка программирования не определено спецификацией, и, просмотрев вашу программу, укажет на все возможные в этой связи ошибки. Утилита работает в два прохода — на первом ищется только мертвый код, на втором — также неопределенное поведение. Фрагменты, которые были «отрезаны» на втором проходе, но не на первом, отмечаются как потенциально проблемные. Программисты Intel, пользующиеся Stack, признают, что у утилиты чрезвычайно низкий уровень ложно-положительных срабатываний.


Теги: Информационная безопасность Digital Life Программное обеспечение


На ту же тему: