函数调用堆栈
来源:互联网 发布:找工作软件软件排行榜 编辑:程序博客网 时间:2024/06/01 13:09
1.函数调用堆栈
1.压入形参变量的地址和值
2.压入函数调用返回后要执行的指令的地址
被调用函数:
1.压入调用函数的栈底指针,把栈底指针寄存器指向被调用函数的栈底
1.清理被调用函数开辟的栈帧大小
2.回退栈底指针到调用函数的栈底
3.把回退到调用函数要执行的指令地址给pc寄存器
调用函数:
1. <=4 eax 值
2. <4<=8 eax edx
3. >8 开辟一个临时量(函数调用之前就产生,被调用函数return处通过ebp-8访问)
eax 带出临时量的地址
_cdecl c的调用约定
_stdcall Windows下的标准调用约定
_fastcall 快速调用约定
_thiscall C++的成员函数调用约定
1.符号的生成方式不同
ld 合并符号表
main: 符号表 _cdecl ?sum@@YAHHH@Z *UND* global
符号解析
test: _stdcall ?sum@@YGHHH@Z .text global
_fastcall ?sum@@YIHHH@Z
2.参数的压栈方式不同(参数入栈顺序不同)
3.函数的形参内存清理
_cdecl 调用方开辟 调用方清理
_stdcall 调用方开辟 被调用方清理
_fastcall
<= 8
寄存器带值 不需要形参变量的清理
> 8
前2个形参寄存器带值 不需要形参变量的清理
后面的和stdcall调用方式一样
压栈
调用函数:1.压入形参变量的地址和值
2.压入函数调用返回后要执行的指令的地址
被调用函数:
1.压入调用函数的栈底指针,把栈底指针寄存器指向被调用函数的栈底
2.开辟被调用函数的栈帧大小,并初始化为CC
清栈
被调用函数1.清理被调用函数开辟的栈帧大小
2.回退栈底指针到调用函数的栈底
3.把回退到调用函数要执行的指令地址给pc寄存器
调用函数:
1.清理形参变量的内存
1. <=4 eax 值
2. <4<=8 eax edx
3. >8 开辟一个临时量(函数调用之前就产生,被调用函数return处通过ebp-8访问)
eax 带出临时量的地址
循环拷贝到接收返回值的变量的地址空间
_cdecl c的调用约定
_stdcall Windows下的标准调用约定
_fastcall 快速调用约定
_thiscall C++的成员函数调用约定
1.符号的生成方式不同
ld 合并符号表
main: 符号表 _cdecl ?sum@@YAHHH@Z *UND* global
符号解析
test: _stdcall ?sum@@YGHHH@Z .text global
_fastcall ?sum@@YIHHH@Z
2.参数的压栈方式不同(参数入栈顺序不同)
3.函数的形参内存清理
_cdecl 调用方开辟 调用方清理
_stdcall 调用方开辟 被调用方清理
_fastcall
<= 8
寄存器带值 不需要形参变量的清理
> 8
前2个形参寄存器带值 不需要形参变量的清理
后面的和stdcall调用方式一样
阅读全文
0 0
- 函数调用堆栈分析
- 函数调用堆栈分析
- 堆栈与函数调用
- 函数调用 堆栈
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 函数调用 堆栈
- 函数调用堆栈分析
- 函数调用 堆栈
- 函数调用堆栈分析
- 堆栈与函数调用
- 函数调用 堆栈
- 函数调用堆栈
- 函数调用 堆栈 转载
- 打印函数调用堆栈
- 堆栈与函数调用
- 2017-10-29
- 动态获取滚动条位置,距离页面顶部距离scrollTop,两种方法任你选,封装完毕,拿去不谢!!!
- 小谈H5 web本地数据存储
- centos svn 迁移
- Collection 集合
- 函数调用堆栈
- C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
- 【安全牛学习笔记】主动探测
- leetcode007-3Sum Closest
- STL_map用法
- 设计模式之单例模式(线程安全)
- 发明专利申请过程及案例下载
- JavaSwing_5.1: 组件的位置和尺寸
- Hibernate 缓存机制