Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ДП.docx
Скачиваний:
11
Добавлен:
23.09.2019
Размер:
4.64 Mб
Скачать

3.2.3 Основные отладчики и утилиты для проверки драйвера

3.2.3.1 Отладчик WinDbg

Одним из отладчиков, которые может использовать разработчик драйверов, яв­ляется отладчик WinDbg, поставляющийся в составе пакета DDK. Отладчик WinDbg представляет собой гибрид отладчика уровня ядра и пользовательского режима. При помощи WinDbg можно проводить анализ файлов «crash dump files» (отображение физической памяти в момент сбоя), отлаживать драйверный код путем трассировки (пошагового выполнения), анализировать «dump file» приложений [3.5].

Помимо того, что WinDbg выполняет свои задачи и в режиме ядра, и в пользова­тельском режиме, он также предоставляет рабочий интерфейс и в графической форме, и в форме командной строки, характерной для старых отладчиков.

Одной из самых значительных возможностей, которой обладает отладчик WinDbg, является его способность поддерживать отладку компонентов уровня ядра в исходных текстах отлаживаемых модулей. При этом отладчику должны быть доступны и исходные тексты, и файлы с отладочными символами («файлы идентификаторов»).

Тем не менее, отладка в исходных текстах представляет достаточно существен­ную организационную проблему. Во-первых, для отладки драйвера требуется два компьютера, на одном из кото­рых работает собственно отладчик, а на втором — отладочный агент, относительно небольшой объем кода, который получает управляющие команды с первого ком­пьютера. Во-вторых, для проведения отладки потребуется отладочная версия операцион­ной системы, для которой имеются соответствующие файлы отладочных симво­лов [3.5].

3.2.3.2 Driver Verifier

Утилита Driver Verifier входит как в отладочные, так и в свободные сборки операционных систем и быстро становится одним из основных инструментов Microsoft для проверки качества драйверов [3.6]. Driver Verifier запустить из командной строки или команды меню пуск «выполнить», набрав «verifier.exe». При запуске пользователь проходит через несколько экранов программы- мастера (wizard). Далее описывается процесс отладки драйвера с помощью данной утилиты.

Рисунок 3.4 – Начальная страница Driver Verifier

После выбора режима на первой странице на экране появля­ется вторая страница (рис. 3.5). Здесь установим режим Выбрать отдельные параметры из полного списка.

Рисунок 3.5 – Окно создания параметров тестирования драйвера

На следующей странице (рис. 3.6) выбираются нужные режимы проверки. Они добавляются к тем проверкам, которые Driver Verifier выполняет автоматически.

Рисунок 3.6 – Окно выбора параметров тестирования драйвера

Доступны следующие режимы [3.6]:

  • Особый пул (Special Pool) — вся память в проверяемых драйверах выделяется из специаль­ного пула. Такие блоки располагаются в конце (или начале) страницы, поэтому сохранение данных перед выделен­ной памятью (или до нее) приводит к немедленному фатальному сбою.

  • Слежение за пулом (Pool Tracking) — заставляет Driver Verifier отслеживать операции выделения па­мяти, выполненные проверяемыми драйверами. Пользователь может наблюдать за статистикой использования памяти и за тем, как она изменяется со временем. Driver Verifier также гарантирует освобождение всей выделенной памяти при выгрузке проверяемых драйверов, что упрощает выявление утечки памяти.

  • Обязательная проверка IRQL (Force IRQL Checking) — фактически обеспечивает очистку перемещаемой па­мяти каждый раз, когда проверяемый драйвер поднимает IRQL до уровня DISPATCH_LEVEL и выше. Эта операция помогает выявлять некорректные обращения к перемещаемой памяти в драйверах. При включении этого режима система работает относительно медленно.

  • Проверка I/O (I/O Verification) — заставляет Driver Verifier выполнять базовые проверки паке­тов IRP, создаваемых драйвером или пересылаемых другим драйверам.

  • Проверка взаимоблокировок (Deadlock Detection) — строит диаграмму с иерархией блокировок для спин-блокировок, мьютексов и быстрых мьютексов, используемых проверяемыми драй­верами, с целью выявления потенциальных взаимных блокировок.

  • Проверка DMA (DMA Checking) — следит за тем, чтобы проверяемые драйверы использовали при работе с DMA только методы, предписанные в DDK.

  • Имитация нехватки ресурсов (Low Resources Simulation) — имитация случайных сбоев при выделении памяти проверяемыми драйверами, начиная через 7 минут после запуска системы. Таким образом, проверяется обработка возвращаемых значений, получаемых драйверами при выделении памяти.

Выбранные режимы могут быть связаны между собой. Например, возможность в настоящее время включения проверки DMA или выявления взаимных блокировок приводит к отключению проверки ввода/вывода [3.6].

После выбора режимов проверки открывается последняя страница мастера. На этой странице выбираются проверяемые драйверы, для чего пользо­ватель устанавливает флажки в соответствующих строках списка (рис. 3.7). Затем компью­тер необходимо перезагрузить, потому что многие проверки Driver Verifier тре­буют инициализации на стадии загрузки.

Рисунок 3.7 – Окно настроек выборки проверяемых драйверов

На мой взгляд, при отладке драйверов удобнее, если драйвер не был загружен на момент перезапуска системы. Если в списке такие драйверы отсутствуют, их приходится добавлять кнопкой (рис 3.8).

Рисунок 3.8 – Окно выбора конкретных драйверов для проверки

Кстати говоря, сбои Driver Verifier являются фатальными. Для выявления причины сбоя в системе должен работать отладчик режима ядра, в противном случае при­дется анализировать аварийный дамп.