Инструменты поддержки процесса верификации

В данном репозитории собран ряд утилит для изучения исходных кодов модуля ядра Linux и для работы с ними. Программы имеют внешние зависимости. Для того, чтобы их установить необходимо выполнить команды:

cpan cpanm
cpanm --installdeps .

Для удобства работы с программами можно задать переменные окружения:
  • CURRENT_PROJECT - директория с исходными кодами исследуемого модуля ядра Linux
  • CURRENT_KERNEL - директория с исходными кодами ядра Linux с которым сочетается модуль

Краткое описание функциональности программ

Каждая из программ имеет собственную man документацию, которая доступна по ключу --help. Здесь сведено вместе краткое описание программ, их функциональности и предназначения.

Трансформация исходных кодов

Данные программы используются для работы с исходными кодами и разработки спецификаций.

  • dismember - из исходных кодов вытаскиваются все зависимости для конкретных функций так, чтобы компилятор мог создать отдельный объектный файл. У инструментов верификации вызывает затруднение работа с большими объёмами кода, что проявляется в существенном замедлении их работы. Программа позволяет многократно сократить объём исходного кода за счёт того, что неиспользуемый код исключается. В получившемся коде функции расположены в соответствии с графом их вызовов, структуры и остальные сущности расположены так, чтобы программисту было наиболее удобного работать с получившимся набором исходных кодов.
  • merge - спецификации переносятся с одного набора исходных кодов на другой. Осуществляется полуавтоматических образом. В случае невозможности автоматического разрешения конфликтов вызывается внешняя программа. Расположение функций в файлах не имеет значения.

Информация из исходных кодов

Данные программы предназначены для изучения исходных кодов модуля ядра как самостоятельного объекта, так и их интерфейсов взаимодействия с ядром. Используются при исследовании новых релизов исходных кодов, для подготовки отчётов и планирования работ.

  • graph - строит карту исходных кодов. Карта представляет собой граф вызовов функций модуля ядра.
  • headers - строит карту подключений заголовочных файлов в исходном коде
  • calls - программа для анализа и сбора статистики вызовов функций и функциональных макросов в модуле ядра. Автоматическое определение сущности функция/макрос, и места определения ядро/модуль.
  • lsm_diff - программа для анализа интерфейса lsm ядра и его использования в модуле ядра
  • stapgen - по исходным кодам ядра создаёт скрипт для systemtap. Скрипт в динамике перехватывает вызовы lsm интерфейса ядра, осуществляет логирование параметров и контекста вызова функции. Позволяет отследить какие действия в ОС, приводят к вызову конкретных функций интерфейса lsm.
  • get_preprocessed - осуществляет частичный(раскрываются только макросы ядра) либо полный препроцессинг исходных кодов модуля ядра
  • recursion - программа для детектирования рекурсии(прямой/косвенной) в исходных кодах модуля ядра Linux