gpt4 book ai didi

c++ - 如果 EBP 帧指针为 NULL,堆栈是否已损坏?

转载 作者:可可西里 更新时间:2023-11-01 10:38:48 24 4
gpt4 key购买 nike

我对堆栈跟踪的理解基本上是基于 What is exactly the base pointer and stack pointer? To what do they point? .

多年来我一直在帮助开发的一个程序在崩溃时会吐出一个堆栈转储,我已经习惯于根据 C++ 编译器生成的 .map 文件来评估这些堆栈跟踪。很多次,我都成功地遍历了堆栈并调试了问题。

但是,有时堆栈跟踪有一个 NULL EBP(帧)指针。以下是此类示例堆栈转储中的相关片段:

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

可以看到,EBP帧指针的值为NULL。因此,我不能走堆栈。

这是堆栈损坏的迹象,还是有其他可能的解释?

最佳答案

As you can see, the value of the EBP frame pointer is NULL. Therefore, I cannot walk the stack. Is this the sign of a corrupted stack, or is there another possible explanation?

我认为另一种解释,其根源在于除了保存当前堆栈帧的地址外,EBP 寄存器还可以用于任何其他目的,如通用寄存器.为了安全地做到这一点,需要做两件事:

  1. 通过调用将其当前内容存入栈中

    PUSH EBP

  2. 通过调用恢复通用使用后退出当前程序前的内容

    POP EBP

所以我认为您遇到的情况不一定是由堆栈损坏引起的,因为从技术上讲,转储可能是在 EBP 寄存器暂时被其他地方用于通用用途时生成的流程的代码,甚至可能不是您编写的代码。

关于c++ - 如果 EBP 帧指针为 NULL,堆栈是否已损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com