2

我很难找到答案。从我读到的 %ebp 有 32 位,将 %esp 移动到 %ebp 你仍然有 32 位,然后减去 70 到 32,其余的我不明白。我是新手,所以我不是很熟练。请给出详细的解释。谢谢!

以下是我遇到的问题。

在这一系列指令的末尾,有多少字节将 esp 和存储在程序堆栈上的返回地址分开?假设我们使用标准的 32 位 x86 调用约定调用此函数。

804847c functioname:
804847c: push %ebp
804847d: mov %esp,%ebp
804847f: sub $0x70,%esp
8048482: movl $0x0,0x4(%esp)
804848a: movl $0x8048580,(%esp)
4

1 回答 1

1

sub $0x70,%esp:在堆栈上保留 0x70 个字节。

movl $0x0,0x4(%esp): 放置一个零 32 位值作为参数。

movl $0x8048580,(%esp): 放一个地址。下一个 ret 将跳转到它。

按照标准调用约定,named cdecl,参数被放置在堆栈上,后跟被调用者应该返回的地址。

于 2017-08-15T01:18:07.897 回答