知识点:
 cdecl 函数调用约定
 stdcall 函数调用约定
 CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定
一、cdecl调用约定
VC++默认约定__cdecl
、源代码
int __cdecl add1(int a,int b)
{
return a+b;
}
、生成汇编代码
/$ PUSH EBP
|. 8BEC MOV EBP,ESP
|. 8B45 MOV EAX,DWORD PTR SS:[EBP+]
|. 0C ADD EAX,DWORD PTR SS:[EBP+C]
|. 5D POP EBP
0040100A \. C3 RETN ; POP EIP 、调用代码
push b
push a
call add1
add esp,
|. 6A PUSH ; 0012FF7C
|. 6A PUSH
|. E8 C6FFFFFF CALL stdcall_. ; __cdecl add1
0040103A |. 83C4 ADD ESP, ; RETN 二、stdcall调用约定
API函数约定 __stdcall
、源代码
int __stdcall add2(int a,int b)
{
return a+b;
} 、生成汇编代码
/$ PUSH EBP
|. 8BEC MOV EBP,ESP
|. 8B45 MOV EAX,DWORD PTR SS:[EBP+]
|. 0C ADD EAX,DWORD PTR SS:[EBP+C]
|. 5D POP EBP
0040101A \. C2 RETN ; RETN //ADD ESP,8 、调用代码
push b
push a
call add2
0040103D |. 6A PUSH ; 0012FF7C
0040103F |. 6A PUSH
|. E8 CAFFFFFF CALL stdcall_. ; __stdcall add2 PUSH 下一个EIP
三、fastcall 函数调用约定
直接用寄存器传递参数,由于寄存器相对于栈(存储器)速度要快上许多,所以这类的调用约定叫fastcall
、源代码
int __fastcall add2(int a,int b)
{
return a+b;
}
、汇编代码
/$ PUSH EBP
|. 8BEC MOV EBP,ESP
|. 83EC SUB ESP, ; int a,b;
|. F8 MOV DWORD PTR SS:[EBP-],EDX ; b=edx
|. 894D FC MOV DWORD PTR SS:[EBP-],ECX ; a=ecx
0040102C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-]
0040102F |. F8 ADD EAX,DWORD PTR SS:[EBP-]
|. 8BE5 MOV ESP,EBP ; add esp,
|. 5D POP EBP
\. C3 RETN 、调用代码
|. BA MOV EDX,
0040109B |. B9 MOV ECX,
004010A0 |. E8 7BFFFFFF CALL fastcall. ;

汇编  cdecl 函数调用约定,stdcall 函数调用约定的更多相关文章

  1. cdecl和stdcall调用约定-汇编演示

    . .model flat, stdcall .stack ExitProcess PROTO, dwExitCode:DWORD .data val2 sdword result dword ? . ...

  2. 关于函数调用约定-thiscall调用约定

    函数调用约定描述了如何以正确的方式调用某些特定类型的函数.包括了函数参数在栈上的分配顺序.有哪些参数将通过寄存器传入,以及在函数返回时函数栈的回收方式等. 函数调用约定的几种类型 stdcall,cd ...

  3. 64位只有一种调用约定stdcall

    procedure TForm2.Button1Click(Sender: TObject); function EnumWindowsProc(Ahwnd: hwnd; AlParam: lPara ...

  4. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  5. C++调用约定和名字约定

    C++调用约定和名字约定 转自http://www.cppblog.com/mzty/archive/2007/04/20/22349.html 调用约定:__cdecl __fastcall与 __ ...

  6. C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall

    https://www.cnblogs.com/xiangtingshen/p/11014514.html C++函数调用约定_cdecl约定:参数:从右向左依次入栈堆栈平衡:调用方平衡 #inclu ...

  7. 为什么 Windows API 使用 stdcall 调用约定?

    作者:知乎用户链接:https://www.zhihu.com/question/31453641/answer/52001143来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  8. AT&T汇编中系统调用和C函数调用的使用

    我的博客:www.while0.com 区别: 系统调用的参数存储在寄存器中,函数调用的则存储在堆栈中. 系统调用使用中断方式,函数调用使用call指令 相同之处: 都有返回值和输入值 返回值都存储在 ...

  9. stdcall 函数调用过程(以delphi为例),还有负数的补码

    以delphi下调用stdcall 函数为例,从右往左压栈:procedure TForm1.Button2Click(Sender: TObject);var i:integer;begin i:= ...

随机推荐

  1. ESLint 使用方法

    一.全局安装 npm install -g eslint 二.生成配置文件 在项目根目录执行init,生成.eslintrc文件.在init时,要求根目录存在package.json.当然也可以直接复 ...

  2. Spring Boot (#1 quick start)

    Spring Boot (#1 quick start) 官方文档 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无 ...

  3. 数据结构入门之链表(C语言实现)

    这篇文章主要是根据<数据结构与算法分析--C语言描述>一书的链表章节内容所写,该书作者给出了链表ADT的一些方法,但是并没有给出所有方法的实现.在学习的过程中将练习的代码记录在文章中,并添 ...

  4. Android分区

    1. Android 分区: 2. Android各个分区的作用: 2.1 modem分区 实现手机必需的通信功能,大家通常所的刷RADIO就是刷写modem分区,在所有适配的ROM中这部分是不动,否 ...

  5. NXlog配置

    NXlog文档: http://nxlog.org/docs/nxlog-ce/nxlog-reference-manual.html https://nxlog.org/documentation/ ...

  6. python基础学习17----json&pickle&shelve

    json和pickle的功能是对数据进行序列化 将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML.JSON或特定格式的字节串)的过程称为序列化:反之,则称为反序列化 json模块 ...

  7. November 16th, 2017 Week 46th Thursday

    Don't you wonder sometimes, what might have happened if you tried. 有时候,你会不会想,如果当初试一试会怎么样? If I had t ...

  8. FZU Monthly-201903 获奖名单

    FZU Monthly-201903 获奖名单 冠军: 黄海东 S031702647 一等奖: 林闽沪 S131700309 陈华能 S221701416 二等奖: 鲍子涵 S031702646 吴少 ...

  9. 2.Linux环境下配置Solr4.10.3

    转载请出自出处:http://www.cnblogs.com/hd3013779515/ 1.准备阶段 操作系统:CentOS 6.8 安装包:/home/test solr-4.10.3.tgz.t ...

  10. Codeforces Round #503 Div. 2

    时间相对来说还是比较合适的,正好放假就可以打一打啦. A. New Building for SIS:http://codeforces.com/contest/1020/problem/A 题意概述 ...