После трех лет разработки анонсирован выпуск новой версии утилиты GNU cflow 1.7. Для тех, кто не знает об этой утилите, они должны знать, что это предназначен для построения визуального графика вызовов функций в программах на C, который можно использовать для упрощения изучения логики приложения.
Графиклибо строится исключительно из анализа исходных текстов, без необходимости запуска программы, помимо поддержки генерации графов прямого и обратного потоков, а также генерации списков перекрестных ссылок для файлов с кодом.
Пакет полностью функционален, компилируется и работает в любом дистрибутиве GNU/Linux, а также в более новых UNIX-подобных системах. Он поддерживает все параметры командной строки, необходимые для POSIX. Он может выдавать результаты в двух форматах: в формате GNU cflow (который используется по умолчанию) и в формате POSIX.
В настоящее время утилита может обрабатывать только шрифты C, поскольку это единственное отклонение от спецификаций POSIX, требующее возможности обработки шрифтов YACC и LEX, а также двоичных объектных файлов.
Модуль Emacs cflow-mode.el работает с файлами в формате GNU cflow (в отличие от формата POSIX) и был протестирован с Emacs 24.2.1.
Основные новые функции GNU cflow 1.7
В этой новой версии релиза выделяется реализацией совместимости с форматом вывода "точка" ('–Format = dot'), чтобы сгенерировать результат DOT для дальнейшей обработки в пакете Graphviz.
Кроме того, также подчеркивается, что добавлена возможность указывать несколько функций запуска, дублируя опции «-main», который будет сгенерирован с отдельным графиком для каждой из этих функций.
Также отмечается, что вариант «–Target = FUNCTION», чтобы ограничить результирующую диаграмму только одной ветвью. который включает в себя определенные функции (опцию «–target» можно указывать несколько раз).
Другое изменение, которое было интегрировано в эту новую версию GNU cflow 1.7, заключается в том, что добавлены новые команды для навигации по графику cflow-mode: «c», который используется для перехода к вызывающей функции, «n», который используется для перехода к следующей функции на этом уровне вложенности, и «p» для перехода к предыдущей функции с тем же уровнем вложенности.
С другой стороны, в анонсе этой новой версии GNU cflow 1.7 также упоминается, что она также две уязвимости были устранены которые были выявлены в 2019 году и вызывали повреждение памяти при обработке специально созданных исходных текстов в cflow.
Из уязвимостей, которые были устранены, упоминаются следующие:
- Первая уязвимость (CVE-2019-16165) возникает при доступе к памяти после ее освобождения (use-after-free) в коде парсера (ссылочная функция в parser.c).
- Вторая уязвимость (CVE-2019-16166) связана с переполнением буфера в функции nexttoken(). По мнению разработчиков, эти проблемы не представляют угрозы безопасности, поскольку ограничиваются аварийным завершением работы утилиты.
В конце концов если вам интересно узнать об этом больше об этой новой версии вы можете проверить подробности в по следующей ссылке.
Как установить cflow на Linux?
Тем, кто заинтересован в возможности установить эту утилиту в своей системе, следует знать, что cflow находится в репозиториях некоторых основных дистрибутивов Linux. Я просто должен отметить, что новая версия еще не реализована в некоторых из них, но это вопрос дней, прежде чем она будет готова.
Для тех, кто является пользователем Debian, Ubuntu или любой их производной, они могут установить из терминала, введя следующую команду:
sudo apt install cflow -y
В случае Arch Linux, Manjaro или любого другого дистрибутива, полученного от этих пользователей, установка должна выполняться из репозиториев AUR:
yay -s cflow
Что касается тех, кто заинтересован в возможности скомпилировать новую версию, то это можно получить на по следующей ссылке.