[toc]
# 追踪调用栈原理
1 | void main() { |
上述代码从 f()
函数开始可以用如下汇编描述
1 | push n |
在 C/C++ 中参数从右向左压入参数,每一次压栈 sp 就会增加 栈顶指针
一个小 Tip 由于计算机的寄存器数量有限,所以如果寄存器内有值的话,先把值保存下来,下次出栈后再把原来的值放回去 bp 一般用作栈基指针 (存调用函数的开始地址),bp+4 是进入函数时的地址 bp+8 指向 m 参数的地址 所以我们可以通过取到 bp 的地址,根据 bp 的调用顺序就可以追踪到调用栈