0

我是windbg的新手,在windows中进行内存分析。我尝试分析内存转储(崩溃转储)它是 x64 系统。

加载所有符号(我的和微软的)后,我输入!analyze -v

这是输出的一部分:

......
FAULTING_SOURCE_CODE:  <some code here>

SYMBOL_STACK_INDEX:  6

SYMBOL_NAME:  rtplogic!CSRTPStack::Finalize+19d

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: RTPLogic

IMAGE_NAME:  RTPLogic.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  58542837

STACK_COMMAND:  ~544s; .ecxr ; kb

FAILURE_BUCKET_ID:  WRONG_SYMBOLS_c0000374_RTPLogic.dll!CSRTPStack::Finalize

BUCKET_ID:  X64_APPLICATION_FAULT_WRONG_SYMBOLS_rtplogic!CSRTPStack::Finalize+19d
......

WRONG_SYMBOLS让我很担心。

我可以确定FAULTING_SOURCE_CODE其中的代码是与崩溃相关的代码吗?

4

2 回答 2

2

不,不幸的是你不能相信它。在调用堆栈的分析中至少有一点,调试器不能 100% 确定他是否正确地展开堆栈。

当您键入时,~544s; .ecxr; k您会看到一个调用堆栈。该调用堆栈将在它变得不确定时包含一个警告。您可以信任之前的所有内容,这可能已经有所帮助,但您不能信任警告下方的堆栈帧。

您可以将k输出与dps @ebpL fff如果还不够,可以添加)进行比较,以查看调试器可能猜到的其他内容。

请注意,dps如果意外地,您在堆栈上的一项计算导致了一个可以被解释为符号的值,那么在您的输出中也可能会看到完全不相关的内容。

于 2017-01-26T13:20:50.990 回答
2

c0000374是一个STATUS_HEAP_CORRUPTION。查看正常转储仅显示发生损坏后的代码。

Pageheap使用 gflags.exe 为您的 exe激活

在此处输入图像描述

PageHeap启用在每个分配的边界保留内存的 Windows 功能,以检测访问超出分配的内存的尝试。这将使应用程序更快崩溃,在这里您可以看到崩溃的真正原因。打开 dmp 并运行!analyze -v以查看损坏的内容。

于 2017-01-26T15:52:55.163 回答