Сборка исследовательского ядра Windows и работа с отладчиком
Задание 6. Научиться пользоваться справкой отладчика WinDbg.
Указания к выполнению.
1. В отладчике WinDbg в меню Help выберите пункт Contents – откроется окно справочной системы отладчика, которая предоставляет подробную информацию по всем его командам.
2. Например, найдем информацию о команде lm.
Способ 1. Перейдите на вкладку Указатель и введите название команды:
Нажав кнопку Вывести можно перейти на страницу с описанием команды:
Способ 2. На вкладке Содержание найдите следующий раздел: Debugger Reference – Debugger Commands – Commands:
В указанном разделе найдите команду lm:
Задание 7. Изучить способы представления чисел в WinDbg.
Указания к выполнению.
1. В WinDbg существуют два основных способа представления десятичных и шестнадцатеричных чисел – в стиле ассемблера MASM и в стиле C++. Этим способам посвящен раздел Numerical Expression Syntax в справке WinDbg:
2. В лабораторных работах будут использоваться обозначения в стиле C++:
- десятичные числа представляются обычным способом: 12345;
- чтобы явно указать, что число записано в десятичной системе счисления, нужно добавить префикс 0n: 0n12345;
- шестнадцатеричные числа обозначаются с префиксом 0x, например: 0x12FF14;
- при написании шестнадцатеричных цифр можно использовать как заглавные латинские буквы, так и строчные: 0xAB10CE = 0xab10ce;
3. Если не указывается префикс, число в WinDbg считается записанным в текущей системе счисления, которую можно узнать и, при необходимости, изменить при помощи команды n (Set Number Base):
В данном примере сначала проверяется текущая система счисления (команда n), она оказывается шестнадцатеричной (base is 16), затем устанавливается десятичная система счисления (команда n 10) и возвращается шестнадцатеричная (команда n 16).
4. Для перевода чисел из одной системы счисления в другую можно воспользоваться командой ? (Evaluate Expression):
В примере на рисунке сначала проверяется, что текущая система счисления – шестнадцатеричная (команда n), затем выполняется команда перевода числа 10, которое, в соответствии с текущей системой счисления рассматривается как шестнадцатеричное (команда ? 10), далее явно указывается, что переводимое число десятичное (команда ? 0n10), и, наконец, явно указывается, что переводимое число шестнадцатеричное (команда ? 0x10).
Задания для самостоятельного выполнения
Задание 1. Найдите информацию о следующих командах отладчика:
- ? (Command Help)
- ? (Evaluate Expression)
- bp
- d, da, db, dw, dd
- dt
- n
- r
- s
Задание 2. Найдите информацию о следующих командах расширений отладчика:
- !address
- !handle
- !sd
- !token
Указания к выполнению.
1. Описание команд расширений содержится в разделе справки Debugger Reference – Debugger Commands – General Extension Commands.
Задание 3. Найдите информацию о следующих командах расширений режима ядра:
- !devobj
- !drvobj
- !fileobj
- !memusage
- !object
- !process
- !sysinfo
- !thread
- !vm
Указания к выполнению.
1. Описание команд расширений содержится в разделе справки Debugger Reference – Debugger Commands – Kernel Mode Extension Commands.
Задание 4. Изучить пример хорошего комментирования кода.
Указания к выполнению.
- Откройте в Visual Studio файл WRK: base\ntos\mm\addrsup.c.
- В этом файле комментирование построено на основе связи с книгой Дональда Кнута (Donald Knuth) "Искусство программирования. Том 3. Сортировка и поиск" ("The Art of Computer Programming, Volume 3, Sorting and Searching").
- Просмотрите комментарии к алгоритмам, приведенным в файле.