函数调用堆栈过程
一段代码
1 | int sum(int a, int b) |
问题1:main函数调用sum,sum执行完后,怎么知道回到哪个函数中?
问题2:sum函数执行完后,回到main后,怎么知道下一条指令在哪?
栈帧
有两个与栈底、栈顶地址有关的寄存器。
ebp
全称Extended Base Pointer
,扩展基址指针寄存器,用于存放函数栈底指针。
esp
全称Extended Stack Pointer
,扩展栈指针寄存器,用于存放函数栈顶指针,指向栈的栈顶(下一个压入栈的活动记录的顶部)。
先分析main函数的栈帧。
1 | mov dword ptr[ebp-4], 0Ah # int a = 10; |