Система динамического анализа модулей ядра KEDR

О системе KEDR

Система KEDR предназначена для динамического анализа модулей ядра Linux, в том числе драйверов устройств, модулей файловых систем и т.д. Инструменты из состава KEDR работают с модулем ядра, выбранным пользователем. Они позволяют отслеживать вызовы функций данным модулем и сохранять информацию о них в файле ("трасса вызовов"), имитировать нехватку системных ресурсов, выявлять утечки памяти. Система KEDR может быть полезна разработчикам модулей ядра и, в частности, может использоваться в автоматизированных системах проверки драйверов.

Структура и возможности

Как и системы для динамического анализа приложений и библиотек, работающих в пользовательском режиме (Valgrind и др.), KEDR включает в себя базовые компоненты (KEDR Core) и набор подключаемых модулей (plugins):

  • KEDR Core отвечает за инструментирование кода анализируемого модуля;
  • Подключаемые модули (т.н. "payload modules") собирают и анализируют необходимые данные.

В поставку KEDR входят инструменты для выполнения следующих видов задач:

  • Отслеживание ("трассировка") вызовов функций. Во время работы анализируемого модуля KEDR собирает информацию о функциях ядра или других модулей, которые тот вызывает: аргументы, возвращаемые значения и т.д. Эти данные можно сохранить в специальном файле ("трасса") для последующего анализа. Это напоминает то, что делает система strace для приложений, работающих в пользовательском режиме.
  • Имитация системных сбоев. KEDR делает так, что некоторые функции, вызванные анализируемым модулем, выдают ошибку. Это позволяет проверить, насколько корректно модуль обрабатывает такие ситуации. На самом деле, KEDR просто имитирует ошибку в функции, даже не вызывая самой этой функции. Сценарии (в каких условиях какие функции должны выдать ошибку) выбираются пользователем.
  • Выявление утечек памяти. KEDR отслеживает операции выделения и освобождения памяти, выполняемые данным модулем. После того, как анализируемый модуль выгружается, KEDR выдаёт отчёт, где перечислены блоки памяти, выделенные, но не освобождённые этим модулем. Для каждого блока в отчёте указывается стек вызовов функций, при котором блок был выделен.

Также с использованием KEDR можно подготовить инструменты и для других видов операций с анализируемыми модулями.

Ссылки и дополнительная информация

KEDR можно загрузить с сайта проекта на Google Code, c BerliOS Developer, а также с сайта open source-проектов ИСП РАН.

Подробное описание KEDR можно найти в online-документации. Кроме того, в Wiki также есть различная полезная информация об этой системе.

Чтобы быстро освоить KEDR, можно начать с раздела Getting Started в документации. В нём описано по шагам, как установить систему KEDR и использовать её для анализа модулей ядра.