Background Image
Previous Page  3 / 22 Next Page
Information
Show Menu
Previous Page 3 / 22 Next Page
Page Background

памяти анализатором. Для преодоления этой проблемы в настоящей

статье применен метод резюме для контекстно-чувствительного меж-

процедурного анализа. К наиболее известным инструментам, исполь-

зующим метод анализа на основе символьного выполнения, относятся,

например, 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