android 汇编 参数,安卓ARM汇编基础知识

ARM 是 Advanced RISC Machine 的缩写,可以理解为一种处理器的架构,还可以将它作为一套完整的处理器指令集。RISC(Reduced Instruction Set Computing) 精简指令集计算机:一种执行较少类型计算机指令的微处理器。

处理器指令集: 计算机处理命令的指令集合。ARM 指令集是一组提供一整套运算的 32 位指令。

ARM 处理器是典型的 RISC 处理器,因为它们执行的是加载/存储体系结构。只有加载和存储指令才能访问内存。数据处理指令只操作寄存器的内容。

目前市面上的安卓手机绝大多数的CPU都是基于ARM架构的,但是也有少数采用了英特尔X86架构的CPU。

对于使用ARM处理器的 Android手机来说,它最终会生成相应的ARM elf (so)可执行文件,分析软件的核心功能只能从 elf(so)文件入手。

1、ARM汇编语言(armasm)是一门低级语言,它与系统的底层打交道,直接访问底层硬件资源。

2、ARM汇编语言与C语言共用同一套原生程序开发的API接口。

3、寄存器是CPU的组成部分,是和存储器交互的桥梁,它们可用来暂存指令、数据和地址。

ARM寄存器

ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。

ARM寄存器分为2类,普通寄存器和状态寄存器。通用寄存器总共16种,分别为R0到R15;状态寄存器共2种,分别为CPSR和SPSR。

16种通用寄存器:(总个数31)R15 别名PC(program counter)程序计数器:保存当前正在执行的指令在内存中的地址,当指令执行结束后,PC的值自动+1,即自动指向下一条即将执行的指令在内存中的位置。因为当程序通过汇编指令完成了对PC寄存器的赋值操作的时候,其实就是完成了一次无条件跳转。

R14 别名LR(linked register)链接寄存器:用于存放子程序的返回地址,它是ARM程序实现子程序调用的关键所在。

R13 别名SP(stack pointer)栈指针寄存器:用于存放堆栈的栈顶地址的。当我们进行出栈和入栈的时候,都将根据该寄存器的值来决定访问内存的位置(即出入栈的内存位置),同时在出栈和入栈操作完成后,SP寄存器的值也应该相应增加或减少。

R0-R12是普通的数据寄存器,可用于任何地方。R12 内部调用暂时寄存器 。 被调用函数在返回之前不必恢复。

R4-R11 常用来存放函数的局部变量 。 被调用函数返回之前必须恢复这些寄存器的值。

R0-R3 常用来传入函数参数,传出函数返回值

2种状态寄存器:(总个数6)CPSR(1个)(current program status register)状态寄存器:用于保存程序的当前状态。

SPSR(5个)(saved program status register)备份程序状态寄存器: 异常返回后恢复异常发生时的工作状态。

上面的知识点有点多,需要记住 ARM微处理器有37个寄存器, 其中 31个通用寄存器 总共16种(R0-R15),6个状态寄存器 总共两种(CPSR,SPSR)

ARM处理器状态

ARM汇编下有两种工作状态, 一般情况下是ARM状态,带状态切换的跳转指令BX,当地址值的最后一位是1时,进入Thumb状态。ARM状态:32位,ARM状态执行字对齐的32位ARM指令。

Thumb状态,16位,执行半字对齐的16位指令。

Thumb-2状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存

调试状态,ARM处理器停机时进入调试状态。ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。

ARM处理器在处理异常时,不管处理器处于什么状态,则都将切换到ARM状态

ARM处理器工作模式

除用户模式之外,其他所有模式统称为特权模式。它们具有对系统资源的完全访问权限,并可随意更改模式。

需要任务保护的应用程序通常在用户模式下执行。有些嵌入式应用程序可能完 全运行在超级用户模式或系统模式下。

进入除用户模式之外的模式是为了处理异常或访问特许资源。

1460000023739225

ARM指令集简介

ARM指令集是指计算机ARM操作指令系统,在ARM中有两种方式可以实现程序的跳转:一种是跳转指令

另一种是直接向PC寄存器(R15)中写入目标地址值

所有 ARM 指令的长度都是 32 位。这些指令是按字对齐方式存储的,因此在 ARM 状态下,指令地址的两个最低有效位始终为零。

而 Thumb、Thumb-2 指令的长度是 16 位或 32 位。这些指令按半字对齐方式存储。其中有些指令使用最低有效位来确定跳转到的目标代码是 Thumb 代码还是 ARM 代码。ARM处理器指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类。

跳转指令

此类指令用于:向后跳转以构成循环

在条件结构中向前跳转

跳转到子例程

在 ARM 状态和 Thumb 状态之间转换处理器状态

数据处理指令

此类指令用于对通用寄存器执行运算,它们可对两个寄存器的内容执行加法、 减法或按位逻辑等运算,并将结果存放到第三个寄存器中。它们还可以对单个寄存器中的值执行运算,或者对寄存器中的值与指令中提供的常数执行运算。

寄存器加载和存储指令

用于从内存加载单个寄存器的值,或者在内存中存储单个寄存器的值

协处理器指令

此类指令支持一种用于扩展 ARM 体系结构的通用方式。用于减轻系统微处理器的特定处理任务。ARM微处理器可支持多达16个协处理器用于各种协处理操作。

程序状态寄存器(PSR)处理指令

用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:MRS 程序状态寄存器到通用寄存器的数据传送指令

MSR 通用寄存器到程序状态寄存器的数据传送指令

异常产生指令

ARM 微处理器所支持的异常指令有如下两条:SWI 软件中断指令

BKPT 断点中断指令

1460000023739226

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

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

相关文章

linux x64 寄存器 传参,Linux X86架构参数传递规则

背景 突然好奇x86架构下函数参数怎么传递的,之前只是听别人说过通过寄存器,但是怎么传,什么顺序都没有仔细研究过,也没有实际测试过,因此就想着用实践来检验一下咯。 传参顺序 在32位和64位机器上,寄存器名称不同,64位机器为rxx,32位机器为exx。传参顺序如下, 64位系统…

linux控制协程参数,Linux高性能网络:协程系列06-协程实现之切换-Go语言中文社区...

目录 6.协程实现之切换 问题:协程的上下文如何切换?切换代码如何实现? 首先来回顾一下x86_64寄存器的相关知识。x86_64 的寄存器有16个64位寄存器,分别是:%rax, %rbx, %rcx, %esi, %edi, %rbp, %rsp, %r8, %r9, %r10, …

陶瓷气体放电管参数含义详解

​很多客户反应,不太明白陶瓷气体放电管产品手册中的参数含义。不可否认,电路保护器件产品规格书手册用的语言大部分都是英文,没有一定的英文基础,还真消化不了。有时候,就算能看得懂,但是面对枯燥无味的参…

ARM寄存器及功能介绍/R0-R15寄存器

1、ARM 寄存器组介绍 ARM 处理器一般共有 37 个寄存器,其中包括: (1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。 (2) 6 个状态寄存器…

x64 汇编 参数传递

参数传递在不同的系统上是不一样的 称作 calling convention 调用约定 windows rcx,rdx,r8,r9 用来存储整数或指针参数,按照从左到右的顺序 xmm0,1,2,3 用来存储浮点参数 其余参数会压入栈中。 linux 当参数在 6 个以内,参数从左到右依次放入寄存器:…

汇编和c语言函数的参数,C函数与汇编函数之间参数及返回值传递方法

AAPCS对ARM结构的一些标准做了定义,在这里我们只重点介绍函数调用部分,如图8所示,AAPCS为ARM的R0~R15寄存器做了定义,明确了它们在函数中的职责: 图 8 AAPCS关于ARM寄存器的定义 一、函数调用时的规则如下: 1、 父函数与子函数间的入口参数依次通过R0~R3这4个寄存器传递。…

台式计算机配置参数,整机配置参数以及性能测试_台式电脑评测-中关村在线

我们首先来看一看同方E500的硬件配置情况。 根据AIDA64所示,同方E500搭载了i5-7400处理器、8GB内存、128GB建兴固态硬盘以及1TB西部数据机械硬盘。这个配置对于商务办公机来讲是非常合理的,在性能与成本之间得到了最佳的平衡。那么具体性能表现又是如何呢?我们来继续往下看。…

此计算机核心参数,买电脑如何选CPU?这三个参数一定要看!

原标题:买电脑如何选CPU?这三个参数一定要看! CPU是电脑中的核心,也可以说是电脑的大脑,一直以来CPU与GPU那个重要都是争论不休的话题,四月份升级九代酷睿处理器的机械师笔记本拥有怎样的升级体验呢?高性能玩家该通过…

5G NR首版标准R15解读

5G定义了增强型移动宽带(eMBB)、超可靠低延迟通信(URLLC)、大规模机器类型通信(mMTC) 三大场景。针对这三大场景,在2018年6月已完成的3GPP R15标准不仅定义了5G NR(新无线&#xff0…

oppo r15 android 8,抢不到小米8,就用OPPO R15吧

抢不到小米8,就用OPPO R15吧 2018-06-09 17:10:13 17点赞 21收藏 49评论 最近小米8好像很热门,于是,突然就想买个了,反正都是刘海屏千篇一律的手机,还是10年前好,手机款式都是百花齐放,各有各特…

6.S081——补充材料——RISC-V架构中的异常与中断详解

0.briefly speaking 我在阅读Xv6源码过程中对很多概念感到困惑,想到也许会有其他人对此秉持同样的困惑,所以我将我的研究和学习过程总结下来并编篡成如下的博客。本篇博客想对RISC-V标准中有关中断和异常的概念进行一个梳理,考虑RISC-V标准的…

android微信逆向工程,iOS逆向 - 微信自动添加好友

相关源码:Github地址 一、前言 本篇主要实现在微信上自动添加好友,从而熟悉 iOS 逆向分析的过程。 二、 工具 2.1 MacBook 软件 制作 Tweak 的工具 端口转发,可以让我们通过usb连接手机进行ssh、lldb调试等。主要使用python-client目录下的文件 dump 目标…

免费查询微信好友还在不在了~

最近一周经常被一些人发一些检测好友的消息,目测这东西好像是有条件收费的,然后就想想python是不是能写个免费版的好友检测。 具体可以看看运行结果: 编写脚本会用到以下几个模块 coloramacoloredlogshumanfriendlylxmlqrcoderequestssixrequ…

如何找回删除的微信好友?

如何找回删除的微信好友? 本篇主要是说朋友圈无互动过,也没有任何标签和其他特殊标记,不知道微信号,手机号的微信好友,误删之后如何通过恢复数据方式恢复好友的办法。百度之后主要有如下几种方法:1.朋友圈有…

在Centos Stream 9上Docker的实操教程(四) - Docker腾讯云远程仓库和本地私有仓库

在Centos Stream 9上Docker的实操教程 - Docker腾讯云远程仓库和本地私有仓库 本地镜像发布到腾讯云注册开通腾讯云初始化个人版服务创建仓库推送拉取镜像 私有仓库结语 本地镜像发布到腾讯云 由于官方的docker hub访问由于网络原因,可能会比较慢,博主推…

html输入框 多出的字隐藏,input 输入框获得/失去焦点时隐藏/显示文字(jquery版)

input 输入框获得和失去焦点时隐藏或者显示文字我们先看下效果图 输入框默认状态: 输入框获取焦点状态: 大家可以看效果图的搜索输入框,默认显示着“用户名/Email”的提示,当这个 input 输入框获得焦点时,就自动清空等待用户输入&#xff0c…

【C++】函数高级 - 默认参数,占位参数,函数重载基本语法,函数重载注意事项

No.Contents1【C】基础知识 - HelloWorld,注释,变量,常量,关键字,标识符2【C】数据类型 - 整型,sizeof,实型,字符型,转义字符,字符串类型,布尔类型…

LeetCode 560 和为 K 的子数组

LeetCode 560 和为 K 的子数组 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/subarray-sum-equals-k/description 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给你一个整数数组 …

chatgpt赋能python:Python中的画图——创建漂亮的可视化图像

Python中的画图——创建漂亮的可视化图像 Python是一个高度可编程的语言,因此它非常适合用于创建各种类型的可视化。 在本文中,我们将介绍Python中的画图。我们将讨论如何使用Python和一些流行的数据可视化库来创建漂亮的可视化图像。我们还将探讨如何…

【Linux】Linux文件权限的理解

目录 一、Shell是什么? 1、Shell承担用户和内核间的翻译工作 2、拒绝用户非法请求,保护内核 3、派生子进程执行用户指令 二、用户切换与提权 1、普通用户与root用户的切换 2、普通用户指令短暂提权 三、文件权限的理解 1、文件权限角色的权限文…