调用call时 会让栈push 返回地址 相对就的 esp +4
进入call 后 先保存 ebp
然后 把esp 给了ebp 当前函数堆栈从此开始
接下来 就是esp 减多少了. esp减多少就是这个函数的栈多大 从epb 开始加上这个值就是这个函数所用栈的范围.如果没变量 esp 不减, 如果有1个int esp-8 , 有2个int esp -c.
再下来就是保存环境了.
push ...
相对应函数结尾
pop ...
函数结尾时的ret 这个指令会让 esp +4. 如果有这样的表达式 ret 4 执行这个指令会让esp+4+后面的这个数.
断在函数入口时看栈:
1 返回地址
2 第一个参数
3 第二个参数
4 .....
ebp 记录了函数进来时 esp 的值
ebp+4 记录了栈返回的地址.
epb+8 第一个参数
epb+12 第一个参数
epb+C 第三个参数
epb-8 epb-C epb-14 //这类的东西就是它的局部变量
esp 上面的上变量, 下面的是参数