当前位置:网站首页>函数调用方式_stdcall 、 _cdecl 、_thiscall
函数调用方式_stdcall 、 _cdecl 、_thiscall
2022-07-30 15:38:00 【陈子青 - See】
目录
前言
了解函数调用约定对逆向反汇编的分析会提供极大帮助。
__stdcall
__stdcall的全称是standard call。是C++的标准调用方式。
函数参数的入栈顺序为从右到左入栈。函数返回时使用retn x指令,其中x为调整堆栈的字节数。这种方式叫做自动清栈。即被调用的函数的参数个数是固定的,调用者必须严格按照定义传递参数,一个不多,一个不少。
堆栈平衡方式: __stdcall自动清栈
返回指令:_stdcall使用retn x
编译后函数的修饰名: 假设有函数int add(int a, int b), __stdcall编译后的函数名为[email protected]
__cdecl
__cdecl的全称是C Declaration,即C语言默认的函数调用方式。
函数参数的入栈顺序为从右到左入栈。函数返回时作用ret指令。由调用者手动清栈。被调用的函数支持可变参数。调用者根据调用时传入参数的个数,手动平衡堆栈。
堆栈平衡方式 __cdecl手动清栈。
返回指令:__cdecl使用ret
编译后函数的修饰名: 假设有函数int add(int a, int b), __cdecl编译后的函数名为_foo。
__thiscall
thiscall是调用类内部成员函数时传递的参数 . 其本质是类对象的第一个成员变量的地址.
this指针一般使用寄存器ECX传递
参数的传递方式:函数参数的入栈顺序为从右到左入栈
堆栈平衡:调用者平衡堆栈(外平栈)
【__thiscall只能够用在类的成员函数上,如果参数个数确定,this指针通过ecx传递给被调用者;如果参数不确定,this指针在所有参数被压栈后压入栈堆】
对参数个数不确定的,调用者清理堆栈,否则函数自己清理堆栈。
__fastcall
通过的ECX和EDX寄存器传参,其余参数从右向左入栈,由调用者清理堆栈。(很少见)
边栏推荐
- [AGC] Quality Service 1 - Example of Crash Service
- C# List<T> 模板的案例
- Golang分布式应用定时任务如何实现
- Flask之路由(app.route)详解
- 新技术要去做新价值
- tiup help
- 【C语言】指针和数组的深入理解(第二期)
- 数据库-SQL
- [HMS core] [FAQ] A collection of typical questions about push kit, analysis services, and video editing services 3
- Sleuth+Zipkin (visualization) service link tracking
猜你喜欢
hcip--ospf综合实验
Flask introductory learning tutorial
Mysql database query is very slow. Besides the index, what else can be caused?
rhce笔记3
动态规划 --- 状态压缩DP 详细解释
经典实例分割模型Mask RCNN原理与测试
【HMS core】【FAQ】push kit, WisePlay DRM, Location Kit, Health Kit, 3D Modeling Kit, SignPal Kit Typical Questions Collection 4
SMI 与 Gateway API 的 GAMMA 倡议意味着什么?
481-82 (105, 24, 82, 34, 153),
Golang分布式应用定时任务如何实现
随机推荐
解析字符串拼接的两种情况
Image information extraction DEM
tiup install
481-82 (105, 24, 82, 34, 153),
tiup completion
tiup list
【AGC】质量服务1-崩溃服务示例
TensorFlow custom training function
AI遮天传 DL-CNN
TiDB 工具功能概览
L2-007 家庭房产(vector、set、map的使用)
深度学习遇到报错Bug解决方法(不定时更新)
在 Chrome 浏览器中安装 JSON 显示插件
华为「天才少年」计划招募的博士们,迎来首秀!
科研中一些常用软件清单
How to implement timing tasks for distributed applications in Golang
Flask入门学习教程
二、判断 & 循环
L2-007 Family property (use of vector, set, map)
FME realizes the method of converting CAD with attribute to SHP data