返回信息流对函数调用的压栈的顺序有点迷惑,是先压下一条指令的地址再压函数参数 还是先压函数参数再压下一条指令的地址呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #38278同步于 2010/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于压栈的顺序问题??
tomharold
2010/4/20镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
举个例子说吧
void abc(int a,int b)
abc:
push ebp
mov ebp,esp
ebp+8为int a
ebp+12为int b
。。。。
ret
调用abc时,先压入b,再压入a,再压入返回地址。。。由于堆栈是从高向低生长,所以ebp+8为后压入的参数a
ret指令之后,返回到返回地址执行,此时紧接着的就是
返回地址:
add esp,8
返回之后,由调用者清理堆栈中的参数a和b,即为上句汇编语句。
整个过程就是这样,恩
【 在 tomharold 的大作中提到: 】
: 对函数调用的压栈的顺序有点迷惑,是先压下一条指令的地址再压函数参数 还是先压函数参数再压下一条指令的地址呢?