【发布时间】:2016-09-28 18:17:51
【问题描述】:
我正在尝试了解函数 prolog 在汇编中的工作方式。我的书显示以下代码:
push %ebp
movl %ebp, %esp
在 push 的定义中,它说它将 ESP 的值递减 4(字节?),然后将操作数放入 ESP 指定的内存中。但是,这不会覆盖图中所示的一些数据吗?
另外我在这里假设每个段是 4 个(字节?)但是我很确定函数可以有超过 4 个字节的分配堆栈空间?
接下来,第二条指令将 ESP 的内容移动到 EBP 中,但是有什么需要呢?那已经存在了?当pop 被调用时,它如何知道从堆栈中取出多少? (我解释的所有内容都假设指令mov 和push 从它们指向的位置开始,并在执行任何操作时上内存)
【问题讨论】:
-
在 AT&T 汇编中,您的 prolog 代码应该看起来像:
pushl %ebpmovl %esp, %ebp。如果是错别字,请更正。