gpt4 book ai didi

c - 使用保存的 EBP 值识别堆栈中的堆栈帧

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:26 24 4
gpt4 key购买 nike

我想通过查看堆栈上的原始数据将堆栈划分为堆栈帧。我想通过找到保存的 EBP 指针的“链表”来做到这一点。

  1. 我可以假设(标准和常用的)C 编译器(例如 gcc)将始终在函数序言中的函数调用中更新和保存 EBP 吗?

    pushl %ebp
    movl %esp, %ebp

    或者在某些情况下,某些编译器可能会为不获取任何参数且没有局部变量的函数跳过该部分?

    x86 calling conventions和关于 function prologue 的 Wiki 文章对此帮助不大。

  2. 有没有更好的方法,仅通过查看其原始数据将堆栈划分为堆栈帧?

谢谢!

最佳答案

某些版本的 gcc 有一个 -fomit-frame-pointer优化选项。如果内存可用,它甚至可以与参数/局部变量一起使用(它们直接从 ESP 索引而不是使用 EBP)。除非我大错特错,否则 MS VC++ 可以做大致相同的事情。

顺便说一下,我不确定有什么方法可以普遍适用。如果您有带有调试信息的代码,这通常很容易——否则……

关于c - 使用保存的 EBP 值识别堆栈中的堆栈帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4936421/

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