汇编  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:= ...
 
随机推荐
- go语言浮点数
			
package main import "fmt" func main() { var num,num1 float32 num = 10 num1 = 100 fmt.Print ...
 - EJB2.0 ejb-jar.xml配置文件详解
			
<ejb-jar><!--EJB发布描述器的根元素,它包含一个可选的EJB-JAR文件的描述,可选显示的名称,可选小图标的文件名,可选的大图标的文件名,必须的所有被包含的enterp ...
 - MySQL5.7多实例自动化部署脚本
			
一.安装说明 ------------------------------------------------------ mysql5.7.10_onekey_install.sh自动化部署脚本支持 ...
 - MD5密码加密
			
using System; using System.Security.Cryptography; using System.Text; namespace DimoNetwork.Common.DE ...
 - ODS设计
			
1.数据调研 2.确定数据范围 需要把上端应用需求与ODS数据范围进行验证,以确保应用所需的数据都已经从业务系统中抽取出来,并且得到了很好的组织,以ER模型表示数据主题关系 3.根据数据范围进行进一步 ...
 - 【转】Java学习---JDK、JRE和JVM的关系
			
[原文]https://www.toutiao.com/i6591348937267872269/ 首先是JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包 ...
 - 恶意代码分析_01_YARA规则_CLAMAV病毒库
			
写在前面的话: 上一篇文章里,我们已经初步了解了Malware的一些知识,并且利用Clamscan创建了自己的md5类型的病毒库, 那在这篇文章中,我将带领大家一起,来进一步了解病毒库的相关知识,以及 ...
 - Eclipse中Tomcat的配置
			
1.Window-Preferences-Server-Runtime Environments 2.点击Add,选择相应的Tomcat版本,我的是7.0的所以我选择这个.并勾选Create a ne ...
 - python使用mechanize模拟登陆新浪邮箱
			
mechanize相关知识准备: mechanize.Browser()<br># 设置是否处理HTML http-equiv标头 set_handle_equiv(True)<br ...
 - 【8】python文件的读写方法
			
(1).读文件的步骤: (1)打开文件 open(path,flag,encoding,[errors]) path:打开路径 flag:打开方式 r(只读) rb(二进制格式) r+(可以读写) w ...