汇编 cdecl 函数调用约定,stdcall 函数调用约定
知识点:
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 函数调用约定的更多相关文章
- cdecl和stdcall调用约定-汇编演示
. .model flat, stdcall .stack ExitProcess PROTO, dwExitCode:DWORD .data val2 sdword result dword ? . ...
- 关于函数调用约定-thiscall调用约定
函数调用约定描述了如何以正确的方式调用某些特定类型的函数.包括了函数参数在栈上的分配顺序.有哪些参数将通过寄存器传入,以及在函数返回时函数栈的回收方式等. 函数调用约定的几种类型 stdcall,cd ...
- 64位只有一种调用约定stdcall
procedure TForm2.Button1Click(Sender: TObject); function EnumWindowsProc(Ahwnd: hwnd; AlParam: lPara ...
- x64汇编第三讲,64位调用约定与函数传参.
目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...
- C++调用约定和名字约定
C++调用约定和名字约定 转自http://www.cppblog.com/mzty/archive/2007/04/20/22349.html 调用约定:__cdecl __fastcall与 __ ...
- C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall
https://www.cnblogs.com/xiangtingshen/p/11014514.html C++函数调用约定_cdecl约定:参数:从右向左依次入栈堆栈平衡:调用方平衡 #inclu ...
- 为什么 Windows API 使用 stdcall 调用约定?
作者:知乎用户链接:https://www.zhihu.com/question/31453641/answer/52001143来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- AT&T汇编中系统调用和C函数调用的使用
我的博客:www.while0.com 区别: 系统调用的参数存储在寄存器中,函数调用的则存储在堆栈中. 系统调用使用中断方式,函数调用使用call指令 相同之处: 都有返回值和输入值 返回值都存储在 ...
- stdcall 函数调用过程(以delphi为例),还有负数的补码
以delphi下调用stdcall 函数为例,从右往左压栈:procedure TForm1.Button2Click(Sender: TObject);var i:integer;begin i:= ...
随机推荐
- Android应用程序启动过程(一)总结
一.App启动方式 1,冷启动 冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用. 冷启动的特点:因为系统会重新创建一个新的进程分配给它,所以会创建和初始化App ...
- react native进阶
一.前沿||潜心修心,学无止尽.生活如此,coding亦然.本人鸟窝,一只正在求职的鸟.联系我可以直接微信:jkxx123321 二.项目总结 **||**文章参考资料:1. http://blog ...
- 留言板0.4_model中的数据库(1)
1.先在数据库中加入一天测试数据先 2.在model的"views"中载入数据库和model的类 import pymysql from .models import UserMe ...
- svn目标计算机主动拒绝
这两天上传文件到服务器端,总是提示“ 目标计算机主动拒绝”. 后来排查,是受到360杀毒软件的文件系统实时防护功能影响. 虽然服务器端已经将仓库目录添加进360杀毒的白名单,但随着用户不断更新文件,文 ...
- DataContract和DataMember的作用
数据契约(DataContract)里的DataMember特性 来源于网络,用于个人收集及备忘 数据契约(DataContract) 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端 ...
- zabbix agent 3.4 安装指南
从官方网站www.zabbix.com 下载zabbix agent安装包.目前最新版本是4.0 LTS release. 在需要监控的服务器上安装zabbix agent. 先解压安装包. 配置 c ...
- Sql server 账号被锁住:"the account is currently locked out. The system administrator can unlock it."的解决办法(转载)
今天遇到的问题比较有意思.首先是很久没有打开测试数据库了,今天打开,使用service程序测试的时候出现下面的错误提示:Message: System.Data.SqlClient.SqlExcept ...
- wget 的 使用方法
问题: 最近在使用 wget ,感觉有很多的功能都不会,现在进行写一篇文章,更新一些wget的使用技巧,防止以后忘记的时候,重新回来进行查阅. 正文: 现在经常使用: curl -O url 下载文件 ...
- 开源作业调度框架 - Quartz.NET - 实战使用2
纠正第一篇文章的一个错误代码. 下面是错误代码,这样并不能得知系统中是否已经存在该JobId //实例化一个作业Key对象,用于获取作业对象或判断是否存在作业时使用. JobKey jobKey = ...
- November 08th, 2017 Week 45th Wednesday
Keep your face to the sunshine and you cannot see the shadow. 始终面朝阳光,我们就不会看到黑暗. I love sunshine, but ...