嗨,我正在尝试使用WinDbg来查看memory.dmp内核转储文件,以诊断崩溃。当我打开崩溃文件并获得符号时,我得到了消息
BugCheck A, {2, ff, 4e, fffff801a42ebff2}
CompressedPageDataReader warning: failed to get _SM_PAGE_KEY symbol.
CompressedPageDataReader warning: failed to get _SM_PAGE_KEY symbol.
Probably caused by : ntkrnlmp.exe ( nt!KxWaitForLockOwnerShipWithIrql+12 )
Followup: MachineOwner
---------
0: kd> .reload
Loading Kernel Symbols
..................................CompressedPageDataReader warning: failed to get _SM_PAGE_KEY symbol.
Loading User Symbols
PEB is paged out (Peb.Ldr = 000000e1`114f4018). Type ".hh dbgerr001" for details
我认为这意味着它无法加载某些符号。当我尝试!vad进程修复PEB页面错误时,我得到了
0: kd> !vad 000000e1114f4018 1
VAD @ ffffca0f084164e0
Start VPN e111400 End VPN e1115ff Control Area 0000000000000000
FirstProtoPte 0000000000000000 LastPte f943916c00000002 Commit Charge 21 (0n33)
Secured.Flink 0 Blink 0 Banked/Extend 0
File Offset 50005
ViewUnmap NoChange PrivateMemory READWRITE
这与互联网告诉我的结果不符。
当我尝试!process方法时
0: kd> !process 000000e1114f4018 1
Searching for Process with Cid == e1114f4018
Invalid Handle: 0x114f4018
***Could not retrieve process handle from the Cid table. Searching...
这也是一个错误,它也不会加载符号。怎么了?如果有足够的信息,则无论是符号加载还是崩溃本身。
注意:我已经尝试了MSDN页面上的解决方案,但它们无法按说明工作。问题的一部分是我不知道我是否正在正确使用命令中在PEB页面调出错误消息中给出的000000e1`114f4018地址。
注意2:这是WinDBG崩溃报告的链接。如果有人能够找出原因并解释他们如何找出原因,那将是花花公子。
https://www.scribd.com/document/326672131/Crash-Archive
最佳答案
被分页的PEB是正常的。为了提供PEB,转储必须是完整的内存转储,并且在崩溃时必须驻留相应的页面。
这基本上无关紧要,因为PEB包含用户模式状态(用户加载的模块,命令行,环境变量等),通常对于内核模式崩溃不感兴趣。
有趣的是!analyze -v输出,包括故障线程的内核模式堆栈。根据您提供的信息,我们至少可以看到崩溃代码:
BugCheck A,{2,ff,4e,fffff801a42ebff2}
Bugcheck A是一个IRQL_NOT_LESS_OR_EQUAL,这意味着您在升高的IRQL(> = DISPATCH_LEVEL)处具有无效的指针取消引用。第一个参数是错误的地址(“2”),第二个参数是IRQL(“0xFF”-这是WinDbg所说的“在处理器上禁用中断”)。
总之,这意味着某人已取消引用地址“2”,这显然不是一件好事。碰巧是在处理器上禁用了中断的情况下发生的,因此您得到了IRQL_NOT_LESS_OR_EQUAL。然后,诀窍是查看调用堆栈和错误指令,并找出“2”的来源。
关于windows - 尝试使用WinDbg来分析转储文件: PEB is Paged Out,将不加载符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39885483/