arm 体系架构-过程调用标准AAPCS

news2024/10/28 6:50:00

一、什么是AAPCS?

旧时,ARM 过程调用标准叫做 APCS (ARM Procedure Call Standard),Thumb的过程调用标准为 TPCS。如今这两种叫法已经废弃,统一称作 AAPCS (Procedure Call Standard for the ARM Architecture)。

AAPCS 是 ARM ABI(Application Binary Interface) 接口文档的一份,它定义了:

  1. 对寄存器使用的限制。
  2. 使用栈的惯例。
  3. 在函数调用之间传递/返回参数。
  4. 可以被"回溯"的基于栈的结构的格式,用来提供从失败点到程序入口函数的列表,包括函数参数。

当前 ARM 官方已经通过 github 来维护相关文档,想获取最新的文档可以访问GitHub - ARM-software/abi-aa: Application Binary Interface for the Arm® Architecture

二、寄存器

调用者保存寄存器(caller saved registers)与被调用者保存寄存器(cellee-saved registers)

试想一下,在调用一个函数时,无论是调用者还是被调用者,都可能更新寄存器的值。假设调用者在%edx中存了一个整数值100,而被调用者也使用这个寄存器,并更新成了1000,于是悲剧就发生了。当过程调用完毕返回后,调用者再使用%edx的时候,值已经从100变成了1000,这几乎必将导致程序会错误的执行下去。因此,函数调用的前后系统应该保持不变。

对此,有三种方案 :
  1. 在函数调用前,将所有被调用者所使用的寄存器都保存一遍。(通过栈)
  2. 在函数调用时,将所有用到的寄存器的值都先保留再使用(通过栈保存),并且在结束时恢复。
  3. 约定调用者保存,与被调用者保存,各保存各的。arm采用的这种方案,如下图所示:

https://www.zhihu.com/question/301000788

调用者保存寄存器(caller saved registers):R0~R3、R12、R14链接寄存器、程序状态寄存器PSR;

  • 函数调用后还需使用的寄存器数值,需在调用前将其保存(到内存中 如栈);
  • 函数调用后无需使用的寄存器数值则无需保存;
  • 函数可以任意使用(修改)这些寄存器;

被调用者保存寄存器(cellee-saved registers):R4~R11;

  • 被调用的子程序或函数需确保这些寄存器在函数结束时不会发生变化(与进入函数前相同);
  • 若函数需要使用这些寄存器,则应将其保存(入栈),并在函数结束前将其恢复为初始值;

若处理器具有浮点单元,则其中的寄存器也有类似需求;

S0~S15:调用者保存寄存器;

S16~S31:被调用者保存寄存器;

三、参数传递&返回

参数传递:

  1. 参数不超过4个时使用寄存器R0~R3传递,否则超出部分则使用堆栈传递;
  2. 多字大小的输入参数通过多个连续的寄存器传递(如:R0+R1);
  3. 若系统中不包含浮点运算的硬件部件,浮点参数通过相应的规则转换为整数参数后传递;

参数返回:

  1. 32位以下的基本数据类型,通过寄存器R0返回;
  2. 返回结果为64位时,通过寄存器R0与R1返回;
  3. 返回结果为浮点数时,通过浮点运算不见的寄存器返回;
  4. 对于位数更多的结果,需要通过栈传递

四、使用栈惯例

sp指向最后一个压入的值,数据栈由高地址向低地址生长)类型,即满递减堆栈
在这里插入图片描述

  • 压栈PUSH:先让SP指针自减(空出内存),然后再存入数据
  • 出栈POP:先读出SP指向的数据,然后再自减

ref:

ARM体系结构学习笔记:过程调用标准AAPC、 ARM32调用约定、ARM64调用约定_arm64 传参 结构体-CSDN博客

ARM软件逆向工程入门 01 - ARM调用约定(Calling Convention)_armv7函数调用约定-CSDN博客

ARM学习(17)ARM函数调用规则_arm bl call 调用函数-CSDN博客

ARM 过程调用标准 AAPCS 以及堆栈使用-CSDN博客

应用程序二进制接口(ABI) --- AAPCS(函数调用/中断上下文保护) - 流水灯 - 博客园

arm异常处理分析_arm指令异常-CSDN博客

ARM架构过程调用标准AAPCS-CSDN博客

FreeRTOS-ARM架构与程序的本质_freertos内核-CSDN博客

c语言函数调用规范-基于arm 分析_aapcs-CSDN博客

ARM体系结构学习笔记:过程调用标准AAPC、 ARM32调用约定、ARM64调用约定_arm64 传参 结构体-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5之5.4 第三人称示例代码阅读

第三人称的代码相对第一人称少了很多,只有一个移动跳跃的能力 构造函数,添加角色的移动属性,限制了当controller移动角色不会乱转,然后创建了一个相机杆,创建了一个跟随相机,绑到相机杆上 然后在这个函数设…

用二分法查找有序容器的插入点

例子&#xff1a; int main() {vector<int> vec { 1,2,3,4,5,7,8,9 };auto n alg.find_binary_insert_pos(vec.begin(), vec.end(), 6);vec.insert(vec.begin() n, 6);_pn(vec);list<int> lst { 1,10,11,9,5 };for (auto& v : lst) {//添加不存在的元素au…

241024-Ragflow离线部署Docker-Rootless环境配置修改

A. 最终效果 B. 文件修改 docker-compose.yml include:- path: ./docker-compose-base.ymlenv_file: ./.envservices:ragflow:depends_on:mysql:condition: service_healthyes01:condition: service_healthyimage: ${RAGFLOW_IMAGE}container_name: ragflow-serverports:- ${…

D50【python 接口自动化学习】- python基础之类

day50 init方法 学习日期&#xff1a;20241027 学习目标&#xff1a;类 -- 64 init方法&#xff1a;如何为对象传递参数&#xff1f; 学习笔记&#xff1a; 魔术方法 init方法 class Klass(object):# 定义初始化方法&#xff0c;类实例化时自动进行初始化def __init__(self…

autMan框架的指令转换功能学习

以正则表达式为基础 一、基本用法【简单替换】 示例1&#xff1a; 匹配表达式&#xff1a;激活 结果表达式&#xff1a;咖啡码 效果&#xff1a;只要命令中包含“激活”这两个字&#xff0c;就会将命令中所有的“激活”替换为“咖啡码”&#xff0c;即你从后台看到收到的命令是…

leetcode-64-最小路径和

题解&#xff1a; 以题中矩阵为例&#xff1a; &#xff08;1&#xff09;走到grid[0][0]的最小距离就是起点grid[0][0]即dp[0][0]grid[0][0]; &#xff08;2&#xff09;走到grid[0][1]的最小距离&#xff1a;dp[0][1]grid[0][0]grid[0][1]; &#xff08;3&#xff09;走到…

《神经网络助力战场车辆及部件损毁识别与评估》

《神经网络助力战场车辆及部件损毁识别与评估》 一、战场车辆损毁评估的重要意义二、传统战场车辆损毁评估方法&#xff08;一&#xff09;视觉评估法&#xff08;二&#xff09;仪器检测技术 三、神经网络在战场车辆损毁评估中的应用案例&#xff08;一&#xff09;射击毁伤评…

WPF+MVVM案例实战(七)- 系统初始化界面字体描边效果实现

文章目录 1、案例效果展示2、项目准备3、功能实现1、资源获取2、界面代码3、后台代码 4 源代码获取 1、案例效果展示 2、项目准备 打开项目 Wpf_Examples&#xff0c;新建系统初始化界面 WelcomeWindow.xmal,如下所示&#xff1a; 3、功能实现 1、资源获取 案例中使用的CSD…

VMware Workstation Pro 17 安装 Centos 7.9 虚拟机

下面以使用VMware Workstation Pro 17.5.2版本进行安装&#xff0c;CentOS版本为7.9&#xff0c;7.x的原来很多地址失效了&#xff0c;因为旧版移到了vault目录。为了方便大家整理可用的下载地址&#xff1a;清华大学镜像站 新建虚拟机 下面是填写的虚拟机的名称和路径&#x…

拴柱说Mac之Mac的高效使用技巧第二期

Mac的触控板想必大家都会使用&#xff0c;比如三指拖移窗口&#xff0c;四指切换桌面&#xff0c;触控板能做到的其实更多&#xff0c;今天的高效使用技巧讲的就是触控板&#xff0c;如何才能让你的触控板更加的好用 第一步&#xff0c;官网下载BetterAndBetter 第二步&#…

部署前后端分离若依项目--CentOS7Docker版

一、准备 centos7虚拟机或服务器一台 若依前后端分离项目&#xff1a;可在下面拉取 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 二、环…

【Python爬虫】获取汽车之家车型配置附代码(2024.10)

参考大哥&#xff0c;感谢大哥&#xff1a;https://blog.csdn.net/weixin_43498642/article/details/136896338 【任务目标】 工作需要想更方便地下载汽车之家某车系配置清单&#xff1b;&#xff08;垃圾汽车之家不给下载导出表格&#xff0c;配置页叉掉了车系要出来还要重新…

软件测试知识点汇总

第一部分:(软件)测试概念类 1、软件质量 软件质量是“软件满足规定或潜在用户需求特性的总和”。 反映出如下3方面的问题: 1)软件需求是度量软件质量的基础。不符合需求的软件就不具备质量。 2)软件人员必须遵循软件过程规范,用工程化的方法来开发软件。 3)满足一…

利用ADPF性能提示优化Android应用体验

Android Dynamic Performance Framework(ADPF)是google推广的一套用于优化散热以及CPU性能的动态性能框架。本文主要介绍其中的performance hint的部分。 1、为何引入ADPF 我们都知道&#xff0c;在大多数设备上&#xff0c;Android 会动态调整CPU的频率和核心类型。如果work l…

简单的udp程序

文章目录 1. 预备知识1.1 源IP地址和目的IP地址1.2 端口号1.3 套接字初识1.4 tcp协议和udp协议简单认识1.5 网络字节序 2. udp程序2.1 创建套接字&#xff08;socket&#xff09;的系统调用2.2 bind()2.2.1 初始化一个sockaddr_in结构体2.2.2 inet_addr函数2.2.3 0.0.0.02.2.4 …

如何搭建AI智能化招聘平台?招聘系统源码与小程序开发技术方案探讨

本篇文章&#xff0c;小编将深入探讨如何搭建一个AI智能化招聘平台&#xff0c;分析其背后的招聘系统源码架构以及APP开发的技术方案。 一、AI智能化招聘平台的核心功能 在设计AI招聘平台时&#xff0c;必须考虑其核心功能&#xff0c;以确保平台具备高效的招聘能力和智能化的…

shodan4,挂黑网站查找,弱口令网站搜索

myip参数 shodan myip&#xff08;查看自己的出口IP,哪个地址链接的公网)挂黑网站查找 我们今天看一看找一下&#xff0c;有些已经被黑的网站好吧&#xff0c;就是利用shodan查看一下哪些网站已经被黑了。 shodan search -limit 10 -fields ip_str,port http.title:hacked b…

iOS静态库(.a)及资源文件的生成与使用详解(OC版本)

引言 iOS静态库&#xff08;.a&#xff09;及资源文件的生成与使用详解&#xff08;Swift版本&#xff09;_xcode 合并 .a文件-CSDN博客 在前面的博客中我们已经介绍了关于iOS静态库的生成步骤以及关于资源文件的处理&#xff0c;在本篇博客中我们将会以Objective-C为基础语言…

十八、【智能体】数据库:未来科技的大脑

在上一篇中我们讲到了 **变量 ** &#xff0c; 变量 的作用是保存用户个人信息&#xff0c;让 Bot记住用户的特征&#xff0c;使回复更加个性化。 上一篇内容为&#xff1a;https://blog.csdn.net/qq_40585384/article/details/143272599 但变量有一个缺点——存储的信息太单…

【数据结构与算法】《Java 算法宝典:探秘从排序到回溯的奇妙世界》

目录 标题&#xff1a;《Java 算法宝典&#xff1a;探秘从排序到回溯的奇妙世界》一、排序算法1、冒泡排序2、选择排序3、插入排序4、快速排序5、归并排序 二、查找算法1、线性查找2、二分查找 三、递归算法四、动态规划五、图算法1. 深度优先搜索&#xff08;DFS&#xff09;2…