памяти анализатором. Для преодоления этой проблемы в настоящей
статье применен метод резюме для контекстно-чувствительного меж-
процедурного анализа. К наиболее известным инструментам, исполь-
зующим метод анализа на основе символьного выполнения, относятся,
например, KLEE, Mayhem и Otter [3–5]. Различным способам улуч-
шения его производительности, в том числе, использованию резюме,
посвящено много научных работ. Исследователи Научно-технического
университета Китая применили подход резюме для символьного вы-
полнения, чтобы осуществить поиск утечек памяти в коде программ
на языке C [6]. Многие исследователи пытались использовать подход
резюме для решения узких задач: от поиска дефектов, связанных с
многопоточностью [7], до изучения активности объектов кучи [8].
Цель настоящей работы — построение многоцелевого статического
анализатора для языков C и C++, пригодного для решения различных
классов задач, с возможностью реализации широкого класса проверок.
Модель анализатора.
Построение анализатора, досконально мо-
делирующего все низкоуровневые действия, являющиеся результатом
выполнения операторов программы (таких, как содержимое регистров,
распределение памяти), не только трудоемко и ресурсоемко, но и не
дает значительных преимуществ при анализе программы. Поэтому для
анализа, в том числе при анализе методом символьного выполнения,
используются абстрактные модели.
В качестве целевой абстрактной модели анализатора для проведе-
ния эксперимента в настоящей работе выбран Clang Static Analyzer
(CSA) [9], являющийся модулем компилятора Clang [10], который
в свою очередь представляет собой основной компилятор проекта
LLVM [11]. Компилятор Clang является фронтэндом — транслято-
ром в промежуточное представление с поддержкой языков C, C++,
Objective-C и Objective C++, Clang Static Analyzer — статический ана-
лизатор, поддерживающий анализ исходного кода на всех перечислен-
ных языках. Однако в настоящей работе реализация метода резюме
была осуществлена только для языков C и C++. Языки Objective-C и
Objective-C++ не были рассмотрены в связи с трудностями при по-
исках крупных открытых программных комплексов, разработанных с
использованием этих языков.
Clang Static Analyzer поддерживает различные виды анализа: с ис-
пользованием AST; на основе графа потока выполнения и символьного
выполнения, а также допускает комбинации видов анализов. Широкий
выбор методов анализа и простота внедрения новых методов позволя-
ет применять его в различных производных работах [12, 13]. В настоя-
щем исследовании рассмотрен именно анализ на основе символьного
выполнения. В CSA подобный анализ реализован как межпроцедур-
ный с помощью метода встраивания, поэтому особенно интересным
выглядит сравнение реализации метода встраивания и метода резюме.
ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2015. № 5 77