Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Правильная проверка кода (code inspection)

#cpp


Здравствуйте, ХэшКодовцы!
Стоит задача проинспектировать некоторый достаточно объемный C++ код, который не
может быть откомпилирован (нами). Т.е. грубо нам доступен исходный код и готовое решение
в виде устройства, с интегрированным кодом.
Необходимо найти возможные ошибки, связанные с переполнением буфера в сим коде. Так
как знания C++ у меня заканчиваются на уровне простейших задач и алгоритмов, хотя по
большому счету в данном проекте больше и не нужно, хотел бы спросить, как наиболее
оптимально выполнить сей поиск?
Понятное дело, что особое внимание необходимо уделить любым видам массивов и копированию
памяти, но как быть оптимальным?
Спасибо.    


Ответы

Ответ 1



Воспользоваться каким-либо решением для статического анализа кода, лично я рекомендую PVS Studio. Возможно, Вы также обнаружите какие-либо другие ошибки, потенциально приводящие к прописи в памяти. Найти и тщательно проанализировать все референсы на небезопасные функции типа memset, memcpy и т.п. Сделать поиск по числовым константам в коде, проверить все места использования переменных типа int, std::size_t и их альясов, которые могут потенциально приводить к вычислению неправильного смещения в буферах памяти, и, как следствие, ошибкам. (Идеальный вариант в вакууме) Собрать небольшой тестовый фреймворк и отдельно скомпилировать и протестировать критичные к ошибкам компоненты кода. В случае, если Вам удастся реализация тестового сендбокса / mock-объекта, то ошибки типа buffer overflow можно элементарно словить классическими способами - CrtDbg или valgrind. В случае, если есть тестовый фреймворк, то может также подойти методика fuzzing-тестирования. Все, естественно, зависит от качества review, который вы надеетесь получить в итоге. Вообще говоря, нахождение ошибок типа buffer overflow в произвольно взятом коде без возможности его скомпилировать - это не самая простая задача. Может быть все-таки существует способ каким-либо образом собрать данный код под дебажным рантаймом с автоматическим нахождением memory leak'ов и прописей мимо памяти?

Комментариев нет:

Отправить комментарий