在这里出现的一个问题-C语言中的函数调用是如何进行的?
在这里需要对函数调用时栈的变化进行解释
ebp指向关键位置上半部分-高地址位置,包含了函数调用之前的信息,下部分低地址处函数调用后所使用的信息。
汇编语言栈的变化-执行入栈出栈的操作
C语言函数调用(如上图所示)-ebp指向当前栈顶,esp指向的也是栈顶,当函数返回时,将函数所使用堆空间释放,将栈顶指针寄存器位置改变,做法是将esp移动到基准位置ebp位置,之后ebp恢复之前的值(将其弹出),此时esp指向的是返回地址,结束之后esp指向参数的位置,在这里需要介绍调用约定的概念
1.参数从右到左入栈
2.函数调用者负责参数的入栈出栈
3.函数本身根据约定使用栈中参数
GCC编译器使用的栈帧布局
ebp是函数调用以及函数返回的核心寄存器
1.ebp寄存器位当前栈帧的基准
2.通过ebp能够获取返回值地址、参数、局部变量等
在接下来的会用实验来进行验证
原文:https://blog.51cto.com/13475106/2538143