跳转指令

B      无条件跳转
BL 带链接的无条件跳转
BX 带状态切换的无条件跳转
BLX 带链接和状态的无条件跳转

存储器与寄存器交互数据指令(核心)

存储器:主存和内存

寄存器中放的数据:可以是字符串,可以是数,也可以是一个地址,他可以放各种类型的数据

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

LDR:从存储器中加载数据到存储器←Load
LDR R8,[R9,#] R8为待加载数据的寄存器,加载值为R9+0x4所指向的存储单元 STR:将寄存器的数据存储到存储器中→Store
STR R8,[R9,#] 将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, # :R0=0x8

数据算数指令

ADD:+
SUB:—
MUL:*
DIV: /

数据逻辑运算指令

与:AND
或:ORR
异或:EOR
LSL:逻辑左移←
LSR:逻辑右移→
LSL R0,R1,#:R0=R1*

移位:实质是乘,除,类似于小数点移位,但相反。小数点左移,数变小;右移变大。

但逻辑移位,左移变大,右移变小,且按2的倍数进行,因为是2进制。

比较指令

CMP:比较
CMP R0 #:R0寄存器中的值与0比较

标志位:如z位,这个都可以在动态调试时,寄存器窗口看到

其他指令

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

寄存器寻址方式

立即寻址:MOV R0,#→R0=0X1234
寄存器寻址:MOV R0,R1→R0=R1
寄存器移位寻址:MOV R0,R1,LSL #→R0=R1*
寄存器间接寻址:LDR R0,[R1]→将R1寄存器中的值作为地址,取出地址中的值赋予R0
寄存器间接基址偏移寻址:LDR R0,[R1,#-]→将R1寄存器的值-0x4的值作为地址,取出地址中的值给R0

int a=0;这一句简单高级语言的汇编理解

首先会开辟一个内存存储单元,然后把0x0这个数放入R0寄存器,然后再把R0寄存器的数据放入内存存储单元。所以:MOV R0,#0 STR R0,[R11,#0x14+var_20]

注意:变量要看存储单元地址,不要以为是寄存器,简单时可以这么看,但试想,如果寄存器是变量,那得要多少寄存器。寄存器就是一个桥梁,和存储器即存储单元地址交互的东西。

【安卓逆向】ARM常见汇编指令总结的更多相关文章

  1. 常见寄存器以及常见汇编指令,常见爆破指令 good

    CPU的任务就是执行存放在存储器里的指令序列.为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务.早期的CPU芯片只包括运算器和控制器两大部分.到了近几年,为了使存储器 ...

  2. ARM 常用汇编指令

    ARM 汇编程序的框架结构 .section .data <初始化的数据> .section.bss <未初始化的数据> .section .text .global _sta ...

  3. ARM 内核 汇编指令 的 8种 寻址方式

    str: store register ->指令将寄存器内容存到内存空间中, ldr:  load register 将内存内容加载到通用寄存器, ldr/str 组合来实现ARM CPU 和内 ...

  4. ARM常用汇编指令介绍

    b     跳转指令(跳转范围为32Mb) bl    带返回地址的跳转,指令自动将下一条指令的地址复制到R14寄存器,然后跳转到指定地址去执行,执行完后返回到下一条指令处执行 pc    寄存器R1 ...

  5. 1.汇编指令介绍(arm)

    本文作为本人学习过程中的记录及时不时的突发奇想偶记.鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕.文章一直不断更新中 一.汇编语言 汇编语言是一种应用计算机.微处理器.微控制器或其 ...

  6. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  7. ARM汇编指令的一些总结-转

    ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...

  8. 逆向---03.mov、test等汇编指令、EAX、关键Call、OD调试技巧

    上一篇:逆向---02.je & jmp & jnz .OD调试 基础知识:(栗子中也会说的)栗子:链接: https://pan.baidu.com/s/1qZbbTvQ 密码: i ...

  9. ARM体系结构和汇编指令

    第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...

随机推荐

  1. 从0开始学算法--排序(1.12c++利用标准库排序)

    1,简单数组按升序排序 sort(a,a+n); #include <algorithm> #include <iostream> #include <cstring&g ...

  2. Public Key Retrieval is not allowed

    链接MySQL数据库报错: 数据库连接url中添加对应属性的支持.allowPublicKeyRetrieval=true&useSSL=false url: jdbc:mysql://loc ...

  3. numpy 中array 和ndrray的区别联系

    numpy.array()  标明array只是一个方法 ndarray 是类名,是一个实例. a=numpy.array(b)    #这是把变量b转换为数组a,这里array()是个方法,a的类型 ...

  4. 解决sql server2008数据库安装之后,web程序80端口被占用问题(终极方案)

    解决sql server2008数据库安装之后,web程序80端口被占用问题(终极方案) 前言:原来电脑上的Apache一直使用正常,在安装sql server2008后,突然发现Apache无法启动 ...

  5. ApiBehaviorOptions 统一模型验证配置不生效

    ApiBehaviorOptions 的统一模型验证配置一定要放到(.AddMvc)后面.

  6. centos添加用户并赋予 root管理员权限

     centos添加用户并赋予 root管理员权限 用centos时,root用户一般都是超级管理员使用的,一般不轻易给别人,但是有时候同事安装软件时需要root账号,又不得不给,只能重新建一个用户,并 ...

  7. php server整理

    $_SESSION['PHP_SELF'] -- 获取当前正在执行脚本的文件名. $_SERVER['SERVER_PROTOCOL'] -- 请求页面时通信协议的名称和版本.例如,“HTTP/1.0 ...

  8. day22 定时任务

    检查软件是否安装 cronie [root@oldboyedu ~]# rpm -qa cronie cronie-1.4.11-19.el7.x86_64 [root@oldboyedu ~]# r ...

  9. SQL Server 检查和处理死锁问题

    SELECT spid, blocked, DB_NAME(sp.dbid) AS DBName, program_name, waitresource, lastwaittype, sp.login ...

  10. resample matlab实现

    使用线性插值实现sample rate转换. function output = simpleResample(input, inputfs, outputfs) inputLen = length( ...