Abstract

Svace is a static analysis tool for bug detection in C/C++/Java source code. To analyze a program, Svace performs an intra-procedure analysis of individual functions, starting from the leaves of a call-graph and moving towards the roots, and uses summaries of previously analyzed procedures at call-cites. In this paper, we overview the approaches and techniques employed by Svace for the intra-procedural analysis. This phase is performed by an analyzer engine and an extensible set of detectors. The core engine employs a symbolic execution approach with state merging. It uses value numbering to reduce the set of symbolic expressions, maintains points-to relationship graph for memory modeling, and performs strong and weak updates of program values. Detectors are responsible for discovering and reporting bugs. They calculate different properties of program values using a variety of abstract domains. All detectors work simultaneously orchestrated by the engine. Svace analysis is unsound and employs a variety of heuristics to speed-up. We designed Svace to analyze big projects (several MLOCs) in just a few hours and report as many warnings as possible, while keeping a good quality of reports ≥ 65 of true positives). For example, Tizen 5.5 (20MLOC) analysis takes 8.6 hours and produces 18,920 warnings, more than 70% of which are true-positive.

Highlights

  • Статический анализатор Svace осуществляет поиск ошибок в программах, написанных на языках C/C++/Java [1, 2]

  • В наиболее простой реализации ссылки обозначают адреса локальных переменных, про которые точно известно, что они не равны друг другу

  • Research interests: static analysis, symbolic execution, SMT solvers

Read more

Summary

Введение

Статический анализатор Svace осуществляет поиск ошибок в программах, написанных на языках C/C++/Java [1, 2]. На вход анализатору Svace подаётся исходный код вместе с командой сборки. Компилятор строит абстрактное синтаксическое дерево (АСД) и запускает детекторы для поиска ошибок на АСД, а также генерирует промежуточное представление программы (LLVM биткод [5] для С/C++ и байткод для Java). Основной анализатор строит граф вызовов и запускает поочерёдный анализ каждой функции начиная с листьев графа. В данной работе описывается используемый при этом внутрипроцедурный анализ отдельных функций, который является базой для межпроцедурного анализа. описывается обобщённый анализ на основе символьного выполнения [6], который может использоваться различными анализаторами для поиска ошибок в исходном коде программ. описывается реализация анализа, используемая в инструменте Svace для внутрипроцедурного анализа функций В разд. 3 описывается реализация анализа, используемая в инструменте Svace для внутрипроцедурного анализа функций

Обобщённый анализатор
Символьное выполнение с объединением состояний анализа
Идентификаторы значений
Ссылки
Граф указателей
Сильные и слабые обновления
Ядро анализа и дополнительные анализы
Используемые эвристики
Анализируемый язык svace0
Используемые атрибуты
Другие анализы
Результаты
Похожие работы
Findings
Заключение
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call