一个函数的调用过程

1、参数拷贝(参数实例化)。
2、保存当前指令的下一条指令,并跳转到被调函数。
这些操作均在main函数中进行。

1、移动ebp、esp形成新的栈帧结构。
2、压栈(push)形成临时变量并执行相关操作。
3、return一个值。
这些操作在函数中进行。

被调函数完成相关操作后需返回到原函数中执行下一条指令,
1、出栈(pop)。
2、回复main函数的栈帧结构。(pop )
3、返回main函数
这些操作也在函数中进行。

整个过程就三步:
1、根据调用的函数名找到函数入口;
2、在栈中申请调用函数中的参数函数体内定义的变量的内存空间
3、函数执行完后,释放函数在栈中的申请的参数和变量的空间,最后返回值(如果有的话)
函数调用过程和中断处理过程一模一样

总结:每一个函数调用都会分配函数栈,在栈内进行函数执行过程。调用前,先把返回地址压栈,然后把当前函数的esp指针压栈。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。