Compartir a través de


Lectura de símbolos de encabezados de Paged-Out

El depurador de kernel debe leer el encabezado de cada imagen del módulo cargado para saber qué símbolos corresponden a ese módulo.

Si el encabezado de un módulo se pagina en el disco, el depurador no cargará símbolos para este módulo. Si esto sucede con un módulo que es esencial para el proceso de depuración, puede ser un problema crítico.

El siguiente procedimiento se puede usar para resolver este problema.

Para adquirir símbolos para encabezados paginados

  1. Realice una segunda copia del propio kernel. Probablemente sea más fácil colocarlo en un recurso compartido de red.

  2. Anexe el directorio raíz de este recurso compartido a la ruta de acceso del símbolo. Consulte Ruta de acceso de símbolos para conocer las formas de cambiar la ruta de acceso del símbolo.

  3. Use el comando .reload (Módulo de recarga).

  4. Use el comando de extensión !sym ruidoso para ver una salida más detallada. Si se usa, podrá ver qué símbolos se cargan desde las imágenes del módulo en el equipo de destino y cuáles se cargan desde la copia de los módulos kernel.

Esta técnica debe usarse con cuidado, ya que el depurador no tiene ninguna manera de comprobar si las copias del archivo coinciden realmente con los originales. Por lo tanto, es fundamental que la versión de Windows usada en el recurso compartido de red coincida con la versión usada en el equipo de destino.

Esta técnica solo se usa para la depuración en modo kernel. El sistema operativo es capaz de paginar en los encabezados necesarios durante la depuración en modo de usuario (a menos que el disco que contiene el archivo de paginación se desmonte o no sea inaccesible).

Este es un ejemplo de esta técnica que se usa:

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

Observe que muchas imágenes tienen encabezados inaccesibles. Compruebe los símbolos de uno de estos archivos (en este ejemplo, fs_rec.sys):

kd> x fs_rec!*
*** ERROR: Module load completed but symbols could not be loaded for fs_rec.sys

Aparentemente, estos encabezados se paginan. Por lo tanto, debe agregar las imágenes adecuadas a la ruta de acceso del símbolo:

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

Han aparecido las mismas advertencias, pero ahora se puede acceder a los símbolos:

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