找出在程序堆栈上分隔esp和存储的返回地址的字节数

时间:2017-08-15 00:30:10

标签: assembly x86 att cdecl

我很难找到答案。根据我所读的,%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)

1 个答案:

答案 0 :(得分:1)

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

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

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

通过名为cdecl的标准调用约定,参数放在堆栈上,后跟被调用者应该返回的地址。