User Guide - dvm-system/tsar GitHub Wiki
Статический анализатор TSAR принимает на вход файл, содержащий программу на языке С/С++, либо внутреннее представление LLVM (LLVM IR). Тип файла определяется по расширению, для файлов содержащих LLVM IR должно быть задано расширение *.ll.
Запустить анализатор можно командой
tsar [ options ] < source0 > [...< sourceN >]Все доступные опции можно посмотреть выполнив
tsar -helpОпции разделены на следующие категории:
-
Compilation optionsуправляют обработкой исходных кодов (основные стандартные опции компиляторов), выдачей диагностических сообщений, в данной группе также содержаться опции, отвечающие за инструментацию программ для выполнения динамического анализа. -
Analysis optionsуправляют выполнением анализа программ. -
Debugging optionsпозволяют получить результаты различных анализов, доступных в TSAR (-print-only=), в данной группе также содержаться опции доступные при сборке анализатора в отладочном режиме, позволяющие получить подробную информацию о выполнении проходов TSAR. -
General options, данная группа содержит опции для запуска доступных преобразований исходных кодов (source-to-source), а также опции отображающие структуру памяти, используемой в программе. -
Transformation optionsуправляют выполняемыми преобразованиями.
Особенности анализа программ рассмотрены здесь, подробнее о преобразовании программ можно посмотреть здесь, возможности инструментации программ для выполнения динамического анализа описаны здесь.
Опция
-helpотображает только основные опции, посмотреть дополнтиельные опции можно, воспользовавшись опцией-help-hidden.
Информация, необходимая для выполнения синтаксического и семантического анализ исходного кода, также может быть задана с помощью JSON Compilation Database, которая может быть загружена из файла compile_commands.json.
Чтобы указать путь к директории, в которой расположен данный файл можно воспользоваться опцией -build-path, или -p. Опции, непосредственно управляющие статическим анализом программы, должны быть заданы явно в командной строке и не должны быть указаны в Compilation Database. При использовании compile_comands.json все явно указанные в командной строке опции, также будут использованы при анализе программы.
Файл compile_commands.json моежт быть написан вручную или построен автоматически с помощью инструмента CMake (в случае генерации Makefile или Ninja). В случае использования CMake необходимо задать опцию CMAKE_EXPORT_COMPILE_COMMANDS.
Исследование программ, образованных набором из нескольких файлов на языке С/С++, выполняется в несколько этапов. Основная идея данных этапов - получить общее представление всей программы в виде одного файла, содержащего LLVM IR и связанного через отладочную информацию со всем исходными файлами программы, после чего выполнять исследование уже объединенного файлом.
Для этого сначала необходимо получить для каждого исходного файла его представление в виде LLVM IR:
tsar -emit-llvm file1.c file2.c ... fileN.cВ итоге будут построены файлы file1.ll, file2.ll, ..., fileN.ll. Для построения LLVM IR для отдельных файлов необходимо использовать анализатор TSAR, так как он может добавлять дополнительную отладочную информацию в представление программы, отсутствующую при построении LLVM IR обычным компилятором Clang.
На следующем шаге файлы должны быть объединены в единый файл с помощью инструмента llvm-link, являюегося часть поставки пакетов LLVM:
llvm-link -S file1.ll file2.ll ... fileN.ll -o all.ll
В итоге будет построен единый файл all.ll, содержащий объединенное представление для всей программы с сохранением ссылок на исходные файлы на языке высокого уровня.
Полученный объединенный файл может быть передан TSAR для дальнейшей работы:
tsar [options] all.ll