是,如果EBP帧指针为NULL堆栈损坏?(Is the stack corrupted if the

2019-09-16 23:59发布

我的堆栈跟踪的理解本质上是基于什么是完全相同的基指针和堆栈指针? 做他们观点是什么? 。

一个程序我一直在帮助开发多年吐出堆栈转储当它崩溃了,我已经习惯了与C ++编译器生成一个.map文件评估这些堆栈跟踪,对应。 许多次,我已经成功地能走栈和调试问题。

然而,有时栈跟踪具有NULL EBP(帧)的指针。 下面是从这样的样品堆栈转储的相关片段:

Initial EBP pointer value: 04d8fab0
{at address 04d8fab0: 00000000}

正如你所看到的,EBP帧指针值为NULL。 因此,我不能走栈。

这是一个损坏的堆栈的迹象,或有另一种可能的解释?

Answer 1:

正如你所看到的,EBP帧指针值为NULL。 因此,我不能走栈。 这是一个损坏的堆栈的迹象,或有另一种可能的解释?

我认为另外一种解释,扎根,除了保持当前堆栈帧的地址,EBP寄存器也可用于类似通用寄存器任何其他目的的事实。 为了做到这一点安全,需要两两件事:

  1. 通过调用存储其当前内容到堆栈

    PUSH EBP

  2. 恢复通用使用后,并通过调用退出当前procedue前的内容

    POP EBP

所以我在想您所遇到不一定由堆栈损坏引起的情况下,因为它在技术上可能是已生成转储而暂时被用于一般用途的使用由某处在这个过程中其他EBP寄存器代码,也许甚至没有代码,你已经写了。



文章来源: Is the stack corrupted if the EBP frame pointer is NULL?