【发布时间】:2012-11-08 01:44:50
【问题描述】:
所以,假设我可以访问程序的寄存器。我可以访问 esp、ebp 和 eip。 eip 指向下一条需要执行的指令, ebp 指向另一个帧指针, esp 指向栈顶。我理解这一点,但是我不理解堆栈的其余部分或如何解析它。
例如,如果我想获取框架的局部变量,我是否应该只减去ebp - esp(知道ebp 是比esp 更大的地址)然后遍历这些地址并取消引用它们?这是从该特定框架获取局部变量的正确方法吗?
另一个问题,找出与每一帧相关的函数的最佳方法是什么?如果我将 ebp 地址减去 1,然后取消引用该值,我应该得到返回地址“0x804 ...”吗?这个地址和函数有什么关系?例如,如果 Foo() 的高地址为 0x8045555,低地址为 0x8045550,那么返回地址是否会在这两个地址之间?
非常感谢,如果我不够清楚,请告诉我..
注意:如果有人有更好的标题建议,我没有找到更好的。
【问题讨论】:
标签: c pointers assembly stack cpu-registers