参考: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. 27-限制容器的 Block IO

    Block IO 是另一种可以限制容器使用的资源.Block IO 指的是磁盘的读写,docker 可通过设置权重.限制 bps 和 iops 的方式控制容器读写磁盘的带宽,下面分别讨论. 注:目前 ...

  2. 转载:wepy框架入门

    转载:https://www.jianshu.com/p/93d5a4b99777 安装 wepy 命令行工具. npm install wepy-cli -g 在开发目录生成开发DEMO. wepy ...

  3. 学习笔记:Django开发网上教育平台(参考了慕课网的教学视频)

    第一步:进行环境的搭建(用到的IDE:pycharm  ,数据库为mysql.nacicat.编辑语言python3.7.以及自己配置的虚拟环境venvpy37) Django==2.2​ ​ 配置好 ...

  4. bzoj5219 [Lydsy2017省队十连测] 最长路径

    题意: 做法来自 首先竞赛图缩点后是一条链,\(1\)号节点在开头的那个\(SCC\)中,因此从\(1\)号节点出发的最长链即为\(1\)号节点所在的\(SCC\)的大小\(+1\)号节点拓扑序之后的 ...

  5. TensorFlow中实现RNN,彻底弄懂time_step

    这篇博客不是一篇讲解原理的博客,这篇博客主要讲解tnesorlfow的RNN代码结构,通过代码来学习RNN,以及讲解time_steps,如果这篇博客没有让你明白time_steps,欢迎博客下面评论 ...

  6. Ubuntu sudo 免密码

    sudo visudo 这里默认打开的是 nano 编辑器,不习惯可以把默认编辑器换成 vim, 参考 Ubuntu 修改默认编辑器 test ALL=NOPASSWD: ALL

  7. 实时聊天-websocket与ajax的区别于联系

     Ajax是什么? Ajax,即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整 ...

  8. SQL Server设置数据库为状态为只读

    问题描述: 有时候我们为了防止连接数据库再链接插入数据,就可以把库设置为只读模式 灰色后面显示只读说明已经是只读状态了 1.设置为只读状态 USE [master] GO ALTER DATABASE ...

  9. Pycharm新手使用教程(详解)

    Pycharm新手使用教程(详解) [注]: 如果想要下载Pycharm工具,直接去<开发工具>中进行下载. 简介 Jetbrains家族和Pycharm版本划分: pycharm是Jet ...

  10. 如何利用python爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: LSGOGroup PS:如有需要Python学习资料的小伙伴可以 ...