Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Отладчик ядра должен считывать заголовок для каждого загруженного образа модуля, чтобы узнать, какие символы соответствуют этим модулю.
Если заголовок модуля выгружается на диск, отладчик не загружает символы для этого модуля. Если это происходит с модулем, важным для процесса отладки, это может быть критической проблемой.
Для решения этой проблемы можно использовать следующую процедуру.
Получение символов для выгруженных заголовков
Создайте вторую копию самого ядра. Это, вероятно, проще всего разместить на сетевом хранилище.
Добавьте корневой каталог этой сетевой папки в символьный путь. См. Symbol Path для способов изменения пути к символам.
Используйте команду reload (Reload Module).
Используйте команду расширения !sym noisy, чтобы увидеть более подробные выходные данные. Если это используется, вы сможете увидеть, какие символы загружаются из образов модулей на целевом компьютере и которые загружаются из копии модулей ядра.
Этот метод должен использоваться с осторожностью, так как отладчик не имеет способа проверить, совпадают ли копии файлов с исходными данными. Поэтому важно, чтобы версия Windows, используемая в общей сетевой папке, соответствовала версии, используемой на целевом компьютере.
Этот метод используется только для отладки в режиме ядра. Операционная система может выполнять разбиение по страницам в любых заголовках, необходимых во время отладки в пользовательском режиме (если диск, содержащий файл подкачки, отключен или недоступен).
Ниже приведен пример использования этого метода:
kd> .reload
Connected to Windows XP 2268 x86 compatible target, ptr64 FALSE
Loading Kernel Symbols
..........Unable to read image header for dmload.sys at fe0be000 - NTSTATUS 0xC0000001
..........Unable to read image header for dmboot.sys at fda93000 - NTSTATUS 0xC0000001
.....................................Unable to read image header for fdc.sys at fdfc2000 - NTSTATUS 0xC0000001
...Unable to read image header for flpydisk.sys at fde4a000 - NTSTATUS 0xC0000001
.Unable to read image header for Fs_Rec.SYS at fe0c8000 - NTSTATUS 0xC0000001
.Unable to read image header for Null.SYS at fe2c4000 - NTSTATUS 0xC0000001
...................Unable to read image header for win32k.sys at a0000000 - NTSTATUS 0xC0000001
..Unable to read image header for dxg.sys at a0194000 - NTSTATUS 0xC0000001
.......Unable to read image header for ati2draa.dll at a01a4000 - NTSTATUS 0xC0000001
..Unable to read image header for ParVdm.SYS at fe116000 - NTSTATUS 0xC0000001
.......
Loading unloaded module list
..............
Loading User Symbols
Unable to retrieve the PEB address. This is usually caused
by being in the wrong process context or by paging
Обратите внимание, что многие изображения имеют недоступные заголовки. Проверьте символы из одного из этих файлов (в этом примере fs_rec.sys):
kd> x fs_rec!*
*** ERROR: Module load completed but symbols could not be loaded for fs_rec.sys
Эти заголовки, по-видимому, вытеснены. Поэтому необходимо добавить соответствующие изображения в путь к символу.
kd> .sympath+ \\myserver\myshare\symbols\x86fre\symbols
Symbol search path is: symsrv*symsrv.dll*c:\localcache*https://msdl.microsoft.com/download/symbols;\\myserver\myshare\symbols\x86fre\symbols
kd> .reload
Connected to Windows XP 2268 x86 compatible target, ptr64 FALSE
Loading Kernel Symbols
..........Unable to read image header for dmload.sys at fe0be000 - NTSTATUS 0xC0000001
..........Unable to read image header for dmboot.sys at fda93000 - NTSTATUS 0xC0000001
.....................................Unable to read image header for fdc.sys at fdfc2000 - NTSTATUS 0xC0000001
...Unable to read image header for flpydisk.sys at fde4a000 - NTSTATUS 0xC0000001
.Unable to read image header for Fs_Rec.SYS at fe0c8000 - NTSTATUS 0xC0000001
.Unable to read image header for Null.SYS at fe2c4000 - NTSTATUS 0xC0000001
...................Unable to read image header for win32k.sys at a0000000 - NTSTATUS 0xC0000001
..Unable to read image header for dxg.sys at a0194000 - NTSTATUS 0xC0000001
.......Unable to read image header for ati2draa.dll at a01a4000 - NTSTATUS 0xC0000001
..Unable to read image header for ParVdm.SYS at fe116000 - NTSTATUS 0xC0000001
.......
Loading unloaded module list
..............
Loading User Symbols
Unable to retrieve the PEB address. This is usually caused
by being in the wrong process context or by paging
Появились те же предупреждения, но сами символы теперь доступны:
kd> x fs_Rec!*
fe0c8358 Fs_Rec!_imp___allmul
fe0c8310 Fs_Rec!_imp__IoCreateDevice
fe0c835c Fs_Rec!_imp___allshr
........
fe0c8360 Fs_Rec!ntoskrnl_NULL_THUNK_DATA
fe0c832c Fs_Rec!_imp__KeSetEvent
fe0c9570 Fs_Rec!_NULL_IMPORT_DESCRIPTOR