__cdecl __fastcall与 __stdcall

调用约定:
__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。

1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,

2、_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的压栈方式。注意:对于可变参数的成员函数,始终使用__cdecl的转换方式。

3、__fastcall调用约定:它是通过寄存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈)。

4、thiscall仅仅应用于"C++"成员函数。this指针存放于CX寄存器,参数从右到左压。thiscall不是关键词,因此不能被程序员指定。

5、naked call采用1-4的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出……

转载于:https://www.cnblogs.com/sea918/archive/2007/05/11/1653303.html

__cdecl __fastcall与 __stdcall 调用约定相关推荐

  1. __cdecl __fastcall与__stdcall

    __cdecl __fastcall与__stdcall __cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参 ...

  2. 【转】调用约定__cdecl、__stdcall和__fastcall的区别

    什么是调用约定 函数的调用约定,顾名思义就是对函数调用的一个约束和规定(规范),描述了函数参数是怎么传递和由谁清除堆栈的.它决定以下内容:(1)函数参数的压栈顺序,(2)由调用者还是被调用者把参数弹出 ...

  3. C/C++/动态链接库DLL中函数的调用约定与名称修饰

    参见:http://blog.twofei.com/cc/impl/calling-convension.html 调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用 ...

  4. (转)__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定

    DLL可以使用两种方法将公共符号导入到应用程序中或从 DLL 导出函数: 生成 DLL 时使用模块定义 (.DEF) 文件.  在主应用程序的函数定义中使用 __declspec(dllimport) ...

  5. dll动态库调用约定

    1.动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不 ...

  6. 动态链接库、名字修饰约定、调用约定

    调用约定(Calling Convention)是指在程序设计语言中为了实现函数调用而建立的一种协议.这种协议规定了该语言的函数中的参数传送方式.参数是否可变和由谁来处理堆栈等问题.不同的语言定义了不 ...

  7. C/C++函数调用时参数传递过程、调用约定与可变参函数的实现

    目录 1.参数传递过程 2.参数压栈顺序从右至左的影响 3.调用约定 3.1.__cdecl C/C++ 缺省调用约定 3.2. __stdcall调用约定 3.3. __fastcall (快速调用 ...

  8. 4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)

    1.跳转到地址 使用Jump▶Jump to Address命令或在处于活动状态的反汇编窗口中按下热键G,均可以打开Jump to Address对话框,如果把这个对话框看成Go对话框,可能有助于你记 ...

  9. 论调用约定__stdcall,__cdecl,__fastcall,thiscall,naked call

    From: http://blog.vckbase.com/arong/archive/2004/06/09/409.aspx 在C语言中,假设我们有这样的一个函数: int function(int ...

最新文章

  1. match_parent和fill_parent的区别
  2. 4.5.1 RIP协议与距离向量算法
  3. js中在表格中增加一列的方法_Excel表格中需要提取一列内容末尾的数字,同事分分钟完成...
  4. python爬虫常见反爬措施_爬虫常见的反爬措施有哪些
  5. 服务器上次文件命令,服务器上次文件命令
  6. 又学到了一个拒绝加班的技巧
  7. c语言 指正判断字符串大小
  8. Https iOS需要做的事
  9. html轮播图水平传送带,经典的白富美型jQuery图片轮播插件
  10. python bottle部署_如何使用python-Bottle框架创建REST API应用程序,以及如何在apache服务器上部署restapi应用程序?...
  11. 搜索引擎蜘蛛及网站robots.txt文件详解[转载]
  12. html table 表头停留,HTML table固定表头
  13. 超越阿里云,华为云服务器究竟有多厉害!
  14. python爬裁判文书网_记录用web scraper爬取裁判文书网的文书列表信息以及批量下载word文书...
  15. ARM7、ARM9、ARM11、ARM-Cortex的关系
  16. 学习游戏原画需要什么条件或者基础吗?
  17. 【C语言】斐波那契数列,依次输出1 1 2 3 5 13等前10个数
  18. 马斯克坚信的“矩阵模拟”,是一种怎样“烧脑”的存在?
  19. 正则表达式的介绍及应用
  20. angularjs2使用magnifier图片展示插件

热门文章

  1. SH760二自由度系统非周期激励解析法求解
  2. 转:Python: 什么是*args和**kwargs
  3. TLD Tracker
  4. 图片查看器 bmp jpg png 动态gif office 2007风格
  5. CentOs基础操作指令(用户管理、组管理)
  6. Goalng小demo二:客户信息关系系统
  7. I—爆炸的符卡洋洋洒洒(不模不行的DP)
  8. ADB PC端和目标板的基本连接建立步骤和文件交换:
  9. legend函数_ggplot的图例(legend)管理
  10. mysql完成未完成_MYSQL SQL模式 (未完成)