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