_cdecl与_stdcall是最常用的的两种函数调用修饰,区别在于函数返回时,清理栈(恢复栈平衡)是caller做还是被调函数做。

 :    _cdecl int add1(int a, int b)
: {
push ebp
mov ebp,esp
sub esp,40h
push ebx
push esi
push edi
lea edi,[ebp-40h]
0040102C mov ecx,10h
mov eax,0CCCCCCCCh
rep stos dword ptr [edi]
: return a+b;
mov eax,dword ptr [ebp+]
0040103B add eax,dword ptr [ebp+0Ch]
: }
0040103E pop edi
0040103F pop esi
pop ebx
mov esp,ebp
pop      ebp
00401044 ret : _stdcall int add2(int a, int b)
: {
push ebp
mov ebp,esp
sub esp,40h
push ebx
push esi
push edi
lea edi,[ebp-40h]
0040106C mov ecx,10h
mov eax,0CCCCCCCCh
rep stos dword ptr [edi]
: return a+b;
mov eax,dword ptr [ebp+]
0040107B add eax,dword ptr [ebp+0Ch]
: }
0040107E pop edi
0040107F pop esi
pop ebx
mov esp,ebp
pop ebp
45 00401084 ret 8

_cdecl与_stdcall区别的更多相关文章

  1. _cdecl 与 _stdcall 区别

    前段时间编程时遇到过这么一个问题,我写了一个DLL,把里面的一个函数导出来,然后再定义一个签名与其匹配的函数指针,动态地把这个DLL加载起来(LoadLibrary),得到函数指针后,一调用,结果报错 ...

  2. 转:函数调用的区别:_cdecl以及_stdcall

    函数调用的几个概念:_stdcall,_cdecl.... 1._stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将 ...

  3. 函数调用的区别:_cdecl以及_stdcall

    一.概念1)_stdcall调用   _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,由调用者完成压栈操作,被调函数自身在返回前清空堆栈.   WIN32 Api都采用_ ...

  4. C++编译器详解(三)函数调用的区别:_cdecl以及_stdcall

    1._stdcall是Pascal程序的缺省调用方式,通常用于Win32 API中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上&qu ...

  5. C++ 回调函数的定义与用法

    一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...

  6. 配置自己的OpenGL库,glew、freeglut库编译,库冲突解决(附OpenGL Demo程序)

    平台:Windows7,Visual C++ 2010 1. 引言 实验室的一个项目,用到OpenGL进行实时绘制,还用到一些其他的库,一个困扰我很久的问题就是编译时遇到的各种符号未定义,符号重定义之 ...

  7. C++回调函数的应用<转自:http://blog.csdn.net/wubin1124/article/details/4386269>

    一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...

  8. 制作C/C++动态链接库(dll)若干注意事项

    一.C\C++ 运行时库编译选项简单说明 问题:我的dll别人没法用 运行时库是个很复杂的东西,作为开发过程中dll制作需要了解的一部分,这里主要简单介绍一下如何选择编译选项. 在我们的开发过程中时常 ...

  9. VC++制作DLL详解

    1.    DLL的基本概念 应用程序(exe)要引用目标代码(.obj)外部的函数时,有两种实现途径——静态链接和动态链接. 1.    静态链接 链接程序搜索对应的库文件(.lib),然后将这个对 ...

随机推荐

  1. electron实现透明点投的方法

    1. electron createWindow 的时候 设置 transparent: true, clickThrough: 'pointer-events' 2. body 上添加 pointe ...

  2. Neo4j基本使用及导入三元组

    下载和安装Neo4j 安装Java JDK 下载Neo4j安装文件 创建系统环境变量 Neo4j配置 配置文档存储在conf目录下,Neo4j通过配置文件neo4j.conf控制服务器的工作.默认情况 ...

  3. Django rest-framework框架-组件之路由

    路由: a. url(r'^(?P<version>[v1|v2]+)/v1/$',views.ViewView.as_view()) url(r'^(?P<version>[ ...

  4. SIP协议参数详解

    1.1  SIP消息分类 SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切. SIP协议将Server和User Agent之间的通讯的 ...

  5. 创建多线程时,为何创建后需要Sleep?

    后面的线程用到了前面线程初始的结构,sleep一下只是做到了使前一个线程初始化完成后后一个线程才开始运行.但这样不严格,需要同步机制.在么多个线程都要用的数据结构不要放到子线程内部去初始化,程序启动时 ...

  6. TypeScript入门九:TypeScript的模块

    关于TypeScript模块的基本使用方法 Ts的模块化语法与ES6的语法基本是一致(关于一些细节特性没有测试,请各自自行测试),然后再由tsconfig.json的module字段来描述转码类型,具 ...

  7. swoole聊天室

    服务端: <?phpclass Chat{ const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问 const PART = 8080;//端口号 pr ...

  8. CSS 样式表{二}

    1 选择器的优先级 选择器的优先主要考虑选择器的权重 可以将各种选择器的权重以数值来表示,数值越大,优先级越高 选择器 权重值 标签selector 1 类选择器 10 ID选择器 100 行内样式 ...

  9. springboot 部署到tomcat,获取根路径问题。空格变为%20

    String path = ResourceUtils.getURL("classpath:").getPath()+"static/upload"; Syst ...

  10. awk 内置函数的使用

    转自:http://gdcsy.blog.163.com/blog/static/12734360920130241521280/ 一.split 初始化和类型强制        awk的内建函数sp ...