¿Hay algún problema conocido relacionado con los símbolos del kernel de Windows 7?

Tengo algunas máquinas con Windows 7 que no puedo leer sus volcados de memoria. Encontré algo que sospecho que puede estar relacionado, pero no estoy seguro:

También encontré esto: http://support.microsoft.com/kb/2528507

Sin embargo, el mensaje de escenario con respecto a wow64exts dado en el documento no se ve en ninguno de mis volcados. Tampoco puedo aplicar ese hotfix en este momento para probarlo. Así que estoy buscando más información u opiniones.

Puedo abrir cualquier otro volcado de sistema operativo así como el volcado de Windows 7 de mi propio sistema, pero hay otras dos máquinas que ejecutan Win 7 y me dice que tengo los símbolos del kernel incorrectos.

Intenté borrar mi caché de símbolos, reinstalé el SDK de Windows y también intenté abrir los volcados en otras dos máquinas con el mismo resultado. Si es importante, el locking se crea manualmente utilizando el método de locking de desplazamiento.

SRV*c:\symbols*http://msdl.microsoft.com/download/symbols; símbolo: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols;

Ver estos errores: seguido por “Tipo referenciado: nt! _KPRCB”

¿Alguien sabe sobre el tema mencionado por Alex en el enlace de Twitter y si posiblemente está relacionado con lo que estoy viendo?

Actualización 2015-10-22:

Con el día del parche de Microsoft (2015-10-13) y KB3088195 , los símbolos están disponibles nuevamente.

Sin embargo, los símbolos para la versión rota no se han proporcionado, por lo que a continuación puede ser útil.


Microsoft ya ha publicado símbolos “buenos” para ntdll en el pasado, que contienen información de tipo como _TEB o _KPRCB . A partir de mediados de julio de 2015, Microsoft todavía publicó símbolos para ntdll , pero no contiene esa información.

Entonces depende de la versión de ntdll si obtienes información de tipo o no. Los volcados viejos que hacen referencia a una versión anterior de ntdll descargarán ntdll viejos que contienen información de tipo, mientras que los nuevos volcados hacen referencia a nuevas versiones de ntdll y WinDbg (o cualquier otro depurador) descarga PDB sin información de tipo.

¿Podría Microsoft eliminar la información de tipo de símbolos “buenos” de forma retroactiva, convirtiéndolos así en “malos”?

Sí. Como se describe en esta respuesta , hay una herramienta para eliminar la información de tipo de los PDB existentes. Hacer eso y reemplazar el AP tendría como resultado tal efecto.

¿Microsoft puede publicar la versión “buena” de esos PDB que actualmente son “malos”?

Eso es difícil de decir, ya que no sabemos si Microsoft ha conservado una copia de la versión “buena” para que puedan reemplazar la versión “mala” en el servidor de símbolos con la “buena”. Reconstruir ntdll desde el mismo código fuente y así crear nuevos PDB suena posible, pero el PDB obtiene una nueva marca de tiempo y sum de comprobación. Esto puede corregirse potencialmente, especialmente Microsoft, ya que deberían tener el conocimiento sobre el formato interno de PDB, pero en mi humilde opinión es poco probable que lo hagan. Las cosas pueden salir mal y MS apenas tendrá pruebas para garantizar la exactitud de tal cosa.

¿Entonces Que puedo hacer?

En mi humilde opinión, no puede hacer nada para corregir realmente la situación.

Podría suponer que los tipos en ntdll no han cambiado tanto. Esto le permitiría tomar una versión anterior de wntdll.pdb y la nueva versión de ntdll.dll y aplicarle ChkMatch-m . Esto copiará la marca de tiempo y la sum de verificación de la DLL al PDB. Después de hacer eso (en una carpeta vacía), reemplace el wntdll.pdb existente en su directorio de símbolos con el hackeado.

WinDbg walkthrough (con salida abreviada a cosas relevantes). Estoy usando la última versión de wntdll.pdb que pude encontrar en mi PC.

ADVERTENCIA: hacer lo siguiente puede corregir la información del tipo, pero probablemente destruirá la corrección de las llamadas. Dado que cualquier cambio en la implementación (que es probable para las soluciones de seguridad) cambiará las compensaciones del método.

 0:005> dt nt!_PEB ************************************************************************* *** *** *** Either you specified an unqualified symbol, or your debugger *** ... *** Type referenced: nt!_PEB *** *** *** ************************************************************************* Symbol nt!_PEB not found. 0:005> lm m ntdll start end module name 773f0000 77570000 ntdll (pdb symbols) e:\debug\symbols\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb 0:005> .shell cmd /c copy C:\Windows\SysWOW64\ntdll.dll e:\debug\temp\ntdllhack\ntdll.dll 1 file(s) copied. 0:005> .shell cmd /c copy "E:\Windows SDk\8.0\Debuggers\x86\sym\wntdll.pdb\B081677DFC724CC4AC53992627BEEA242\wntdll.pdb" e:\debug\temp\ntdllhack\wntdll.pdb 1 file(s) copied. 0:005> .shell cmd /c E:\debug\temp\ntdllhack\chkmatch.exe -m E:\debug\temp\ntdllhack\ntdll.dll E:\debug\temp\ntdllhack\wntdll.pdb ... Executable: E:\debug\temp\ntdllhack\ntdll.dll Debug info file: E:\debug\temp\ntdllhack\wntdll.pdb Executable: TimeDateStamp: 55a69e20 Debug info: 2 ( CodeView ) TimeStamp: 55a68c18 Characteristics: 0 MajorVer: 0 MinorVer: 0 Size: 35 RVA: 000e63e0 FileOffset: 000d67e0 CodeView format: RSDS Signature: {fa9c48f9-c11d-4e08-94b8-970decd92c97} Age: 2 PdbFile: wntdll.pdb Debug info: 10 ( Unknown ) TimeStamp: 55a68c18 Characteristics: 0 MajorVer: 565 MinorVer: 6526 Size: 4 RVA: 000e63dc FileOffset: 000d67dc Debug information file: Format: PDB 7.00 Signature: {b081677d-fc72-4cc4-ac53-992627beea24} Age: 4 Writing to the debug information file... Result: Success. 0:005> .shell cmd /c copy E:\debug\temp\ntdllhack\wntdll.pdb E:\debug\symbols\wntdll.pdb\FA9C48F9C11D4E0894B8970DECD92C972\wntdll.pdb 1 file(s) copied. 0:005> .reload Reloading current modules ............................. 0:005> dt nt!_PEB ntdll!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar ... 0:005> !heap -s LFH Key : 0x219ab08b Termination on corruption : DISABLED Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast (k) (k) (k) (k) length blocks cont. heap ----------------------------------------------------------------------------- Virtual block: 00920000 - 00920000 (size 00000000) Virtual block: 02c60000 - 02c60000 (size 00000000) Virtual block: 02e10000 - 02e10000 (size 00000000) ... 

Nota: usar ChkMatch esta manera tiene el beneficio de no tener que activar .symopt- 100 , ya que esa opción afectaría a todos los archivos PDB, y no encontraría otros posibles problemas de símbolos. Si no te molesta usar .symopt , simplemente puedes copiar un viejo wntdll.PDB sobre el nuevo.

El problema ahora está arreglado de acuerdo con Microsoft y Microsoft me dijo que debe borrar su caché de símbolos para obtener los nuevos PDB, de lo contrario, Windbg usaría los viejos símbolos que omiten la información.

    Intereting Posts