push %ebp
movl %esp, %ebp
是什么意思?有什么作用?为什么要这样做???
push %ebp
movl %esp, %ebp
是什么意思?有什么作用?为什么要这样做???
创建stack frame,可以优化掉。保留这个主要方便调试,可以追溯函数调用链。
unsigned long *p=ebp;
*(p+1)就是调用函数的返回地址。
p=*p,就是上一级函数的帧
*(p+1)就是上一级函数的调用函数的返回地址
可以一直通过这个追溯到最上面的那个函数。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
ebp是帧指针,esp是栈指针。这两行代码是保存旧的帧,创建新的栈帧。汇编里的过程调用需要这个动作