когда и как использовать отладку ядра windbg
Я обнаружил, что Windbg очень полезен во время разработки и отладки. но в основном я использую windbg в отладке режима использования.
Что может сделать отладка ядра в windbg? или когда я должен использовать отладку ядра windbg?
есть ли toturial об отладке ядра в windbg?
спасибо заранее.
3 ответов
вы обычно используете отладку ядра, когда вам нужно отлаживать драйверы устройств низкого уровня, взаимодействующие непосредственно с оборудованием.
Более сложно отлаживать в режиме ядра, среди прочего, для сеанса отладки живого ядра вам нужно запустить отладчик в другой системе, чем отлаживаемый . для большинства разработчиков пользовательского режима достаточно сделать большую часть работы.
Расширенная Отладка Windows очень хорошая книга об отладке с wndbg (включает обсуждение отладки ядра).
на свалка анализ сайт имеет много учебных пособий, включая сценарии отладки ядра
основное различие между пользовательским режимом и режимом ядра WINDBG, вы можете увидеть каждый процесс в режиме ядра WINDBG, и все потоки. Вам не нужно будет видеть каждый кадр стека, так как они часто выгружаются диспетчером памяти.
некоторые общие команды, которые я часто использую.
!процесс 0 0 список всех запущенных процессов:
**** NT ACTIVE PROCESS DUMP ****
PROCESS 80a02a60 Cid: 0002 Peb: 00000000 ParentCid: 0000
DirBase: 00006e05 ObjectTable: 80a03788 TableSize: 150.
Image: System
PROCESS 80986f40 Cid: 0012 Peb: 7ffde000 ParentCid: 0002
DirBase: 000bd605 ObjectTable: 8098fce8 TableSize: 38.
Image: smss.exe
PROCESS 80958020 Cid: 001a Peb: 7ffde000 ParentCid: 0012
DirBase: 0008b205 ObjectTable: 809782a8 TableSize: 150.
Image: csrss.exe
PROCESS 80955040 Cid: 0020 Peb: 7ffde000 ParentCid: 0012
DirBase: 00112005 ObjectTable: 80955ce8 TableSize: 54.
Image: winlogon.exe
PROCESS 8094fce0 Cid: 0026 Peb: 7ffde000 ParentCid: 0020
DirBase: 00055005 ObjectTable: 80950cc8 TableSize: 222.
Image: services.exe
PROCESS 8094c020 Cid: 0029 Peb: 7ffde000 ParentCid: 0020
DirBase: 000c4605 ObjectTable: 80990fe8 TableSize: 110.
Image: lsass.exe
PROCESS 809258e0 Cid: 0044 Peb: 7ffde000 ParentCid: 0026
DirBase: 001e5405 ObjectTable: 80925c68 TableSize: 70.
Image: SPOOLSS.EXE
.процесс {х} Выберите процесс, который вы хотите сделать активным, обычно следует !команда потоков список a обрабатывает текущие потоки.
!стеки 0x2 {foo.системный} выполняет поиск во всех потоках стеков вызовов, содержащих указанный драйвер.
!poolused полезно при отладке ситуаций с низкой памятью ядра, и все, что у вас есть, это аварийный дамп ядра
.крушение Полезно, когда вы отлаживаете live через последовательный кабель, и вы хотите, чтобы целевая машина написала аварийный дамп
!vm 1 Полезное отображение статистики менеджеров памяти, пример:
*** Virtual Memory Usage ***
Physical Memory: 16270 ( 65080 Kb)
Page File: \??\E:\pagefile.sys
Current: 98304Kb Free Space: 61044Kb
Minimum: 98304Kb Maximum: 196608Kb
Available Pages: 5543 ( 22172 Kb)
ResAvail Pages: 6759 ( 27036 Kb)
Locked IO Pages: 112 ( 448 Kb)
Free System PTEs: 45089 ( 180356 Kb)
Free NP PTEs: 5145 ( 20580 Kb)
Free Special NP: 336 ( 1344 Kb)
Modified Pages: 714 ( 2856 Kb)
NonPagedPool Usage: 877 ( 3508 Kb)
NonPagedPool Max: 6252 ( 25008 Kb)
PagedPool 0 Usage: 729 ( 2916 Kb)
PagedPool 1 Usage: 432 ( 1728 Kb)
PagedPool 2 Usage: 436 ( 1744 Kb)
PagedPool Usage: 1597 ( 6388 Kb)
PagedPool Maximum: 13312 ( 53248 Kb)
Shared Commit: 1097 ( 4388 Kb)
Special Pool: 229 ( 916 Kb)
Shared Process: 1956 ( 7824 Kb)
PagedPool Commit: 1597 ( 6388 Kb)
Driver Commit: 828 ( 3312 Kb)
Committed pages: 21949 ( 87796 Kb)
Commit limit: 36256 ( 145024 Kb)
и не забывайте всемогущего !замки!--4-->
абсолютно необходимо для устранения неполадок заблокированной машины,
kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks......
Resource @ 0x80e97620 Shared 4 owning threads
Threads: ff688da0-01<*> ff687da0-01<*> ff686da0-01<*> ff685da0-01<*>
KD: Scanning for held locks.......................................................
Resource @ 0x80e23f38 Shared 1 owning threads
Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
KD: Scanning for held locks.
Resource @ 0x80d8b0b0 Shared 1 owning threads
Threads: 80ed0023-01<*> *** Actual Thread 80ed0020
2263 total locks, 3 locks currently held
С помощью этой команды вы можете отследить потоки, которые застряли в ожидании другого потока, чтобы выпустить ERESOURCE
Вероятно, вы захотите отлаживать только в режиме ядра, когда ваш код работает в режиме ядра, т. е. когда вы пишете драйверы или что-то еще, что работает в ядре. Или, возможно, если вы пытаетесь узнать больше о самой Windows на очень низком уровне, исследуя вокруг в ядре и тыкать и тыкать в вещи.
при поиске учебников и других справочных материалов вы можете искать ссылки "kd", а также они, вероятно, будут очень похожи. (КейДи средство отладки ядра командной строки.)