ARM指令集

2023-10-31

往期推荐

ARM汇编语言程序结构

Android与ARM处理器

反射调用Java层方法

反射获取Java层字段的值

ARM指令集是指计算机ARM操作指令系统。在ARM中有两种方式可以实现程序的跳转:一种是跳转指令;另一种是直接向PC寄存器中写入目标地址值。ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类。

介绍几种常见的指令以及它们的作用。

一:跳转指令

跳转指令有以下四种:

B:无条件跳转

例如: B 0x1234,跳转到绝对地址0x1234的位置执行相应代码。

BL:带链接的跳转指令

该指令将下一条指令的地址拷贝到R14寄存器也就是LR寄存器中 ,然后跳转到指定的地址。

例如:BL loc_234,跳转到目标loc_234地址去,这条指令一般用于子程序之间的调用.

BX:带状态切换的无条件跳转

BX 是用来切换处理器的状态。

例如:BX R0,跳转到R0寄存器指定的地址,并且根据R0最低位来切换处理器状态。

BLX:带链接和状态切换的无条件跳转

二:比较指令

指令使用寄存器Rn的值减去operand2的值,根据操作的结果更新cpsr寄存器相关的条件标志位,方便后面的指令根据相应的条件来判断是否执行。

一般常用指令如下:

eq:相等/z=1

ne:不相等/标志z=0

hi:无符号数大于/c=1,z=0

cs/hs:无符号数大于或等于/c=1

cc/lo:无符号数小于/c=0

ls:无符号数小于或等于/c=0,z=1

gt:有符号数大于/z=0,n=v

ge:有符号数大于或等于/n=v

lt:有符号数小于/n!=v

le:有符号数小于或等于/z=1,n!=v

mi:负数/n=1

pl:整数或0/n=0

vs:溢出/v=1

vc:没有溢出

三:存储器与寄存器数据交互指令

数据交换指令是实现两个操作数据之间的位置互换的指令,这两个操作数可以是两个寄存器操作数,或一个寄存器操作数与一个存储器操作数,或两个存储器操作数,在多处理机中,也可以是一个寄存器操作数和一个共享存储器操作数。寄存器中存放的数据,可以是字符串,可以是数,也可以是一个地址,它可以存放各种类型的数据。

  • 存储地址单元:地址(如0x00004000)与地址中存在的值。

  • LDR:从存储器中加载数据到寄存器 ← Load

  • LDR R8,[R9,#4] R8为待加载数据的寄存器,加载值为R9+0x4所指向的存储单元。

  • STR:将寄存器的数据存储到存储器 → Store

  • STR R8,[R9,#4] 将R8寄存器的数据存储到R9+0x4指向的存储单元。

  • LDM:将存储器的数据加载到一个寄存器列表 →

  • LDM R0,{R1-R3}将R0指向的存储单元的数据依次加载到R1,R2,R3寄存器。

  • STM:将一个寄存器列表的数据存储到指定的存储器 ←

  • PUSH:将寄存器值推入堆栈。

  • POP:将堆栈值推出到寄存器。

  • SWP:将寄存器与存储器之间的数据进行交换。

  • SWP R1, R1 [R0] 将R1寄存器与R0指向的存储单元的内容进行交换。

  • 堆,队列,数据结构。栈是竖的,后进先出,且只能从栈顶依次填入数据。

四: 数据指令

数据的三种指令分别为传送指令,数据算数运算指令以及数据逻辑运算指令。

传送指令

MOV:将立即数或寄存器的数据传送到目标寄存器 ←

MOV R0, #8 R0=8

数据算术运算指令

ADD,SUB,MUL,DIV ←

有符号、无符号运算,带进位运算。

数据逻辑运算指令

与:AND

或:ORR

异或:EOR

移位:实质是乘、除,类似于小数点移位,但相反,小数点左移,数变小,右移变大。但逻辑移位,左移变大,右移变小,且按2的倍数进行,因为是2进制。LSL:逻辑左移←

LSR:逻辑右移←

LSL R0,R1,#2 R0=R1*4

其他指令

协处理器指令:SWT(切换用户模式)

伪指令:DCB

总结

通过今天的分享,我们知道了ARM的优点为,执行快,可嵌入式开发,数据的三种指令有:传送指令,数据逻辑运算指令和数据算术运算指令,最后还了解了Android是基于Linux内核驱动。

如果你也对安卓逆向感兴趣。可以加入下方的群,大家一起讨论问题,或者扫描下方二维码关注公众号,关注回复 “安卓逆向” 获取免费教程

安卓逆向交流学习:3543756281
vx:Yjxiaox

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM指令集 的相关文章

随机推荐

  • Android Bluetooth AVRCP

    本篇blog继续以结合日志的形式来分析AVRCP 以手机连接上耳机后 通过耳机控制音乐播放的暂停 播放来分析AVRCP的过程 1 AVRCP 本章基于A V Remote Control Profile 1 6 2 Bluetooth Te
  • Python Spyder 调出缩进对齐线

    初学python 对python的对齐很重视 为了防止出错 使用spyder工具提供的功能 下面是方法 1 首先打开Tools菜单栏下的Preferences 出现如下界面 轻松1 2 3步之后就可以发现有 当然 红色的矩形框是我自己通过画
  • 2022年Android面经分享,准备Android面试

    前言 前几天一个多年的朋友和我聊天 说他被公司裁员了 我听了非常吃惊 我这个朋友之前在一家著名的外企公司已经工作10年以上了 级别也还不错 算是中高层了 前几年创业最火爆的时候 我和其他人想拉这位朋友出来一起干 怎么诱惑 怎么画大饼他都不动
  • Ubuntu18.04安装cuda10以及cuda版本的opencv3.4.13

    目录 一 cuda 二 cuda版本的Opencv3 4 13 一 cuda 首先提前安装好显卡驱动 在软件与更新 附加驱动里面直接安装即可 这个很简单 不再赘述 查看自己应该安装的版本CUDA 12 0 Update 1 Release
  • html返回200错误,http – 为什么在404错误页面上有200 OK标题状态是不是很糟糕?...

    我有一个问题我遇到了麻烦 err404页面的200OK标题状态问题 虽然它应该是404标题 200好有什么问题 真有可能200 OK应该在404错误页面标题状态 感谢建议 非常感谢 我想它与 htaccess有关 这是我的 htaccess
  • 报错:Cannot read properties of undefined (reading ‘commit‘)

    上传头像的时候出现了这样的报错 根据代码的反应锁定应该是上传vuex方法的问题 找出问题的方法 打印 this update avatar 发现是undefined 打印this 发现属性中没有 route方法 然后搜索main js发现没
  • Docker的基本操作2

    CSDN话题挑战赛第2期 参赛话题 学习笔记 个人名片 博主 酒徒 个人简介 沉醉在酒中 借着一股酒劲 去拼搏一个未来 本篇励志 三人行 必有我师焉 本项目基于B站黑马程序员Java SpringCloud微服务技术栈 SpringClou
  • realEngine(UE4)实现开关门效果

    UE4系列文章目录 文章目录 UE4系列文章目录 前言 一 制作步骤 注意 前言 虚幻引擎4是一个游戏开发工具的集合 能够生成从2D移动游戏到AAA控制台游戏的一切 它是 方舟 生存进化 铁拳7 和 王国之心III 等游戏的引擎 玩家熟知的
  • python爬虫爬取网页上的天气数据

    目录 一 获取网页重要信息 二 爬取网页数据 三 源码分享 一 获取网页重要信息 在要爬取数据信息的网页上 F12进入查看网页内容 二 爬取网页数据 1 导入模块 import requests from bs4 import Beauti
  • MAC python通过pip安装依赖报错:unresolved reference‘Crypto’ 解决办法

    MAC python通过pip安装依赖报错 unresolved reference Crypto 解决办法 出现这个问题网上大部分的解决办法都试过了 对我来说都没有用 比如通过Pycharm gt Preferences gt Proje
  • Idea创建maven项目,通过java API操作Hbase数据库

    一 准备 启动hdfs集群 之前的HA集群 启动Hbase 二 创建工程 三 API操作Hbase分布式数据库 1 插入一条数据 Test public void put throws Exception 创建conf对象 会加载你项目资源
  • Python数据分析之特征工程

    目录 一 数据清洗 1 数据样本采集 抽样 2 异常值处理 识别异常值和重复值 直接丢弃 包括重复数据 集中值指代 除异常值外的均值 中位数 众数等等 插值 根据不同特征值的具体形式处理 二 特征预处理 1 特征选择 剔除与标注不相关或者冗
  • 谷歌浏览器旧版本下载地址

    谷歌浏览器下载地址 http www chromedownloads net django API学习 地址 https github com LABELNET django mysite frist django API学习 CSDN博客
  • pythonseleniumAPI

    一 浏览器操作 1 浏览器最大化 driver maximize window 将浏览器最大化显示 2 设置浏览器宽 高 driver set window size 480 800 设置浏览器宽480 高800显示 3 控制浏览器前进 后
  • Mac上配置python3的环境变量

    1 查看当前python3的位置 which python3 我的电脑当前地址路径是 usr local bin python3 2 准备好环境变量的配置内容 PATH usr local bin PATH export PATH alia
  • python开篇-------python介绍

    一 python介绍 python的创始人为吉多 范罗苏姆 Guido van Rossum 1989年的圣诞节期间 Guido开始写Python语言的编译器 Python这个名字 来自Guido所挚爱的电视剧Monty Python s
  • swap 空间去哪里了?

    问题背景 xxxx 项目中 在内存充足的情况下 swap 被使用 需要优化并释放 问题分析过程 内核参数没有配置 vm swappiness 0 0表示最大限度使用物理内存 其次才是 swap 空间 默认值应该是60 100表示积极的使用
  • 2. 快速了解前端三大件(HTML、CSS、Javascript)

    2 1 Web开发的标准 Web应用开发需要遵循的标准就教Web标准 这里Web标准是一系列标准的集合 网页主要由三部分组成 结构标准 XML HTML和XHTML 表现标准 CSS 行为标准 DOM Javascript 2 2 HTML
  • 正则表达式(详解)

    文章目录 1 基本匹配 1 1 标志 大小写i 全局g 多行m 1 2 零宽度断言 前后预查 1 4 贪婪匹配与惰性匹配 Greedy vs lazy matching 2 常见语法 表格 2 1 元字符 2 2 特殊符号 2 3 扩展表示
  • ARM指令集

    往期推荐 ARM汇编语言程序结构 Android与ARM处理器 反射调用Java层方法 反射获取Java层字段的值 ARM指令集是指计算机ARM操作指令系统 在ARM中有两种方式可以实现程序的跳转 一种是跳转指令 另一种是直接向PC寄存器中