我很难找到答案。根据我所读的,%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)
答案 0 :(得分:1)
sub $0x70,%esp
:在堆栈上保留0x70字节。
movl $0x0,0x4(%esp)
:将零32位值作为参数。
movl $0x8048580,(%esp)
:放置一个地址。下一个ret将跳转到它。
通过名为cdecl
的标准调用约定,参数放在堆栈上,后跟被调用者应该返回的地址。