Windows WinDbg:调用堆栈和反汇编不一致
我正在用WinDbg调试一个程序 在崩溃现场,调用堆栈的最后两帧是:Windows WinDbg:调用堆栈和反汇编不一致,windows,assembly,windbg,disassembly,Windows,Assembly,Windbg,Disassembly,我正在用WinDbg调试一个程序 在崩溃现场,调用堆栈的最后两帧是: ChildEBP RetAddr WARNING: Stack unwind information not available. Following frames may be wrong. 0251bfe8 6031f8da npdf!ProvideCoreHFT2+0x24db0 0251c000 011eb7a5 npdf!ProvideCoreHFT2+0x5ac1a ... 我想了解帧1如何调用帧0。由于帧0
ChildEBP RetAddr
WARNING: Stack unwind information not available. Following frames may be wrong.
0251bfe8 6031f8da npdf!ProvideCoreHFT2+0x24db0
0251c000 011eb7a5 npdf!ProvideCoreHFT2+0x5ac1a
...
我想了解帧1如何调用帧0。由于帧0的返回地址是6031f8da,我打开反汇编窗口并跳转到该位置,代码如下:
...
6031f8d5 e8a6d0ffff call npdf!ProvideCoreHFT2+0x57cc0 (6031c980)
6031f8da 5f pop edi
...
我的问题是,在返回地址之前的call指令调用npdf!PROVIDECRHEHFT2+0x57cc0,而第0帧中的函数实际上是npdf!提供REHFT2+0x24db0。为什么会存在这种不一致性?我应该如何进行
多谢各位 您可能错过了
以下帧,可能是错误的部分。。。事实上,在显示的帧之间可能有另一个函数调用。您可以查看0x57cc0
,看看它是否实际设置了堆栈帧,以及它是否调用了其他任何东西。您还可以搜索24db0
的调用站点。任何堆栈跟踪中的偏移部分都是不可靠的。不要使用它+24db0+57cc0等将始终是虚假的,尤其是在发布版本上,当调试信息正确时生成pdb,如果可用,则在优化之前使用解析地址(6031c980是正确的,因此function@Jester谢谢!我想你是对的。调用堆栈中显示的两个帧之间有函数调用。当查看+0x57cc0时,我发现更多函数调用…@blabb谢谢!我会照你说的做。