Целью создания данной программы является пост-обработка результатов работы статического анализатора 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"
]
}
}
Алгоритм получения:
- Запустить скрипт пост-обработки, предварительно заполнив конфигурационный файл config.json.
Команда: python main.py ct
Алгоритм получения:
- Запустить скрипт пост-обработки с параметром sfo.
Команда: python main.py sfo <filename>, где <filename> имя файла, в который будет записан список всех функциональных объектов или пустая строка, если необходимо вывести список объектов в стандартный вывод.
Алгоритм получения:
- Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
- Выбрать один из функциональных объектов в качестве исследуемого и указать его в конфигурационном файле config.json в секции code_trace в качестве значения поля code_1;
- Выставить значения поля functional_object_trace в 1;
- Запустить программу: python main.py ct.
Алгоритм получения:
- Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
- Выбрать два объекта: исследуемый и второстепенный. Исследуемый объект указать в поле <main_object>, второстепенный в поле <secondary_object> секции functional_management_control конфигурационного файла config.json;
- Запустить программу: python main.py fmc.
Алгоритм получения:
- Получить список всех функциональных объектов проекта, запуск программы: python main.py sfo <filename>;
- Выбрать два объекта: исследуемый и второстепенный. Исследуемый объект указать в поле <main_object>, второстепенный в поле <secondary_object> секции functional_information_control конфигурационного файла config.json;
- Запустить программу: python main.py fic.
Результаты тестирования всех параметров запуска программы на выбранных проектах находятся по ссылке: https://github.com/Oskal174/staticProgramAnalysis/tree/master/tests