Включение отладчика ядра windows что это

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

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

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

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

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

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

Загрузить и установить символы для различных версий Windows нетрудно, а вот обновить символы для исправлений удается не всегда. Проще всего получить нужную версию символов для отладки путем обращения к специально предназначенному для этого серверу символов Microsoft, воспользовавшись для этого специальным синтаксисом для пути к символам, указываемом в отладчике. Например, следующий путь к символам заставляет средства отладки загрузить символы с интернет-сервера символов и сохранить локальную копию в папке c:symbols:srv*c:symbols*http://msdl.microsoft.com/download/symbols

Подробные инструкции по использованию символьного сервера можно найти в файле справки средств отладки или в Интернете на веб-странице http://msdn.microsoft.com/en-us/windows/hardware/gg462988.aspx.

жучек, bug

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

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

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

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

  • использовать специальный майкрософтовский отладочный USB кабель. Не думаю, что вы его легко найдете.
  • использовать кабель FireWire. Это уже проще. Некоторые компьютеры имеют такой разъем, ну или можно найти PCI плату с разъемом FireWire. У меня сейчас в ПК есть такой разъем на материнской плате, а вот в ноутбуке – нет. Так что этот способ так же отпадает.
  • самый простой способ – последовательный порт. Не очень хорошо в смысле скорости передачи, зато просто организовать.

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

Соединение компьютеров для отладки WinDbg

Слева – 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 и там в составе есть нужный мне отладчик.

Запускаю WindDbg. Выбираем пункт меню File -> Kernel Debug и появляется окошко:

Настройка отладчика WinDbg

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

На ноутбуке Host в программе WinDbg есть командная консоль, достапная через меню View -> Command. Появляется командная строка отладчика.

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

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

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

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

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

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

>r <reg> — показать содержимое регистра процессора.

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

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

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

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

>bp <adr> — остановка ядра, когда процессор достигнет указанного адреса.

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

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

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

Например, мы написали драйвер для ОС Windows. Скомпилировали его debug версию. Вместе с файлом драйвера mydrv.sys компилятор генерирует еще файл с соответствующей символьной информацией mydrv.pdb.

Зайдем в меню отладчика File -> Symbol File Path.. и в диалоговом окне добавим путь к нашему файлу PDB.

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

>bp mydrv!DriverEntry – остановить ядро, когда произойдет вызов функции DriverEntry нашего драйвера mydrv.

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

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

> .sympath SRV*c:localsymbols*https://msdl.microsoft.com/download/symbols

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

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

Хотите посмотреть, как выглядит, например, функция USBPORTSVC_CompleteIsoTransfer драйвера usbport.sys? Нет проблем:

windbg

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

Например, очень многие системные структуры данных в ядре Windows снабжаются «сигнатурой» — специальной строкой, обычно из 4 символов. Таким образом, функции ядра имеют возможность легко проверить переданные им указатели на структуры являются верными или нет. Вот в коде на картике выше есть вызов функции USBPORT_AssertSig. Уже по названию функции становится примерно понятно, что она делает – проверяет указатель, действительно ли он указывает на структуру с нужной сигнатурой.

Вот еще что. При вызовах функций ядра  Windows обычно первые четыре параметра функций передаются в регистрах RCX, RDX, R8 и R9. Похоже остальные параметры, если их больше четырех, передаются функциям в стеке.

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

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

by Radu Tyrsina

Radu Tyrsina has been a Windows fan ever since he got his first PC, a Pentium III (a monster at that time). For most of the kids of… read more


Updated on March 28, 2022

Kernel

XINSTALL BY CLICKING THE DOWNLOAD FILE

To fix various PC problems, we recommend Restoro PC Repair Tool:
This software will repair common computer errors, protect you from file loss, malware, hardware failure and optimize your PC for maximum performance. Fix PC issues and remove viruses now in 3 easy steps:

  1. Download Restoro PC Repair Tool that comes with Patented Technologies (patent available here).
  2. Click Start Scan to find Windows issues that could be causing PC problems.
  3. Click Repair All to fix issues affecting your computer’s security and performance
  • Restoro has been downloaded by 0 readers this month.

A kernel can be considered one of the building blocks of Windows as an operating system. This is mainly because it controls all the processes running on the system.

That being said, any problems and issues with the kernels can result in crippling functionality issues for your PC, which includes Blue Screen of Death errors.

Unfortunately, not even Windows 10, the latest version of the Windows OS is not safe from such issues. One piece of good news is that kernel code can be debugged, as long as you know how.

Fortunately, kernel debugging is possible and made easier through the presence of kernel debuggers.

How can I start Kernel debugging?

The answer to that question is quite complex, but suffice it to say that you need to follow a set of predefined steps before you can start:

1. Determine what PC is the host, and what PC is the target

The most basic thing that you need to know is that you cannot start debugging without a kernel debugger. The kernel debugger will run on the host system, while the code that needs debugging will run on the target system.

The two systems can be one and the same, but certain conditions need to be met beforehand.

2. Determine if you’ll do a kernel-mode or a user-mode debugging

Choosing what type of debugging isn’t that hard. All you need to do is determine what type of debugging will be more efficient.

  • Kernel-mode code has permission to access any part of the system and can gain access to any part of any other process running in either user mode or kernel mode
  • User-mode has more restrictions applied to it, but it has the benefit of not being able to tamper with actual system resources if things go wrong

3. Choose a debugging environment

The Debugging environment is basically the program you will be using to do the debugging with. WinDbg works well in most situations, but there are times when others may work better, such as console debuggers for automation or Visual Studio.

4. Figure out how you’ll connect the target and host

Usually, both target and host systems are connected by an Ethernet network. If you are doing early bring-up work, or you lack an Ethernet connection on a device, other network connectivity options can be used.

5. Choose between 32-bit or 64-bit debugging tools

Some PC issues are hard to tackle, especially when it comes to corrupted repositories or missing Windows files. If you are having troubles fixing an error, your system may be partially broken.
We recommend installing Restoro, a tool that will scan your machine and identify what the fault is.
Click here to download and start repairing.

This is probably the easiest step of them all since it depends on what version of Windows the host and target are running, and whether or not the code that needs debugging is 32-bit or 64-bit code.

6. Configure your symbols

If you are using an environment like WinDbg , you’ll need to configure the right symbols if you’ll want to use all of its advanced functionalities. If you don’t configure them, you won’t be able to use any of the debugger’s features that depend on those symbols.

7. Configure the source code

The path to the source code needs to be defined, even in the eventuality of it being your own source code. Thus, configuring a path to it in all cases is mandatory.

8. Become familiar with debugging

Debugger operations and techniques aren’t all that hard once you get used to them. This is thanks to the extensive documentation that comes with each operation, all of which is described in a step-by-step manner.

Read more about this topic

  • 5+ best debugging software to quickly clean Windows 10/11
  • Best Windows Settings For DAC To Optimize Your System

9. Use the debugger reference commands

You can’t know it all, and you can’t remember anything forever, but what you can do is look for the debugger reference commands that are there to help.

One good example is the .hh command, which will display help documentation about every single command available.

10. Use debugging extensions

Code can be extremely complex and it branches out in a variety of ways. Because of that, your environments may not be enough to perform the debugging.

Thus, using debugging extensions that provide parsing of domain-specific data structures can be very useful.

Closing thoughts

The steps mentioned above are all the basic procedures that you need to go through when attempting a kernel debugging.

Of course, there are many specific situations where these steps may vary, but the bottom line is all of them involve more or less these basic 10 steps.

Did our article help you better understand how you can start kernel debugging? Let us know what your opinions are in the comment section below.

newsletter icon

Newsletter

by Radu Tyrsina

Radu Tyrsina has been a Windows fan ever since he got his first PC, a Pentium III (a monster at that time). For most of the kids of… read more


Updated on March 28, 2022

Kernel

XINSTALL BY CLICKING THE DOWNLOAD FILE

To fix various PC problems, we recommend Restoro PC Repair Tool:
This software will repair common computer errors, protect you from file loss, malware, hardware failure and optimize your PC for maximum performance. Fix PC issues and remove viruses now in 3 easy steps:

  1. Download Restoro PC Repair Tool that comes with Patented Technologies (patent available here).
  2. Click Start Scan to find Windows issues that could be causing PC problems.
  3. Click Repair All to fix issues affecting your computer’s security and performance
  • Restoro has been downloaded by 0 readers this month.

A kernel can be considered one of the building blocks of Windows as an operating system. This is mainly because it controls all the processes running on the system.

That being said, any problems and issues with the kernels can result in crippling functionality issues for your PC, which includes Blue Screen of Death errors.

Unfortunately, not even Windows 10, the latest version of the Windows OS is not safe from such issues. One piece of good news is that kernel code can be debugged, as long as you know how.

Fortunately, kernel debugging is possible and made easier through the presence of kernel debuggers.

How can I start Kernel debugging?

The answer to that question is quite complex, but suffice it to say that you need to follow a set of predefined steps before you can start:

1. Determine what PC is the host, and what PC is the target

The most basic thing that you need to know is that you cannot start debugging without a kernel debugger. The kernel debugger will run on the host system, while the code that needs debugging will run on the target system.

The two systems can be one and the same, but certain conditions need to be met beforehand.

2. Determine if you’ll do a kernel-mode or a user-mode debugging

Choosing what type of debugging isn’t that hard. All you need to do is determine what type of debugging will be more efficient.

  • Kernel-mode code has permission to access any part of the system and can gain access to any part of any other process running in either user mode or kernel mode
  • User-mode has more restrictions applied to it, but it has the benefit of not being able to tamper with actual system resources if things go wrong

3. Choose a debugging environment

The Debugging environment is basically the program you will be using to do the debugging with. WinDbg works well in most situations, but there are times when others may work better, such as console debuggers for automation or Visual Studio.

4. Figure out how you’ll connect the target and host

Usually, both target and host systems are connected by an Ethernet network. If you are doing early bring-up work, or you lack an Ethernet connection on a device, other network connectivity options can be used.

5. Choose between 32-bit or 64-bit debugging tools

Some PC issues are hard to tackle, especially when it comes to corrupted repositories or missing Windows files. If you are having troubles fixing an error, your system may be partially broken.
We recommend installing Restoro, a tool that will scan your machine and identify what the fault is.
Click here to download and start repairing.

This is probably the easiest step of them all since it depends on what version of Windows the host and target are running, and whether or not the code that needs debugging is 32-bit or 64-bit code.

6. Configure your symbols

If you are using an environment like WinDbg , you’ll need to configure the right symbols if you’ll want to use all of its advanced functionalities. If you don’t configure them, you won’t be able to use any of the debugger’s features that depend on those symbols.

7. Configure the source code

The path to the source code needs to be defined, even in the eventuality of it being your own source code. Thus, configuring a path to it in all cases is mandatory.

8. Become familiar with debugging

Debugger operations and techniques aren’t all that hard once you get used to them. This is thanks to the extensive documentation that comes with each operation, all of which is described in a step-by-step manner.

Read more about this topic

  • 5+ best debugging software to quickly clean Windows 10/11
  • Best Windows Settings For DAC To Optimize Your System
  • How to Use PowerShell ErrorAction? (A Guide with Examples)
  • Strict NAT Type: What It Means & How to Fix It?
  • How to Install Software Without Admin Rights on Windows 11?

9. Use the debugger reference commands

You can’t know it all, and you can’t remember anything forever, but what you can do is look for the debugger reference commands that are there to help.

One good example is the .hh command, which will display help documentation about every single command available.

10. Use debugging extensions

Code can be extremely complex and it branches out in a variety of ways. Because of that, your environments may not be enough to perform the debugging.

Thus, using debugging extensions that provide parsing of domain-specific data structures can be very useful.

Closing thoughts

The steps mentioned above are all the basic procedures that you need to go through when attempting a kernel debugging.

Of course, there are many specific situations where these steps may vary, but the bottom line is all of them involve more or less these basic 10 steps.

Did our article help you better understand how you can start kernel debugging? Let us know what your opinions are in the comment section below.

newsletter icon

Newsletter

Как запустить отладчик ядра

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

Как запустить отладчик ядра

Вам понадобится

  • — права администратора на целевой машине.

Инструкция

Запустите командный процессор cmd. Кликните по кнопке «Пуск» в панели задач. Кликните по пункту «Выполнить…» появившегося меню. В текстовое поле диалога «Запуск программы» введите строку cmd и нажмите кнопку OK.

Создайте резервную копию файла boot.ini. Узнайте путь инсталляции текущей копии Windows при помощи команды:echo %SystemRoot%Перейдите на тот диск, куда установлена операционная система при помощи ввода литеры устройства с последующим двоеточием. Перейдите в его корневой каталог, используя команду cd. Снимите атрибуты «системный», «только для чтения» и «скрытый» с файла boot.ini при помощи команды attrib, создайте резервную копию командой copy и снова установите атрибуты:attrib -h -s -r boot.inicopy boot.ini boot.ini.oldattrib +h +s +r boot.ini

Выведите текущий список вариантов загрузки. Используйте команду:bootcfg /queryПросмотрите элементы списка и определите тот, на основе которого будет создана новая конфигурация с возможностью отладки в режиме ядра. Запомните идентификатор загрузочной записи.

Создайте новую загрузочную запись, исполнив команду bootcfg с параметром /copy. Используйте параметр /id для указания идентификатора записи, которая будет скопирована. При помощи параметра /d задайте отображаемое имя записи. Например:bootcfg /copy /id 1 /d «Win XP (Debug)»Снова выведите список вариантов загрузки командой bootcfg с параметром /query и узнайте идентификатор добавленной записи.

Включите опции для запуска отладчика ядра в загрузочную запись, созданную на предыдущем шаге. Если отладка будет производиться на целевой машине, просто добавьте опцию /debug. Например:bootcfg /debug on /id 2Если планируется удаленная отладка с подключением целевого компьютера к хост-машине через com-порт, дополнительно используйте опции /port /baud для указания номера порта и скорости обмена соответственно:bootcfg /debug on /port COM2 /baud 9600 /id 2Если удаленная отладка будет осуществляться с подключением через интерфейс IEEE 1394 (кабель FireWire), воспользуйтесь опцией /dbg1394 для включения соответствующего режима и опцией /ch для указания номера канала, например:bootcfg /dbg1394 on /ch 42 /id 2Просмотрите загрузочные записи командой bootcfg с параметром /query и убедитесь в том, что изменения внесены. Закройте окно командного процессора, выполнив команду exit.

Измените, если это необходимо, параметры загрузки операционной системы. Откройте панель управления, воспользовавшись соответствующим пунктом раздела «Настройка» меню «Пуск». Откройте элемент «Система». В диалоге «Свойства системы» перейдите на вкладку «Дополнительно». Кликните по кнопке «Параметры», расположенной в группе «Загрузка и восстановление». В отобразившемся диалоге «Загрузка и восстановление» активируйте опцию «Отображать список операционных систем». Нажмите кнопки OK в двух последних открытых диалогах.

Перезагрузите компьютер. Выберите вариант загрузки с отладчиком. Войдите в систему и работайте на целевой машине, либо начните сеанс удаленной отладки. Используйте такие средства как WinDbg и KD.

Полезный совет

Установите пакет Microsoft® Windows® checked build для комфортной отладки в режиме ядра.

Источники:

  • Adding Boot Entries

Войти на сайт

или

Забыли пароль?
Еще не зарегистрированы?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Запись от _lunar_ размещена 24.12.2021 в 19:41

Обновил(-а) _lunar_ 18.01.2022 в 16:20

Объекты операционной системы. Часть 1: Общие сведения
Объекты операционной системы. Часть 2: Объект ядра
Объекты операционной системы. Часть 3: Уровень целостности

В этой части я решил показать самые интересные, на мой взгляд, возможности ядерного отладчика WinDbg.
Но сначала немного слов о том, как его установить и как им пользоваться.
В этом блоге я буду показывать работу отладчика WinDbg сразу для двух операционных: Windows 7 (x64) и Windows 10/11 (x64).
Почему две ОС? По двум причинам:
1. Windows 7 всё ещё остаётся актуальной;
2. Работа ядер этих ОС имеет большие различия, которые несомненно вызывают интерес, и которые мы увидим на примерах.

Итак, начнём с Windows 7.
Здесь всё просто, идём на MSDN, качаем Windows 11 WDK (прямая ссылка на online установщик) и устанавливаем по умолчанию в папку Program Files (x86).
После установки отладчик WinDbg будет располагаться по пути: Program Files (x86)Windows Kits10Debuggersx64
Попробуйте запустить windbg.exe, если вылезет вот такая ошибка
Нажмите на изображение для увеличения
Название: 0.png
Просмотров: 170
Размер:	20.9 Кб
ID:	7328
то скачайте эту библиотеку api-ms-win-core-sysinfo-l1-2-0.rar и положите в туже папку, где находится windbg.exe, ещё раз проверьте запускается ли отладчик.
Теперь, чтобы воспользоваться именно KernelMode отладкой необходимо выполнить три шага:
1. В BIOS отключите опцию SecureBoot (должно быть Disabled), если такой опции в BIOS нет, то переходите ко второму шагу.
2. Запустите командную строку (cmd.exe) от имени администратора и введите следующую команду bcdedit -debug on, должна быть надпись об успешном выполнении команды.
3. Перезагрузите компьютер.
Запустите windbg.exe от имени администратора. В меню нажмите File -> Kernel Degug… -> выберите Local и нажмите OK
Нажмите на изображение для увеличения
Название: 0.5.png
Просмотров: 178
Размер:	15.7 Кб
ID:	7330
Дождитесь окончания загрузки символов (в командной строке должна появиться надпись lkd>, что означает, что отладчик готов к принятию команд).

Теперь установка и настройка для Windows 10/11.
В этих ОС можно выбрать какой отладчик устанавливать:
— тот же, что и описанный в Windows 7 из пакета Windows 11 WDK;
— либо из магазина Microsoft Store WinDbg Preview, который также можно найти и в самом магазине.
Лично я предпочитаю WinDbg Preview, у него неплохой интерактивный GUI, да и сам интерфейс куда более приятный и современный.
Настройка аналогична трем шагам из Windows 7: выключить SecureBoot, включить debug on и перезагрузить компьютер.
Из Пуска запустите WinDbg Preview от имени администратора. В меню нажмите File -> Attach to kernel -> выберите Local и нажмите OK
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 200
Размер:	44.9 Кб
ID:	7327
Дождитесь окончания загрузки символов (в командной строке должна появиться надпись lkd>, что означает, что отладчик готов к принятию команд).

Так как отладчик сейчас работает в режиме ядра ОС, то эксперименты будем ставить над самым главным процессом — ядром операционной системы System.
Итак, первой командой, которой мы воспользуемся, это !process
Она выводит базовую информацию о процессе: сессию в которой он работает, идентификатор, родительский процесс, количество открытых дескрипторов этим процессом.
Давайте введем команду !process 0 0 System
Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 202
Размер:	64.0 Кб
ID:	7331
Отлично! Теперь у нас есть значение объекта процесса System PROCESS fffffa80048d8040
Для того, чтобы понять что находится в этом объекте, необходимо получить заголовок этого объекта (ObjectHeader).
В отладчике WinDbg для этого предусмотрена команда !object
Соответственно введём эту команду и значение того объекта, у которого требуется получить заголовок !object fffffa80048d8040
Нажмите на изображение для увеличения
Название: 3.png
Просмотров: 195
Размер:	60.6 Кб
ID:	7332
Теперь у нас есть значение заголовка объекта процесса System ObjectHeader: fffffa80048d8010 (new version)
Зная это значение, можно посмотреть что содержится в структуре _OBJECT_HEADER
Воспользуемся следующей командой, которой передадим значение заголовка объекта dt nt!_object_header fffffa80048d8010
Нажмите на изображение для увеличения
Название: 4.png
Просмотров: 180
Размер:	45.6 Кб
ID:	7334
Самыми интересными полями этой структуры являются TypeIndex и SecurityDescriptor.
Начнём с SecurityDescriptor : 0xfffff8a0`0000464b.
Это указатель на структуру, содержащую уже знакомые нам ACL (SACL и DACL), а также их ACE, SID группы и владельца и их флаги.
Введем специальную команду, чтобы отобразить содержимое структуры, находящейся по значению SecurityDescriptor: !sd 0xfffff8a0`0000464b & -10
Нажмите на изображение для увеличения
Название: 5.png
Просмотров: 204
Размер:	84.5 Кб
ID:	7335
Заметьте, что KernelExplorer, кроме вывода этой информации, также выводит более детализированную информацию, в частности по структуре ACTRL_ALIST.
Данная структура является недокументированной, и собирать её содержимое достаточно сложно, видимо в Microsoft не стали заморачиваться, а ведь там есть очень ценная и уникальная информация по правам доступа каждого ACE (ACTRL_ACCESS_ENTRY)
Нажмите на изображение для увеличения
Название: 5.5.png
Просмотров: 213
Размер:	36.2 Кб
ID:	7336
Теперь давайте разберемся, что такое TypeIndex : 0x7.
TypeIndex это индекс указателя на структуру _OBJECT_TYPE в таблице ObTypeIndexTable.
Давайте посмотрим что это за таблица ObTypeIndexTable, находящаяся в ядре ОС. Для этого введём команду dps nt!ObTypeIndexTable
Нажмите на изображение для увеличения
Название: 6.png
Просмотров: 179
Размер:	64.7 Кб
ID:	7337
Так как эксперименты проводятся на 64 битной ОС, соответственно значения являются 8-ми байтовыми.
Обратите внимание: второе значение является ошибочным 00000000BAD0B0B0.
Что это такое? Это заплатка (patchGuard) от эксплойта вида
Нажмите на изображение для увеличения
Название: 8.png
Просмотров: 183
Размер:	13.9 Кб
ID:	7339
В Windows 7 существовал способ, позволяющий через shellcode получить контроль на объектами ядра в таблице ObTypeIndexTable.
После patchGuard все обращения ко второму значению приводили к ошибке вида BAD ObjectHeader.
В Windows 8.1 исправили этот баг непосредственно в коде ядра, тем самым представив метаданные следующим образом
Нажмите на изображение для увеличения
Название: 9.png
Просмотров: 175
Размер:	9.9 Кб
ID:	7340
Но давайте вернёмся к TypeIndex и его значению 0x7.
Начав отсчитывать от первого нулевого значения (нулевой индекс) до седьмого индекса (восьмого значения) в таблице ObTypeIndexTable, мы попадаем на значение fffffa80048769b0. Пока запомним его.
Для того, чтобы посмотреть содержимое структуры _OBJECT_TYPE воспользуемся специальной командой, в которой происходит арифметическое действие над таблицей с учетом индекса 7 и размерности значения, находящегося по этому индексу (8 байт)
dt nt!_OBJECT_TYPE poi(nt!ObTypeIndexTable + (7 * 8))
Нажмите на изображение для увеличения
Название: 7.png
Просмотров: 180
Размер:	63.9 Кб
ID:	7338
Первым делом посмотрите на поле Name : _UNICODE_STRING «Process».
Вернитесь в скриншоту, где мы использовали команду !object — поле Type: (fffffa80048769b0) Process: данный объект ядра является Process.
А теперь посмотрите на поле TypeList : _LIST_ENTRY (0xfffffa80`048769b0). Точно такое же значение, которое мы запомнили чуть раньше.
Поздравляю, мы получили валидный индекс процесса System (ядра ОС) в таблице ObTypeIndexTable.

Теперь вернёмся к Windows 10/11 и попробуем определить индекс в таблице ObTypeIndexTable. Вот что мы получим в итоге
Нажмите на изображение для увеличения
Название: 10.png
Просмотров: 205
Размер:	23.6 Кб
ID:	7343
TypeIndex в Windows 10/11 зашифрован.
Кроме того, в Windows 10 21H2 диапазон индексов лежит в промежутке [0…68]

Кликните здесь для просмотра всего текста

Код:

TypeName                         | TypeIndex
---------------------------------|----------
(null)                           |  0
                                 |  1
Type                             |  2
Directory                        |  3
SymbolicLink                     |  4
Token                            |  5
Job                              |  6
Process                          |  7
Thread                           |  8
Partition                        |  9
UserApcReserve                   | 10
IoCompletionReserve              | 11
ActivityReference                | 12
PsSiloContextPaged               | 13
PsSiloContextNonPaged            | 14
DebugObject                      | 15
Event                            | 16
Mutant                           | 17
Callback                         | 18
Semaphore                        | 19
Timer                            | 20
IRTimer                          | 21
Profile                          | 22
KeyedEvent                       | 23
WindowStation                    | 24
Desktop                          | 25
Composition                      | 26
RawInputManager                  | 27
CoreMessaging                    | 28
ActivationObject                 | 29
TpWorkerFactory                  | 30
Adapter                          | 31
Controller                       | 32
Device                           | 33
Driver                           | 34
IoCompletion                     | 35
WaitCompletionPacket             | 36
File                             | 37
TmTm                             | 38
TmTx                             | 39
TmRm                             | 40
TmEn                             | 41
Section                          | 42
Session                          | 43
Key                              | 44
RegistryTransaction              | 45
ALPC Port                        | 46
EnergyTracker                    | 47
PowerRequest                     | 48
WmiGuid                          | 49
EtwRegistration                  | 50
EtwSessionDemuxEntry             | 51
EtwConsumer                      | 52
CoverageSampler                  | 53
DmaAdapter                       | 54
PcwObject                        | 55
FilterConnectionPort             | 56
FilterCommunicationPort          | 57
NdisCmState                      | 58
DxgkSharedResource               | 59
DxgkSharedKeyedMutexObject       | 60
DxgkSharedSyncObject             | 61
DxgkSharedSwapChainObject        | 62
DxgkDisplayManagerObject         | 63
DxgkCurrentDxgThreadObject       | 64 // Only in Windows 10
DxgkSharedProtectedSessionObject | 65
DxgkSharedBundleObject           | 66
DxgkCompositionObject            | 67
VRegConfigurationContext         | 68

а 0x4E это 78, что уже означает выход за допустимый диапазон.
Кстати в Windows 11 21H2 диапазон индексов был расширен

Кликните здесь для просмотра всего текста

Код:

TypeName                         | TypeIndex
---------------------------------|----------
(null)                           |  0
                                 |  1
Type                             |  2
Directory                        |  3
SymbolicLink                     |  4
Token                            |  5
Job                              |  6
Process                          |  7
Thread                           |  8
Partition                        |  9
UserApcReserve                   | 10
IoCompletionReserve              | 11
ActivityReference                | 12
ProcessStateChange               | 13  // Only in Windows 11
ThreadStateChange                | 14  // Only in Windows 11
PsSiloContextPaged               | 15
PsSiloContextNonPaged            | 16
DebugObject                      | 17
Event                            | 18
Mutant                           | 19
Callback                         | 20
Semaphore                        | 21
Timer                            | 22
IRTimer                          | 23
Profile                          | 24
KeyedEvent                       | 25
WindowStation                    | 26
Desktop                          | 27
Composition                      | 28
RawInputManager                  | 29
CoreMessaging                    | 30
ActivationObject                 | 31
TpWorkerFactory                  | 32
Adapter                          | 33
Controller                       | 34
Device                           | 35
Driver                           | 36
IoCompletion                     | 37
WaitCompletionPacket             | 38
File                             | 39
IoRing                           | 40  // Only in Windows 11
TmTm                             | 41
TmTx                             | 42
TmRm                             | 43
TmEn                             | 44
Section                          | 45
Session                          | 46
Key                              | 47
RegistryTransaction              | 48
ALPC Port                        | 49
EnergyTracker                    | 50
PowerRequest                     | 51
WmiGuid                          | 52
EtwRegistration                  | 53
EtwSessionDemuxEntry             | 54
EtwConsumer                      | 55
CoverageSampler                  | 56
DmaAdapter                       | 57
PcwObject                        | 58
FilterConnectionPort             | 59
FilterCommunicationPort          | 60
NdisCmState                      | 61
DxgkSharedResource               | 62
DxgkSharedKeyedMutexObject       | 63
DxgkSharedSyncObject             | 64
DxgkSharedSwapChainObject        | 65
DxgkDisplayManagerObject         | 66
DxgkSharedProtectedSessionObject | 67
DxgkSharedBundleObject           | 68
DxgkCompositionObject            | 69
VRegConfigurationContext         | 70

Касаемо новых объектов ядра в Windows 11, могу порекомендовать почитать вот этот материал
ProcessStateChange и ThreadStateChange — Thread and Process State Change
IoRing — I/O Rings – When One I/O Operation is Not Enough

А это таблица индексов объектов ядра Windows 7

Кликните здесь для просмотра всего текста

Код:

TypeName                         | TypeIndex
---------------------------------|----------
(null)                           |  0
BAD0B0B0                         |  1
Type                             |  2
Directory                        |  3
SymbolicLink                     |  4
Token                            |  5
Job                              |  6
Process                          |  7
Thread                           |  8
UserApcReserve                   |  9
IoCompletionReserve              | 10
DebugObject                      | 11
Event                            | 12
EventPair                        | 13 // Only in Windows 7
Mutant                           | 14
Callback                         | 15
Semaphore                        | 16
Timer                            | 17
Profile                          | 18
KeyedEvent                       | 19
WindowStation                    | 20
Desktop                          | 21
TpWorkerFactory                  | 22
Adapter                          | 23
Controller                       | 24
Device                           | 25
Driver                           | 26
IoCompletion                     | 27
File                             | 28
TmTm                             | 29
TmTx                             | 30
TmRm                             | 31
TmEn                             | 32
Section                          | 33
Session                          | 34
Key                              | 35
ALPC Port                        | 36
PowerRequest                     | 37
WmiGuid                          | 38
EtwRegistration                  | 39
EtwConsumer                      | 40
FilterConnectionPort             | 41
FilterCommunicationPort          | 42
PcwObject                        | 43

В Microsoft посчитали, что такой лёгкий доступ к таблице индексов ObTypeIndexTable недопустим и постарались запутать исследователей.
Но их защита простояла недолго, достаточно быстро был найден способ получения валидного индекса, довольно нетрадиционным способом.

Во-первых, исследователи ядра начали искать фрагменты кода, которые имеют что-то общее со структурой _OBJECT_TYPE

Код:

lkd> x nt!ob*type*
fffff806`2bc21f8c nt!ObpCreateDefaultObjectTypeSD (void)
fffff806`2bc218d0 nt!ObCreateObjectTypeEx (void)
fffff806`2bd82214 nt!ObEnumerateObjectsByType (ObEnumerateObjectsByType)
fffff806`2c024ef0 nt!ObpTypeObjectType = <no type information>
fffff806`2c024ee0 nt!ObpDirectoryObjectType = <no type information>
fffff806`2c107470 nt!ObTypeIndexTable = <no type information>
fffff806`2bb23b28 nt!ObQueryTypeInfo (ObQueryTypeInfo)
fffff806`2bc21ef8 nt!ObpInitObjectTypeSD (ObpInitObjectTypeSD)
fffff806`2be36038 nt!ObpObjectTypesPathString = <no type information>
fffff806`2bd82a60 nt!ObpDestroyTypeArray (ObpDestroyTypeArray)
fffff806`2bd8295c nt!ObpCreateTypeArray (ObpCreateTypeArray)
fffff806`2bf54aa0 nt!ObpTypeMapping = <no type information>
fffff806`2be36028 nt!ObpObjectTypesNameString = <no type information>
fffff806`2baa3cc0 nt!ObGetObjectType (ObGetObjectType)
fffff806`2c024e20 nt!ObpTypeDirectoryObject = <no type information>
fffff806`2bc218b0 nt!ObCreateObjectType (ObCreateObjectType)
fffff806`2c024ee8 nt!ObpSymbolicLinkObjectType = <no type information>
fffff806`2c024620 nt!ObpObjectTypes = <no type information>
fffff806`2bd82d3c nt!ObQueryTypeName (ObQueryTypeName)

Поиски выявили интересную функцию, которую нельзя было упускать из виду только лишь из-за ее названия nt!ObGetObjectType.
Затем было решено посмотреть на её мнемонику ассемблерного кода

Код:

lkd> uf nt!ObGetObjectType
nt!ObGetObjectType:
fffff806`2baa3cc0 488d41d0        lea     rax,[rcx-30h]
fffff806`2baa3cc4 0fb649e8        movzx   ecx,byte ptr [rcx-18h]
fffff806`2baa3cc8 48c1e808        shr     rax,8
fffff806`2baa3ccc 0fb6c0          movzx   eax,al
fffff806`2baa3ccf 4833c1          xor     rax,rcx
fffff806`2baa3cd2 0fb60d2f2f6600  movzx   ecx,byte ptr [nt!ObHeaderCookie (fffff806`2c106c08)]
fffff806`2baa3cd9 4833c1          xor     rax,rcx
fffff806`2baa3cdc 488d0d8d376600  lea     rcx,[nt!ObTypeIndexTable (fffff806`2c107470)]
fffff806`2baa3ce3 488b04c1        mov     rax,qword ptr [rcx+rax*8]
fffff806`2baa3ce7 c3              ret

Функция ObGetObjectType принимает адрес объекта в качестве аргумента и выполняет следующие действия:
1. Код вычисляет адрес структуры _OBJECT_HEADER путем вычитания 0x30 из адреса памяти объекта, переданного в качестве аргумента.
0x30 это смещение от начала объекта до его заголовка в 64 битных ОС. В 32 битных ОС это смещение равняется 0x18.
2. Код выполняет операцию XOR для значения TypeIndex со вторым младшим байтом адреса структуры _OBJECT_HEADER, вычисленного на предыдущем шаге.
3. Затем код выполняет операцию XOR для результата из второго шага с байтом по адресу ObHeaderCookie.
4. Наконец результат операций XOR используется как индекс в ObTypeIndexTable и возвращает указатель на структуру _OBJECT_TYPE по этому индексу.

Теперь более простым языком, чтобы было понятно.
У нас есть объект PROCESS ffffc4052a8df040 процесса System, определенный после выполнения команды !process 0 0 System
От его значения мы отнимаем смещение до начала заголовка объекта: ffffc4052a8df040 — 0x30 = ffffc4052a8df010
Отсчёт байт начинается справа налево. Таким образом второй младший байт это 0xf0 (ffffc4052a8d f0 10).
Затем, необходимо выполнить команду db nt!ObHeaderCookie l1 чтобы определить байт в cookie, он равен 0xb9.
TypeIndex в зашифрованном виде равен 0x4e.
Теперь у нас есть все необходимые данные, они же ключи для расшифровки закодированного индекса методом XOR.
Введём следующую команду: ? f0 ^ 4e ^ b9
В итоге получаем расшифрованный TypeIndex: 0x7 для процесса System как и в случае с Windows 7.

Выведем таблицу ObTypeIndexTable командой dps nt!ObTypeIndexTable (как видите BAD ObjectHeader в Windows 10/11 уже нет).
Остаётся лишь только проверить имя Name : _UNICODE_STRING «Process» и адреса в TypeList : _LIST_ENTRY (0xffffc405`2a8bf380),
командой dt nt!_OBJECT_TYPE poi(nt!ObTypeIndexTable + (7 * 8))
Нажмите на изображение для увеличения
Название: 11.png
Просмотров: 186
Размер:	40.5 Кб
ID:	7345

Ну чтож, на этом я хотел бы поставить точку в изучении объектов операционной системы Windows.
Конечно же это только верхушка айсберга, и внутреннее устройство ОС Windows куда сложнее того, что я показал здесь.
Но главное, мы научились вскрывать то, что Microsoft зашифровала, причём на уровне ядра.


Чтобы исправить различные проблемы с ПК, мы рекомендуем Restoro PC Repair Tool: это программное обеспечение исправит распространенные компьютерные ошибки, защитит вас от потери файлов, вредоносных программ, сбоев оборудования и оптимизирует ваш компьютер для максимальной производительности. Решите проблемы с ПК и удалите вирусы прямо сейчас, выполнив 3 простых шага:

  1. Загрузите Restoro PC Repair Tool, который поставляется с запатентованными технологиями (патент доступен здесь ).
  2. Нажмите Начать сканирование, чтобы найти проблемы Windows, которые могут вызывать проблемы с ПК.
  3. Нажмите «Восстановить все», чтобы исправить проблемы, влияющие на безопасность и производительность вашего компьютера.
  • В этом месяце Restoro скачали 657 095 читателей.

Ядро можно считать одним из строительных блоков Windows, в качестве операционной системы. Это главным образом потому, что он контролирует все процессы, запущенные в системе.

При этом любые проблемы и проблемы с ядрами могут привести к нарушению функциональности вашего ПК, в том числе к ошибкам Blue Screen of Death.

К сожалению, даже Windows 10, последняя версия ОС Windows не застрахована от таких проблем. Хорошая новость заключается в том, что код ядра можно отлаживать, если вы знаете, как это сделать.

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

Как я могу начать отладку ядра?

Ответ на этот вопрос довольно сложен, но достаточно сказать, что вам нужно выполнить ряд заранее определенных шагов, прежде чем вы сможете начать:

1 Определите, какой компьютер является хостом, а какой – целевой.

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

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

2 Определите, будете ли вы выполнять отладку в режиме ядра или в пользовательском режиме.

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

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

3 Выберите среду отладки

Среда отладки – это в основном программа, которую вы будете использовать для отладки. WinDbg работает хорошо в большинстве ситуаций, но бывают случаи, когда другие могут работать лучше, например консольные отладчики для автоматизации или Visual Studio.

4 Выясните, как вы соедините цель и хост

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

5 Выберите между 32-битными или 64-битными инструментами отладки

Это, вероятно, самый простой шаг из всех, поскольку это зависит от того, какая версия Windows запущена на хосте и целевом компьютере, а также от того, является ли код, требующий отладки, 32-битным или 64-битным кодом.

6 Настройте свои символы

Запустите сканирование системы, чтобы обнаружить потенциальные ошибки

Нажмите «Начать сканирование», чтобы найти проблемы с Windows.

Нажмите «Восстановить все», чтобы исправить проблемы с запатентованными технологиями.

Запустите сканирование ПК с помощью Restoro Repair Tool, чтобы найти ошибки, вызывающие проблемы с безопасностью и замедление. После завершения сканирования в процессе восстановления поврежденные файлы заменяются новыми файлами и компонентами Windows.

Если вы используете такую ​​среду, как WinDbg, вам необходимо настроить правильные символы, если вы хотите использовать все ее расширенные функции. Если вы не настроите их, вы не сможете использовать какие-либо функции отладчика, которые зависят от этих символов.

7 Настройте исходный код

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

8 Ознакомьтесь с отладкой

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

9 Используйте справочные команды отладчика

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

Хорошим примером является команда .hh, которая отображает справочную документацию по каждой доступной команде.

10 Используйте расширения отладки

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

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

Заключительные мысли

Вышеупомянутые шаги – это все основные процедуры, которые необходимо выполнить при попытке отладки ядра.

Конечно, есть много конкретных ситуаций, в которых эти шаги могут отличаться, но суть в том, что все они включают более или менее эти 10 основных шагов.

Наша статья помогла вам лучше понять, как начать отладку ядра? Сообщите нам свое мнение в разделе комментариев ниже.

СООТВЕТСТВУЮЩИЕ СТАТЬИ, ВЫ ДОЛЖНЫ ПРОВЕРИТЬ:

  • Как мы навсегда исправили ошибку Kernel Security Check Failure
  • KB4530684 улучшает ядро ​​и виртуализацию Windows.
  • BSOD с повреждением кучи режима ядра в Windows 10 [БЫСТРОЕ ИСПРАВЛЕНИЕ]

Источник записи: windowsreport.com

Для проведения отладки ядра необходимо подключиться к компьютеру с помощью нуль-модемного кабеля или модемного соединения. Компьютер, выполняющий отладку, будет называться “Host”, а название “Target” получит проблемный компьютер.

Оба компьютера должны работать под управлением одной и той же версии Windows, а символьные файлы для компьютера Target должны быть установлены на компьютере Host. Символьные файлы предоставляются на установочном компакт-диске Windows в каталоге SupportDebug.

Для включения отладки необходимо внести изменения в файл BOOT.INI на компьютере Target.

  1.  Поменяйте атрибуты файла BOOT.INI:

attrib c:boot.ini – r – s

  2.  Отредактируйте этот файл и в строку запуска Windows добавьте параметр /debug (для того, чтобы сообщить системе о необходимости загрузки в оперативную память отладчика ядра при загрузке Windows). Дополнительными параметрами являются /Debugport, сообщающий системе, какой порт COM необходимо использовать (по умолчанию COM2) и /Baudrate — для указания скорости передачи данных (по умолчанию указана скорость 19200 бод, но лучше использовать 9600). Например:

[operating systems]
multi(0)disk(0)rdisk(0)partition(0)WINDOWS=»Windows NT» /debug /debugport=com2 /baudrate=9600

  3.  Сохраните файл.

  4.  Установите предыдущие атрибуты файла BOOT.INI:

attrib c:boot.ini +r +s

В данном примере компьютер Target разрешил соединение через порт COM2 со скоростью 9600 бит/с.

Компьютер Host должен быть настроен с использованием параметров, необходимых для проведения отладки. Кроме того, должны быть установлены символьные файлы. Для их установки перейдите в каталог supportdebug на установочном компакт-диске и введите следующую команду:

expndsym <CD-ROM>: <целевой диск и каталог>

Например:

expndsym f: d:symbols

Установка может занять некоторое время. Помните, что если на компьютер Target были установлены пакеты обновлений, символьные файлы этих пакетов также следует установить на компьютер Host. Символьные файлы для пакетов обновлений можно загрузить с сайтега компании Microsoft.

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

Описание системных переменных

_NT_DEBUG_PORT

Порт COM, который должен использоваться для отладки (например, COM2)

_NT_DEBUG_BAUD_RATE

Скорость соединения (например, 9600 бит/с). Убедитесь в том, что указанная скорость соответствует скорости, настроенной на целевом компьютере

_NT_SYMBOL_PATH

Расположение символьных файлов (каталог, в который они были распакованы с помощью утилиты expndsym)

_NT_LOG_FILE_OPEN

Имя файла, который будет использоваться для протоколирования сеансов отладки (необязательная переменная)

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

echo off
set _nt_debug_port=com2
set _nt_debug_baud_rate=9600
set _nt_symbol_path=d:symbolsi386
set _nt_log_file_open=d:debuglogsdebug.log

Теперь необходимо скопировать программное обеспечение отладки ядра, которое расположено в каталоге supportdebug<процессор> на установочном компакт-диске (supportdebugI386). Проще всего скопировать весь каталог полностью, поскольку он имеет небольшой размер (около 2,5 Мбайт). Для платформы I386 используется отладчик, который поставляется в виде файла I386KD.EXE. Отладчик запускается с помощью команды I386KD. Для ввода команды нажмите комбинацию клавиш <Ctrl+C> и подождите, пока появится приглашение командной строки kd>.

Понравилась статья? Поделить с друзьями:
  • Включение отключение микрофона в windows 10
  • Включение отключение компонентов windows server 2016
  • Включение оснастки active directory windows 10
  • Включение окна выбора пользователя windows 7
  • Включение обязательной проверки подписи драйверов windows 10