参考:https://bbs.pediy.com/thread-224583.htm

整理成表格方便查询

cdecl(C规范),

stdcall(WinAPI默认),

fastcall,

ATPCS(ARM-Thumb Procedure Call Standard/ARM-Thumb过程调用标准) ,

thiscall(用于C++中类成员函数)

调用约定\架构 X86 X64 ARM AARCH64
cdecl 参数从右往左依次入栈,调用者实现栈平衡,返回值存放在 EAX 中。 X X X
stdcall 参数从右往左依次入栈,被调用者实现栈平衡,返回值存放在 EAX 中。 X X X
fastcall 

参数1~参数2 分别保存在 ECX、EDX ,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 EAX 中。

参数1~参数4 分别保存在 RCX、RDX、R8D、R9D ,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 RAX 中。

X X
thiscall

参数从右往左依次入栈,

this指针存放ECX中,

被调用者实现栈平衡,

返回值存放在 EAX 中。

参数1~参数3 分别保存在RDX、R8D、R9D中,

this指针存放RCX中,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 RAX 中。

(C++)

参数1~参数3 分别保存在R1~R3中,

this指针存放R0中,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 R0 中。

(C++)

参数1~参数7 分别保存到 X1~X7 寄存器中,

this指针存放X0中,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 X0 中。

ATPCS X X

(C语言)

参数1~参数4 分别保存到 R0~R3 寄存器中 ,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 R0 中。

(C语言)

参数1~参数8 分别保存到 X0~X7 寄存器中 ,

剩下的参数从右往左依次入栈,

被调用者实现栈平衡,

返回值存放在 X0 中。

ARM相关的杂项记录:

ARM 32 64位 指令 B BL BX BR BLX BLR 的区别

  立即数跳(标记地址) 寄存器跳(寄存器地址)
位宽 32或64 32 64
保存LR(返回地址) BL BLR BLX
不保存LR(返回地址) B BR BX

带X 的:BX  BLX 会根据给出的地址的最后一位[0]判断  =0切换为ARM指令模式,=1切换为Thumb指令模式

64位的 RET指令 = mov pc,x30.    x30=LR, 一般配合带L的跳转,如BL,BLX,BLR

C C++ ARM X86 函数 方法 的调用约定的更多相关文章

  1. cocos2d JS-(JavaScript) 基础语法间的函数方法相互调用

    1.函数嵌套函数 function calcuate(opr, a, b) { // 定义函数,opr - -> 符号,a,b - -> 数值 //定义 + 函数 function add ...

  2. Mysql获取字符串中的数字函数方法和调用

    )) ) BEGIN ; ) default ''; set v_length=CHAR_LENGTH(Varstring); DO )) )) ) THEN )); END IF; ; END WH ...

  3. C/C++:函数的调用约定(Calling Convention)和名称修饰(Decorated Name)以及两者不匹配引起的问题

    转自:http://blog.csdn.net/zskof/article/details/3475182 注:C++有着与C不同的名称修饰,主要是为了解决重载(overload):调用约定则影响函数 ...

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

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

  5. java本地方法如何调用其他程序函数,方法详解

    JNI是Java Native Interface的缩写,中文为JAVA本地调用.从Java 1.1 开始,Java Native Interface (JNI)标准成为java平台的一部分,它允许J ...

  6. thinkphp模版调用函数方法

    原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...

  7. <?php function say() { echo 'hello world'; } //在这里调用函数 say(); php 调用方法say()

    <?php function say() {     echo 'hello world'; } //在这里调用函数 say(); php 调用方法say()

  8. python—day9 函数的定义、操作使用方法、函数的分类、函数的嵌套调用

    一.函数的定义 函数的四个组成部分: 函数名. 函数体. 函数返回值. 函数参数 1.概念:重复利用的工具,可以完成特定功能的代码块,函数是存放代码块的容器 2.定义: def:声明函数的关键词 函数 ...

  9. Go - 反射中 函数 和 方法 的调用 - v.Call()

    上一篇文章 说到了 Golang 中的反射的一些基本规则,重点就是文章中最后的三点,但是这篇文章并没有说如何在反射中调用函数和方法,这就是接下来要说的. 反射中调用 函数 众所周知,Golang 中的 ...

随机推荐

  1. [20191112]oracle共享连接模式端口.txt

    [20191112]oracle共享连接模式端口.txt --//如果使用共享服务模式,你可以发现每次重启数据库对应的端口号会发生变化.# netstat -tunlp | egrep "A ...

  2. Python安装常见问题(1):zipimport.ZipImportError: can't decompress data(此问题不解决pip安装不成功)

    在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...

  3. 图解JVM垃圾内存回收算法

    图解JVM垃圾内存回收算法 这篇文章主要介绍了图解JVM垃圾内存回收算法,由于年轻代堆空间的垃圾回收会很频繁,因此其垃圾回收算法会更加重视回收效率,下面博主和大家来一起学习一下吧 前言 首先,我们要讲 ...

  4. LG2602/BZOJ1833 「ZJOI2010」数字计数 数位DP

    问题描述 LG2602 BZOJ1833 题解 数位\(\mathrm{DP}\)板子题. 注意限制位数.前导零. \([a,b]=[1,b]-[1,a-1]\) \(\mathrm{Code}\) ...

  5. 配置SQL Server维护计划-定时备份

    目录 创建维护计划 创建任务 配置维护计划的依赖环境 还原数据库 创建维护计划 打开SQL Server 2014 Management Studio,用SQL Server管理员账户登录. 展开Ma ...

  6. Luogu P3600 随机数生成器

    Luogu P3600 随机数生成器 题目描述 sol研发了一个神奇的随机数系统,可以自动按照环境噪音生成真·随机数. 现在sol打算生成\(n\)个\([1,x]\)的整数\(a_1...a_n\) ...

  7. 持续集成(CI):WEB自动化+Allure+Jenkins定时构建

    一.allure插件安装 pytest可以通过allure集成展示优美的测试报告,同样allure也可以与Jenkins集成,并且Jenkins有构建记录,所以可以看到历史构建曲线图,通过曲线图可以清 ...

  8. PHP】获取客户端(浏览器)信息、获取客户端系统信息、获取服务器信息

    * 获取客户端浏览器信息 * @param null * @author https://blog.jjonline.cn/phptech/168.html * @return string */ f ...

  9. Java读写分离实现

    1.查看源码 AbstractRoutingDataSource类中有个determineTargetDataSource方法 protected DataSource determineTarget ...

  10. 用Scriban进行模版解析

    前言 有些时候,我们需要根据模版去展示一些内容,通常会借助模版引擎来处理. 举个简单的例子,发短信. 短信肯定是有模版的,不同的场景对应不同的模版. 注册的, [xxx]恭喜您成功注册yyy平台,您的 ...