Skip to content

Latest commit

 

History

History
101 lines (73 loc) · 7.85 KB

README.md

File metadata and controls

101 lines (73 loc) · 7.85 KB

staticProgramAnalysis - программа статического анализа проектов по исходному коду

Целью создания данной программы является пост-обработка результатов работы статического анализатора Joern и получение информации об алгоритмах и данных, обрабатываемых в этих алгоритмах. Алгоритмы и данные программы исследуются по ее исходным кодам.

Кроме Joern исследовались другие статические анализаторы, с результатами их тестирования можно ознакомиться по ссылке: https://github.com/Oskal174/staticProgramAnalysis/tree/master/analysis_tools

Статья с результатами исследовательской работы по данной теме: http://samag.ru/archive/article/3827

Настройка программы пост-обработки

Конфигурационный файл в формате json разделен на несколько секций и предназначен для управления настройками проекта. По умолчанию проект запускается с конфигурационным файлом config.json, находящимся в корне проекта.

В секции "general" находятся общие настройки проекта.

  • "root_path" описывает путь до директории с этим проектом в операционной системе;
  • "interpreter_path" описывает путь до интерпретатора СУБД neo4j, позволяющего исполнять запросы с базе данных;
  • "database_path" описывает путь до директории в которой находится результат работы инструмента статического анализа Joern.

В секции "code_trace" находятся настройки модуля поиска трассы исполнения кода.

  • "code_1" начальная точка трассы;
  • "code_2" конечная точка трассы;
  • "functional_object_trace" флаг означающий поиск путей исполнения функциональных объектов (1-искать, 0-простая трасса).

В секции "functional_management_control" находятся настройки модуля, отвечающего за контроль функциональных объектов по управлению.

  • "main_object" исследуемый объект;
  • "secondary_object" второстепенный объект.

В секции "functional_information_control" находятся настройки модуля, отвечающего за контроль функциональных объекто по информации.

  • "main_object" исследуемый объект;
  • "secondary_object" второстепенный объект.

В секции "find_pattern" находятся настройки модуля поиска вхождения определенных конструкции в исходном тексте

  • "patterns" массив описывающий конструкции для поиска

Пример конфигурационного файла

{
    "general" : {
        "root_path"         : "D:\\homework\\staticProgramAnalysis\\src\\staticProgramAnalysis",
        "interpreter_path"  : "D:\\homework\\staticProgramAnalysis\\tools\\neo4j-community-2.3.12\\bin\\Neo4jShell.bat",
        "database_path"     : "D:\\homework\\staticProgramAnalysis\\neo4j-db\\GraphAlgorithms-joern"
    },

    "code_trace" : {
        "code_1" : "ifstream file ( \\\"graphFile\\\" ) ;",
        "code_2" : "file . close ( )",
        "functional_object_trace"           : 1,
        "functional_management_control"     : 0,
        "functional_information_control"    : 0
    },

    "find_pattern" : {
        "patterns" : [
            "ifstream file ( \\\"graphFile\\\" ) ;",
            "file . close ( )",
            "file"
        ]
    }
}

Параметры запуска программы

Построение трассы исполнения программы

Алгоритм получения:

  1. Запустить скрипт пост-обработки, предварительно заполнив конфигурационный файл config.json.

Команда: python main.py ct

Получение списка всех функциональных объектов программы

Алгоритм получения:

  1. Запустить скрипт пост-обработки с параметром sfo.

Команда: python main.py sfo <filename>, где <filename> имя файла, в который будет записан список всех функциональных объектов или пустая строка, если необходимо вывести список объектов в стандартный вывод.

Формирование перечня маршрутов выполнения функциональных объектов

Алгоритм получения:

  1. Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
  2. Выбрать один из функциональных объектов в качестве исследуемого и указать его в конфигурационном файле config.json в секции code_trace в качестве значения поля code_1;
  3. Выставить значения поля functional_object_trace в 1;
  4. Запустить программу: python main.py ct.

Контроль связей функциональных объектов по управлению

Алгоритм получения:

  1. Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
  2. Выбрать два объекта: исследуемый и второстепенный. Исследуемый объект указать в поле <main_object>, второстепенный в поле <secondary_object> секции functional_management_control конфигурационного файла config.json;
  3. Запустить программу: python main.py fmc.

Контроль связей функциональных объектов по информации

Алгоритм получения:

  1. Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
  2. Выбрать два объекта: исследуемый и второстепенный. Исследуемый объект указать в поле <main_object>, второстепенный в поле <secondary_object> секции functional_information_control конфигурационного файла config.json;
  3. Запустить программу: python main.py fic.

Результаты тестирования всех параметров запуска программы на выбранных проектах находятся по ссылке: https://github.com/Oskal174/staticProgramAnalysis/tree/master/tests