【发布时间】:2011-06-23 14:42:35
【问题描述】:
我想通过查看堆栈上的原始数据将堆栈划分为堆栈帧。我想通过找到保存的 EBP 指针的“链接列表”来做到这一点。
-
我是否可以假设(标准和常用的)C 编译器(例如 gcc)将始终在函数序言中的函数调用上更新和保存 EBP?
推送 %ebp
movl %esp, %ebp或者在某些情况下,某些编译器可能会为没有获取任何参数且没有局部变量的函数跳过该部分?
x86 calling conventions 和 function prologue 上的 Wiki 文章对此没有多大帮助。
有没有更好的方法来仅通过查看原始数据来将堆栈划分为堆栈帧?
谢谢!
【问题讨论】:
-
gcc 有选项
-fomit-frame-pointer;此外,懒惰的人使用调试器而不是沉思原始数据...... -
我想以编程方式这样做,所以使用调试器不是我的意思。
标签: c compiler-construction assembly stack function-call