Страницы

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

вторник, 15 января 2019 г.

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

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


Ответ

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

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

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