函数调用过程实现原理
作者:互联网
函数空间调用分析报告
函数内存实现的原理
1. 调用约定参数
调用方(caller)和被调用方(callee)需要约定以下内容
1. 传参顺序
2. 传递参数的媒介
3. 清理参数的责任归属
4. 返回值的传递媒介
2. 保存返回值地址
3. 保存调用方的栈底
4. 设置当前栈顶为被调用方的栈底(此时被调用方属于空栈)
5. 根据局部变量所需要的总空间,太高栈顶(为局部变量分配空间)
6. 保存处理环境(把调用方的处理器的值赋给栈顶)
7. Debug选项组设置局部变量的初始值为0xcccccccc(方便调试错误)
8. 执行函数体
9. 恢复处理器环境(把栈顶的值复制到处理器中)
10. 释放局部变量空间
11. 从栈顶取值恢复到调用方的栈底
12. 从栈顶取值作为返回地址(_stdcall和_fastcall此时释放空间)
13. 流程恢复到调用方的代码(_cdecl此时释放空间)
首先我们写一个函数
初始的内存结构
通过调试会在空间申请main函数的栈空间
通过找参数一的值 01 00 00 00找到main函数入口
我们先传一个简单的参数进去 说错了,不是环境变量是处理器环境。
局部变量的初始值为0xcccccccc 方便调试
下面我们开始return这个函数
将流程恢复到调用方代码
标签:调用,函数,实现,局部变量,函数调用,栈底,处理器,空间,原理 来源: https://www.cnblogs.com/Mj-NaijAm/p/13600043.html