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

[b]О системе KEDR[/b]

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

[b]Структура и возможности[/b]

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

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

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

  • [i][url=http://kedr.berlios.de/kedr-doc/kedr_manual_using_kedr.html#call_mon]Отслеживание ("трассировка") вызовов функций[/url][/i]. Во время работы анализируемого модуля KEDR собирает информацию о функциях ядра или других модулей, которые тот вызывает: аргументы, возвращаемые значения и т.д. Эти данные можно сохранить в специальном файле ("трасса") для последующего анализа. Это напоминает то, что делает система [url=http://sourceforge.net/projects/strace/]strace[/url] для приложений, работающих в пользовательском режиме.
  • [i][url=http://kedr.berlios.de/kedr-doc/kedr_manual_using_kedr.html#fault_sim]Имитация системных сбоев[/url][/i]. KEDR делает так, что некоторые функции, вызванные анализируемым модулем, выдают ошибку. Это позволяет проверить, насколько корректно модуль обрабатывает такие ситуации. На самом деле, KEDR просто имитирует ошибку в функции, даже не вызывая самой этой функции. Сценарии (в каких условиях какие функции должны выдать ошибку) выбираются пользователем.
  • [i][url=http://kedr.berlios.de/kedr-doc/kedr_manual_using_kedr.html#leak_check]Выявление утечек памяти[/url][/i]. KEDR отслеживает операции выделения и освобождения памяти, выполняемые данным модулем. После того, как анализируемый модуль выгружается, KEDR выдаёт отчёт, где перечислены блоки памяти, выделенные, но не освобождённые этим модулем. Для каждого блока в отчёте указывается стек вызовов функций, при котором блок был выделен.

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

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

KEDR можно загрузить с [url=http://code.google.com/p/kedr/]сайта проекта на Google Code[/url], [url=http://kedr.berlios.de/] c BerliOS Developer[/url], а также с [url=http://forge.ispras.ru/projects/kedr]сайта open source-проектов ИСП РАН[/url].

Подробное описание KEDR можно найти в [url=http://kedr.berlios.de/kedr-doc/index.html]online-документации[/url]. Кроме того, в [url=http://code.google.com/p/kedr/w/]Wiki[/url] также есть различная полезная информация об этой системе.

Чтобы быстро освоить KEDR, можно начать с раздела [url=http://kedr.berlios.de/kedr-doc/kedr_manual_getting_started.html][i]Getting Started[/i][/url] в документации. В нём описано по шагам, как установить систему KEDR и использовать её для анализа модулей ядра.