Что такое отладчик ядра windows

Начало работы с WinDbg (режим ядра)

WinDbg — это отладчик режима ядра и пользовательского режима, который включается в средства отладки для Windows. Здесь мы предложим практические упражнения, которые помогут приступить к использованию WinDbg в качестве отладчика в режиме ядра.

сведения о том, как получить средства отладки для Windows, см. в разделе средства отладки для Windows (WinDbg, KD, CDB, NTSD). После установки средств отладки перейдите к каталогам установки для 64-разрядных (x64) и 32-разрядных (x86) версий средств. Например.

Настройка отладки в режиме ядра

Среда отладки в режиме ядра обычно имеет два компьютера: главный компьютер и конечный компьютер. Отладчик запускается на главном компьютере, и отлаживаемый код выполняется на целевом компьютере. Узел и цель соединены с помощью кабеля отладки.

отладчики Windows поддерживают такие типы кабелей для отладки:

Для ускорения и надежной работы рекомендуется использовать Ethernet с центром локальной сети. На этой схеме показан узел и целевой компьютер, подключенные для отладки через кабель Ethernet.

Другой вариант для более ранних версий Windows — использование прямого кабеля, такого как USB или последовательный кабель.

Дополнительные сведения о настройке узла и целевых компьютеров см. в разделе Настройка отладки Kernel-Mode вручную.

Виртуальная машина — виртуальные машины

Сведения о подключении отладчика к виртуальной машине Hyper-V см. в разделе Настройка сетевой отладки виртуальной машины — кднет.

Установка сеанса отладки в режиме ядра

После настройки узла и целевого компьютера и подключения к нему с помощью отладочного кабеля можно установить сеанс отладки в режиме ядра, следуя инструкциям в том же разделе, который использовался для получения настройки. Например, если вы решили настроить узел и конечные компьютеры для отладки через Ethernet, вы можете найти инструкции по установке сеанса отладки в режиме ядра:

Приступая к работе с WinDbg

На главном компьютере откройте WinDbg и установите сеанс отладки в режиме ядра с конечным компьютером.

В нижней части окна WinDbg в командной строке введите следующую команду:

Выходные данные похожи на следующие:

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

Введите эту команду, которая указывает WinDbg выполнить начальное обнаружение и загрузку файлов символов:

Чтобы просмотреть список загруженных модулей, введите следующую команду:

Выходные данные похожи на следующие:

Чтобы запустить целевой компьютер под его запуском, введите следующую команду:

Введите эту команду, чтобы проверить тип данных _FILE_OBJECT в модуле NT:

Выходные данные похожи на следующие:

Введите эту команду, чтобы проверить некоторые символы в модуле NT:

Выходные данные похожи на следующие:

Введите эту команду, чтобы разместить точку останова в ммкреатепроцессаддрессспаце:

Чтобы проверить, задана ли точка останова, введите следующую команду:

Выходные данные похожи на следующие:

Выходные данные похожи на следующие:

В меню вид выберите Дизассемблированный код.

В меню Отладка выберите Шаг с обходом (или нажмите клавишу F10). Введите команды Step еще несколько раз, так как вы следите за окном дизассемблирования.

Очистите точку останова, введя следующую команду:

Чтобы просмотреть список всех процессов, введите следующую команду:

Выходные данные похожи на следующие:

Скопируйте адрес одного процесса и введите следующую команду:

Например: ! Process ffffe00000d5290 2

Выходные данные показывают потоки в процессе.

Скопируйте адрес одного потока и введите следующую команду:

Например: ! Thread ffffe00000e6d080

В выходных данных отображаются сведения об отдельном потоке.

Чтобы просмотреть все узлы устройств в дереве устройств самонастраивающийся, введите следующую команду:

Чтобы просмотреть узлы устройств вместе с их аппаратными ресурсами, введите следующую команду:

Чтобы просмотреть узел устройства с именем службы «диск», введите следующую команду:

В выходных данных ! девноде 0 1 отображается адрес объекта физического устройства (PDO) для узла. Скопируйте адрес объекта физического устройства (PDO) и введите следующую команду:

Например: пдоаддресс! девстакк 0xffffe00001159610

Чтобы получить сведения о disk.sys драйвера, введите следующую команду:

В выходных данных! дрвобж отображаются адреса подпрограмм диспетчеризации: например, КЛАССПНП! Классглобалдиспатч. Чтобы установить и проверить точку останова на Классглобалдиспатч, введите следующие команды:

Введите g, чтобы позволить целевому компьютеру запуститься.

Выходные данные похожи на следующие:

Чтобы завершить сеанс отладки, введите следующую команду:

Источник

Отладка ядра Windows

Термин «отладка ядра» означает изучение внутренней структуры данных ядра и (или) пошаговую трассировку функций в ядре. Эта отладка является весьма полезным способом исследования внутреннего устройства Windows, поскольку она позволяет получить отображения внутренней системной информации, недоступной при использовании каких-либо других средств, и дает четкое представление о ходе выполнения кода в ядре.

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

Символы для отладки ядра

Файлы символов содержат имена функций и переменных, а также схему и формат структур данных. Они генерируются программой-компоновщиком (linker) и используются отладчиками для ссылок на эти имена и для их отображения во время сеанса отладки. Эта информация обычно не хранится в двоичном коде, поскольку при выполнении кода она не нужна. Это означает, что без нее двоичный код становится меньше по размеру и выполняется быстрее. Но это также означает, что при отладке нужно обеспечить отладчику доступ к файлам символов, связанных с двоичными образами, на которые идут ссылки во время сеанса отладки.

Для использования любого средства отладки в режиме ядра с целью исследования внутреннего устройства структуры данных ядра Windows (списка процессов, блоков потоков, списка загруженных драйверов, информации об использовании памяти и т. д.) вам нужны правильные файлы символов и, как минимум, файл символов для двоичного образа ядра — Ntoskrnl.exe. Файлы таблицы символов должны соответствовать версии того двоичного образа, из которого они были извлечены. Например, если установлен пакет Windows Service Pack или какое-нибудь исправление, обновляющее ядро, нужно получить соответствующим образом обновленные файлы символов.

Источник

Использовать отладку ядра для отладки основ устройств. сбои при тестировании надежности

В этом разделе описывается, как использовать общие команды отладки ядра для отладки основных понятий при сбоях тестирования надежности устройств.

Установка символов

В этом примере команда. чувствия задает путь сервера public Symbols в отладчике.

! анализ-v

Проверка трассировок стека тестового процесса

Основные принципы работы с устройствами. тесты надежности часто выполняются как Te.ProcessHost.exe или Te.exe на тестовом компьютере. Полезно просматривать трассировки стека из этих тестовых процессов при исследовании проверок системных ошибок или зависаний теста. В случае проверок ошибок трассировка стека может помочь определить тестовый случай, который был протестирован во время сбоя. В случае зависаний теста трассировки стека обозначают все тестовые потоки, препятствующие выполнению теста.

Затем можно использовать расширение ! Process/p/r для получения полных трассировок стека из тестовых процессов.

Обратите внимание, что! выходные данные процесса содержат счетчики тактов для каждого потока, выполняющегося в процессе. При исследовании тестовых зависаний потоки с большим количеством тактов, содержащим компоненты ВДТФ в стеке (то есть имена модулей, начинающиеся с «ВДТФ» в стеке), следует тщательно проанализировать, так как эти потоки могут привести к безошибочному зависанию и завершению работы тестов из-за истечения времени ожидания.

В этом примере ! процесс 0 0, ! процесс/p/rи ! Process Extensions определяет тестовый поток с очень большим числом тактов, что предотвращает выполнение теста:

Переключение контекста на потоки и фреймы для просмотра локальных переменных

Чтобы просмотреть локальные переменные из кадра стека, необходимо выполнить следующие действия.

Выведите дамп стека вместе с номерами кадров с помощью команды kn (см. раздел ведение журнала стеков и дампа).

Для дампа локальных переменных необходимо использовать закрытые символы.

! пнптриаже

При отладке основных принципов проверки надежности устройств можно использовать команду ! пнптриаже для вывода списка активных потоков PnP. Обратите внимание, что ! пнптриаже выходные данные содержат счетчики тактов для каждого потока PnP, который выполняется в системе. При исследовании тестовых зависаний следует внимательно рассмотреть потоки с высокими счетчиками тактов, так как эти потоки могут привести к безвозвратному зависанию и постепенному сбою из-за истечения времени ожидания.

Расширения отладки драйверов

Следующие расширения отладчика ядра могут отлаживать проблемы с драйверами, которые могут возникать при выполнении тестов надежности устройств: ! дрвобж, ! девноде, ! девобж, ! девстакки ! IRP. Дополнительные сведения об этих расширениях см. в разделе расширения режима ядра.

Расширения отладчика

средства отладки для Windows входят в состав дополнительных расширений отладчика, которые полезны при устранении неполадок, которые могут возникать при выполнении тестов для следующих типов драйверов: USB, служба хранилища, NDIS, Graphics, Kernel-Mode Driver framework (кмдф) и User-Mode driver framework (UMDF). Дополнительные сведения об этих расширениях см. в разделе специализированные расширения. дополнительные сведения об инструментах отладки для Windows см. в статье загрузка и установка средств отладки для Windows.

Источник

Отладка, debug, ядра ОС Windows

Некоторые устройства, которые мы разрабатываем, требуют написания драйвера устройства для ОС Windows или Linux. Написание драйвера устройства – это не совсем формат нашего сайта, но возможно эта статья будет кому-то полезна. Речь пойдет даже не о написании драйвера, а об отладке драйвера в ОС Windows. Я вот уже две недели как погрузился в отладку драйвера одного устройства.. Не очень простое дело..

Итак, предположим, нам захотелось заглянуть внутрь ядра Windows, посмотреть, как оно работает. Ну или допустим мы написали драйвер нашего устройства, а он не работает или работает неправильно. Нужно посмотреть отладчиком ядра, что происходит.

Прежде всего нужно подготовить «среду» для отладки.
Понадобится 2 компьютера с ОС Windows: первый компьютер – это тот который будет подвержен отладке, второй компьютер – это тот, с помощью которого будет вестись отладка. В терминологии Microsoft первый компьютер называется Target, а второй – это Host.

Эти два компьютера нужно соединить между собой для передачи отладочной информации. Есть несколько способов:

Вот мое рабочее место для отладки:

Слева – Target, инспектируемый компьютер.
Справа – Host, ноутбук отладчика.

В ноутбук подключен кабель USB и программатор MBFTDI. В этом случае мы его будем использовать просто как переходник USB2COM. То есть для ноутбука это как последовательный порт. Правда есть ньюанс – выходные уровни программатора MBFTDI не соответствуют стандартным в последовательном порту. Поэтому я еще подключил преобразователь уровней, на микросхеме MAX232 (нашел его среди старых железок, у нас для них целый ящик в офисе).

Теперь нужно настроить Target. У меня здесь Windows 7 64х битная.
Запускаем окно командной строки CMD от имени администратора и в нем выполняем команды:

>bcdedit /debug on
>bcdedit /dbgsettings serial debugport:n baudrate:rate

У меня debugport:COM1 и baudrate:115200
Это в общем и есть вся настройка инспектируемого компьютера.
Теперь на нем нужно просто выполнить перезагрузку.

Далее настроим хост – у меня это ноутбук.
Здесь нужно установить программу отладчика WinDbg.
Программа отладчика есть в составе Windows Driver Kit (WDK) или в составе Microsoft Software Developer Kit. Все это можно взять с сайта Microsoft https://msdn.microsoft.com/en-us/windows/hardware/hh852365 вполне легально и бесплатно.

У меня на ноутбуке так же Windows 7 x64. Я установил WDK и там в составе есть нужный мне отладчик.

Выбираю скорость передачи 115200 и имя последовательного порта. В принципе все готово.

Любая высокая технология для наблюдателя со стороны мало отличима от магии..

На хосте в программе WinDbg нажимаю Ctrl+Break и компьютер Target останавливается! То есть полностью стоят все процессы и потоки Windows. Можно попить чайку.

В консоли отладчика можно выполнять различные команды. Команд много, у них много параметров, конечно я не смогу их все описать. В конце концов для этого есть вполне вменяемая инструкция-help самой программы WinDbg.

Самые простые команды:

>u – показать дизассемблированный код в месте, где произошла остановка процессора. Ну или “u ” – посмотреть код по адресу.

>d – показать дамп памяти по адресу или по регистру.

>t – выполнить одну инструкцию процессора.

>p – выполнить инструкцию процессора или целую процедуру, если инструкция call.

Более того, в отладчике конечно можно установить точки останова различного типа.

Самый простой пример:

Еще можно установить точку останова по записи или чтению заданной ячейки памяти или порта ввода вывода.

Отмена всех точек останова – команда « bc * »

Теперь, когда драйвер загружен в память ядра ОС Windows уже проще производить отладку с символьной информацией. Нам теперь не нужно знать абсолютные адреса в нашем драйвере. Установить точку останова можно по имени функции:

Кроме этого, очень полезно подключить к отладчику еще и символьную информацию самого ядра Windows. Конечно, версий виндовсов много, есть разные сборки и где найти символьную информацию именно соответствующую вашей Target ОС Windows?

Проще всего, в командной строке отладчика выполнить команду

При этом, нужные файлы отладки (именно нужной версии) будут выкачаны через интернет к вам на диск в папку c:\localsymbols прямо с сервера Microsoft.

Теперь, можно уже более осмысленно дебажить и само ядро.

Можно поставить точку останова и далее по шагам исполнить все инструкции. Символьная информация помогает понять если не детали, то хотя бы общий смысл исполняемого кода чужого драйвера.

Отладка собственного драйвера может быть еще проще, так как имеются исходные тексты самого драйвера. Укажите к ним путь в диалоговом окне отладчика Source Search Path и можно будет выполнять по шагам не отдельные команды процессора, а целые строки программы C/C++. Так же становятся доступны для просмотра локальные переменные функций и прочая отладочная информация.

Вообще отладчик WinDbg дает широкие возможности для отладки своих драйверов, а так же возможность для изучения вообще ядра ОС Windows.

Источник

Отладчик ядра

Отладчик ядра — программное обеспечение, работающее на уровне ядра операционной системы и позволяющее отлаживать ядро и его компоненты.

Содержание

Применение

Отладчики ядра находят множество применений. Вот некоторые из них:

Так как очень часто программное обеспечение не поставляется с исходными текстами, а лишь в бинарном виде и сами уязвимости имеют машинно-зависимый характер, то эти две проблемы требует специальных инструментов. При статическом исследовании программы такими инструментами как дизассемблер многие детали поведения программы остаются не узнанными, например те локации памяти куда идет доступ со стороны программы, более трудно установить пути исполнения кода программы. Отладчик позволяет контролировать программу во время выполнения и изучать те изменения, которые в ней происходят на любом этапе выполнения. Возможности отладчика по отображению состояния стека программы, регистров процессора позволяют узнать различную информацию о реакции программы на те или иные события, логику выполнения кода. Это позволяет решить как первую, так и вторую задачу, указанную выше. Примером того как это делается может служить 3 глава из книги Хакинг: искусство эксплойта [1]

Основные принципы функционирования

Для нормального функционирования отладчика уровня ядра требуется внесение изменений в ядро операционной системы. Довольно часто это решается при помощи внедрения в ядро дополнительных модулей. Фактически отладчик уровня ядра перехватывает глобально системные функции, которые отвечают за:

Так же отладчик ядра контролирует обращение к различным таблицам ядра. Ещё один важный момент это управление состоянием процессора, так как процессоры поддерживают пошаговую трассировку и точки останова на аппаратном уровне.

Наиболее известные представители данного класса ПО

Проблемы при применении

Очень важно что отладчик должен быть совместим с ядром операционной системы, где используется, так как отладчик модифицирует основные структуры ядра, которые имеют свойство меняться от версии к версии. Применение некорректной версии отладчика может привести к непредсказуемому поведению системы.

Иной довольно серьёзной проблемой является конфликт между драйверами уровня ядра других приложений и отладчика. Примером может служить невозможность работы программы Daemon Tools при активном отладчике ядра. Некоторые программы отказываются функционировать, если обнаружат наличие отладчика в системе или попытки их отладки

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • что такое отладчик в программировании
  • Что такое отладчик linux
  • Что такое отладка программы
  • что такое отладка программы что называется тестом
  • что такое отладка программы в информатике

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии