Введение во внутреннее устройство Windows

Сборка исследовательского ядра Windows и работа с отладчиком

Показывать лекцию целиком

Задание 1. Установить операционную систему Microsoft Windows Server 2003 SP1 на виртуальную машину Microsoft Virtual PC 2007 SP1.

Указания к выполнению.

1. Скачайте и установите программу виртуализации Microsoft Virtual PC 2007 SP1, доступную по адресу:

http://www.microsoft.com/en-us/download/details.aspx?id=24439

2. Создайте в программе Microsoft Virtual PC 2007 SP1 виртуальную машину со следующими параметрами:

  • оперативная память – не менее 256 Мб (желательно 512 Мб);
  • жесткий диск не менее 3 Гб.
  • Информация по созданию виртуальной машины и установке операционной системы на виртуальную машину доступна по адресу:

    http://windows.microsoft.com/ru-RU/windows-vista/Virtual-PC-2007-Run-multiple-operating-systems-without-multibooting

    3. Установите на виртуальную машину операционную систему Microsoft Windows Server 2003 SP1.

    Замечание. Обратите внимание, в операционной системе обязательно должен быть установлен Service Pack 1 (SP1), поскольку исследовательское ядро Windows WRK поставляется именно для этой версии Windows.

    В дальнейшем компьютер, на котором установлена программа Microsoft Virtual PC 2007 SP1, будем называть "физический компьютер", а виртуальный компьютер с операционной системой Microsoft Windows Server 2003 SP1 будем называть "виртуальной машиной".

    Задание 2. Осуществить сборку исследовательского ядра Windows (Windows Research Kernel, WRK).

    Указания к выполнению.

    1. Загрузите с сайта Windows Academic Program исходные коды Windows Research Kernel:

    http://www.microsoft.com/WindowsAcademic

    Для загрузки потребуется наличие подписки Microsoft Developer Network Academic Alliance (MSDN AA) или подтверждение статуса преподавателя.

    2. Сборку ядра можно осуществить двумя способами: при помощи командного файла Build.bat и в среде Microsoft Visual Studio. Рассмотрим оба способа.

    3. Сборка при помощи Build.bat.

    В папке WRK-v1.2 находится файл Build.bat. Запустите его – должно открыться консольное окно и начаться сборка ядра:

    Сборка продолжается несколько минут. В результате в папке WRK v1.2\base\ntos\BUILD\EXE появится файл ядра wrkx86.exe, а также файл с отладочной информацией wrkx86.pdb. Файл wrkx86.exe – это аналог файла ntoskrnl.exe для WRK.

    4. Сборка при помощи Microsoft Visual Studio.

    В папке WRK-v1.2 содержится файл решения WRK.sln – файл решения (solution) Microsoft Visual Studio 2008. Если на вашем компьютере установлена Microsoft Visual Studio версии не ниже 2008, вы можете открыть данный файл. При этом если установленная версия Visual Studio выше 2008, будет предложено сконвертировать решение в более новый формат, и после конвертации с решением можно будет работать.

    Выберите конфигурацию x86 и платформу Win32:

    В меню Построение выберите Построить решение (Build – Build Solution). Результат построения должен быть такой же, как при использовании Build.bat – в папке WRK v1.2\base\ntos\BUILD\EXE появится файл ядра wrkx86.exe.

    Замечание. Рекомендуется при изучении лекций и выполнении лабораторных работ для просмотра исходного кода WRK использовать либо Visual Studio, либо HTML документацию по WRK (см. лекцию 5 "Исследовательское ядро Windows").

    Задание 3. Запустить операционную систему Windows Server 2003 SP1 с исследовательским ядром WRK.

    Указания к выполнению.

    1. Запустите виртуальную машину с операционной системой Windows Server 2003 SP1.

    2. Откройте в ней папку C:\Windows\System32.

    3. Скопируйте в эту папку два файла:

  • wrkx86.exe – собранное в предыдущем задании ядро WRK (папка WRK v1.2\base\ntos\BUILD\EXE);
  • halacpim.dll – модуль HAL (см. лекцию 4 "Архитектура Windows") из папки WRK-v1.2\WS03SP1HALS\x86\halacpim.
  • Копирование можно осуществлять двумя способами. Для обоих способов нужно установить в Microsoft Virtual PC 2007 компонент Virtual Machine Additions (пункт меню Action – Install or Update Virtual Machine Additions).

    Способ 1. Компонент Virtual Machine Additions позволяет копировать файлы простым перетаскиванием из окна физического компьютера в окно виртуальной машины.

    Способ 2. Откройте окно настроек виртуальной машины: пункт меню Edit – Settings. Выберите в левой панели Shared Folders (Папки общего доступа) и нажмите в правой панели кнопку Share Folder:

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

    После этого в окне My Computer эта папка (или диск) будет отображаться как сетевой диск, с помощью которого можно обмениваться данными между виртуальной машиной и физическим компьютером:

    4. На виртуальной машине откройте файл boot.ini, расположенный в корневом каталоге системного диска (C:).

    Если файл boot.ini не отображается в корневом каталоге, значит в настройках Проводника Windows выключен показ скрытых и/или системных файлов. На виртуальной машине откройте My Computer, в меню Tools выберите пункт Folder Options… При этом должно открыться окно Folder Options. Перейдите на вкладку View и найдите в списке два параметра:

  • Show hidden files and folders
  • Hide protected operating system files (Recommended)
  • Первый параметр отметьте, а у второго уберите флажок:

    Нажмите кнопку OK и проверьте, что файл boot.ini отображается в корневом каталоге:

    Откройте файл boot.ini и замените его содержимое следующим текстом:

    [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, 
    Enterprise" /fastdetect /NoExecute=OptOut
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Research Kernel
      " /noexecute=optout /fastdetect /kernel=wrkx86.exe /hal=halacpim.dll /debug /debugport=com1
    multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Research Kernel [no debugger]
      " /noexecute=optout /fastdetect /kernel=wrkx86.exe /hal=halacpim.dll

    В файле boot.ini хранятся параметры загрузки Windows. В данном случае, указаны три варианта загрузки:

  • "Windows Server 2003, Enterprise" – загрузка стандартного ядра Windows;
  • "Windows Research Kernel [debugger enabled]" – загрузка ядра WRK с возможностью отладки;
  • "Windows Research Kernel [no debugger]" – загрузка ядра WRK без отладки.
  • Обратите внимание, мы использовали следующие опции в файле boot.ini:

  • /kernel – указание файла, используемого в качестве ядра;
  • /hal – указание файла, используемого в качестве модуля HAL;
  • /debug – активизация режима отладки;
  • /debugport=com1 – для отладки используется COM порт.
  • 5. Перезагрузите виртуальную машину. Когда она начнет загружаться, должно отобразиться следующее окно:

    Выберите загрузку в режиме отладки (debugger enabled) и нажмите Enter.

    6. После загрузки операционной системы проверьте её версию.

    Нажмите кнопку Start – Run (Пуск – Выполнить) и введите команду winver:

    Появится окно с информацией о версии операционной системы:

    Выключите виртуальную машину до окончания установки и настройки отладчика.

    Задание 4. Установить отладчик Windows – WinDbg (Windows Debugger).

    Указания к выполнению.

    1. Скачайте Windows Software Development Kit (SDK) for Windows 8 по следующему адресу:

    http://msdn.microsoft.com/en-US/windows/hardware/hh852363

    Замечание. Данный дистрибутив предназначен для работы на операционных системах Windows 7 и Windows 8.

    Загрузится программа инсталлятор (sdksetup.exe) размером около 1 Мб, после чего следует её запустить. Откроется следующее окно:

    Выберите пункт Install the Windows Software Development Kit to this computer, нажмите кнопку Next.

    При желании можете поучаствовать в программе улучшения продуктов Microsoft на основе опыта пользователей (Customer Experience Improvement Program) или отказаться от участия в ней:

    На следующем шаге, если на вашем компьютере не установлен .NET Framework 4.5, программа инсталлятор предупредит, что без его наличия компонент .NET Framework 4.5 SDK не установится. Нам он не нужен, поэтому можно пропустить этот шаг (нажмите Next):

    Прочитайте лицензионное соглашение и, если согласны с ним, нажмите Accept.

    В следующем окне уберите все галочки, кроме Debugging Tools for Windows и нажмите Install:

    Во время установки должно работать соединение с Интернетом.

    После завершения установки программу WinDbg можно запустить (в Windows 7) из меню Пуск – Все программы – Windows Kits – Debugging Tools for Windows (X86) – WinDbg (X86).

    Задание 5. Настроить отладчик WinDbg для отладки ядра.

    Указания к выполнению.

    1. Сначала необходимо задать настройки виртуальной машины.

    В меню Action выберите пункт Settings. В левой панели выберите пункт COM1, в поле Named pipe введите следующий текст:

    \\.\pipe\debugPipe

    Нажмите кнопку ОК.

    2. Установите пути к отладочным символам в настройках отладчика WinDbg.

    Запустите отладчик WinDbg. В меню File выберите пункт Symbol File Path (или просто нажмите Ctrl+S). Откроется окно Symbol Search Path, в которое нужно ввести пути к файлам с отладочными символами. Введем два пути:

  • путь к файлу отладочной информации WRK – wrkx86.pdb (например, C:\WRK-v1.2\base\ntos\BUILD\EXE);
  • путь к файлам с отладочными символами других компонентов Windows – можно указать отладчику скачать эти данные с сайта Microsoft и сохранить их в папке на жестком диске, например C:\Symbols.
  • В окне Symbol Search Path введите следующий текст:

    c:\WRK-v1.2\base\ntos\BUILD\EXE;

    SRV*c:\symbols*http://msdl.microsoft.com/download/symbols

    Обратите внимание, что текст должен идти без пробелов и переносов строк:

    Нажмите ОК.

    3. Установить путь к исходному коду WRK в настройках отладчика WinDbg.

    В меню File выберите пункт Source File Path (или нажмите Ctrl+P). Откроется окно Source Search Path, в которое нужно ввести путь к исходным файлам WRK, например, C:\WRK-v1.2\base:

    Нажмите ОК.

    4. Установить соединение отладчика WinDbg с виртуальной машиной.

    В меню File выберите пункт Kernel Debug (или нажмите Ctrl+K). Откроется окно Kernel Debugging.

    Установите следующие значения на вкладке COM в этом окне:

  • Baud Rate: 115200
  • Port: \\.\pipe\debugPipe
  • Pipe: отметить
  • Reconnect: отметить
  • Resets: 0
  • Нажмите кнопку OK, при этом начнется процесс подключения к виртуальной машине по COM порту. На вопрос о сохранении информации (Save information for workspace) можете ответить Yes.

    Запустите виртуальную машину. В меню загрузки выберите Windows Research Kernel [debugger enabled]. В процессе загрузки в окне Command отладчика должна появиться следующая информация:

    5. Узнать информацию о загруженных модулях.

    Остановите процесс выполнения виртуальной машины, нажав кнопку на панели инструментов отладчика, или выбрав в меню Debug пункт Break, или нажав Ctrl+Break.

    Отладчик перейдет в режим ввода команд (внизу окна Command сделается активной строка для текстового ввода с подсказкой kd>):

    При этом виртуальная машина будет недоступна для любого взаимодействия с пользователем.

    В строке команд отладчика введите команду:

    lmD

    где заглавная буква D – параметр команды lm, отображающей список загруженных модулей.

    В окне Command выведется список всех загруженных модулей (на рисунке показана только часть вывода):

    Обратите внимание на информацию об отладочных символах справа от модулей ntdll и nt.

    Если щелкнуть по названию модуля nt (или ввести команду lmDvmnt), то отобразится более подробная информация о данном модуле:

    Чтобы продолжить работу виртуальной машины нажмите F5, или нажмите кнопку на панели инструментов отладчика, или введите команду g в окне команд.

    Задание 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").
  • Просмотрите комментарии к алгоритмам, приведенным в файле.
  • Вернуться к учебному плану