_thiscall与_cdecl调用方式
来源:互联网 发布:中巴关系 知乎 编辑:程序博客网 时间:2024/06/16 10:33
首先,__thiscall是关于类的一种调用方式,它与其他调用方式的最大区别是:
__thiscall对每个函数都增加了一个类指针参数
{
void bb(int cc);
};
这就是__thiscall的调用方式
__cdecl :C和C++缺省调用方式
例子:
void Input( int &m,int &n); /*相当于void __cdecl Input(int &m,int &n);*/
以下是相应的汇编代码:
00401068 lea eax,[ebp-8] ;取[ebp-8]地址(ebp-8),存到eax
0040106B push eax ;然后压栈
0040106C lea ecx,[ebp-4] ;取[ebp-4]地址(ebp-4),存到ecx
0040106F push ecx ;然后压栈
00401070 call @ILT+5(Input) (0040100a);然后调用Input函数
00401075 add esp,8 ;恢复栈
从以上调用Input函数的过程可以看出:在调用此函数之前,首先压栈ebp-8,然后压栈ebp-4,然后调用函数Input,最后Input函数调用结束后,利用esp+8恢复栈。由此可见,在C语言调用中默认的函数修饰_cdecl,由主调用函数进行参数压栈并且恢复堆栈。
转自:http://blog.csdn.net/yc_8301/article/details/1814744
- _thiscall与_cdecl调用方式
- _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
- __cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
- 函数调用方法: _cdecl _stdcall PASCAL _fastcall _thiscall
- 调用方式 __cdecl _stdcall _fastcall _thiscall
- _cdecl _stdcall _fastcall _thiscall 简介
- _stdcall与_cdecl的区别(函数调用方式)
- _stdcall与_cdecl的区别(函数调用方式)
- _stdcall与_cdecl的区别(函数调用方式)
- _stdcall与_cdecl的区别(函数调用方式)
- C++中_cdecl _stdcall _fastcall _thiscall函数调用总结(对照汇编代码)
- 函数调用方式——_stdcall与_cdecl的区别(函数调用方式)
- _cdecl与_stdcall调用约定
- _cdecl _stdcall _fastcall _thiscall 待整理
- [转]_cdecl、_stdcall、_fastcall和_thiscall整理
- _cdecl、_stdcall、_fastcall和_thiscall整理
- _cdecl、_stdcall、_fastcall和_thiscall整理
- 函数调用方式(__cdecl, _stdcall, _fastcall, _thiscall, etc)
- Java基数排序
- Android线程,你需要因地制宜
- JAVA反射机制深入学习(一)Java反射概念解析
- 算法分析(2)Insertion Sort
- iOS多线程的初步研究(六)-- NSOperation
- _thiscall与_cdecl调用方式
- 浅谈 UITableView
- jmeter3.0 源码分析之:对HTTPS协议的支持
- Configuring Fair Scheduler in Hadoop Cluster
- bzoj4260 Codechef REBXOR
- 实现自己的printf函数(2)
- Java 加密解密基础
- leetcode_137 Single Number II
- 几编有关证书、数据加密解密和签名的好文章