当前位置:网站首页>函数调用方式_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寄存器传参,其余参数从右向左入栈,由调用者清理堆栈。(很少见)

边栏推荐
- 华为ADS获取转化跟踪参数报错:getInstallReferrer IOException: getInstallReferrer not found installreferrer
- Manage components using TiUP commands
- 【开发者必看】【push kit】推送服务典型问题合集2
- 481-82(105、24、82、34、153)
- tiup help
- 围绕用户思维,木鸟与途家如何实现乡村民宿下的用户运营
- 【AGC】Open Test Example
- FME realizes the method of converting CAD with attribute to SHP data
- flask获取post请求参数
- Huawei ADS reports an error when obtaining conversion tracking parameters: getInstallReferrer IOException: getInstallReferrer not found installreferrer
猜你喜欢

一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?

应用OPC解决方案实现控制系统数据的安全交换

【HMS core】【FAQ】push kit、AR Engine、广告服务、扫描服务典型问题合集2

flask获取post请求参数

【HMS core】【Media】【视频编辑服务】 在线素材无法展示,一直Loading状态或是网络异常

rscsa笔记八

AI遮天传 DL-CNN

Back waves are coming!Ali produced the "second generation" container technical manual and brain map, which is too fragrant

How to intercept the first few digits of a string in php

Classes and Objects (Part 2)
随机推荐
动态规划 --- 状态压缩DP 详细解释
Why is there no data reported when the application is connected to Huawei Analytics in the application debugging mode?
LeetCode-283-移动零
[AGC] Quality Service 1 - Example of Crash Service
Array element inverse
【开发者必看】【push kit】推送服务典型问题合集2
RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
STM32F407定时器输入捕获
AL遮天传 DL-深度学习模型的训练技巧
【AGC】开放式测试示例
应用接入华为分析在应用调试模式下为何没有数据上报?
Database - SQL
tiup clean
TiDB 工具适用场景
70行代码撸一个桌面自动翻译神器
Redis 复习计划 - Redis 数据结构和持久化机制
[AGC] Quality Service 2 - Performance Management Example
tiup list
一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?
arcpy使用教程