1、跳转指令

  B        无条件跳转

  BL      带链接的无条件跳转

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

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

  B  loc_地址

  BNE, BEQ

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

  存储器(主存,即内存)

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

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

  

  LDR:从存储器中加载数据到寄存器    LoaD Register   <-  

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

  

  STR:将寄存器的数据存储到存储器    STore Register   ->

  STR  R8,[R9,#04]   R8寄存器的数据存储到 R9+0x04 指向的存储单元

  

  LDM:将存储器的数据加载到一个寄存器列表  LoaD Multiple  ->

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

  STM:将一个寄存器列表的数据存储到指定的存储器  STore Multiple  <-

  

  PUSH:将寄存器值推入堆栈

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

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

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

  

3、数据传送指令

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

  MOV  R0, #8   0x8数据传送给R0,相当于赋值

4、数据算术运算指令

  <-

  ADD, SUB, MUL, DIV

  有符号,无符号运算:带进位运算

5、数据逻辑运算指令

  与:AND

  或:ORR

  异或:EOR

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

  LSL:逻辑左移 Logical Shift Left  <-

  LSR:逻辑右移 Logical Shift RIght ->

6、比较指令

  CMP:比较

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

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

7、其它指令

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

  伪指令:DCB

8、寄存器寻址方式

  立即寻址:MOV  R0,#1234

  寄存器寻址:MOV R0,R1

  寄存器移位寻址:MOV  R0,R1,LSL  #2

  寄存器间接寻址:LDR R0,[R1]  将R1寄存器中的值作为地址,取出地址中的值赋值给R0

  寄存器间接基址偏移寻址:LDR  R0,[R1, #-4]  将R1寄存器的值减 0x4 的值作为地址,取出地址中的值给R0

汇编:

  机器语言,高级语言的逆向

分析和修改汇编指令:

  赋值、跳转、算术运算、移位运算、堆栈运算、内存读写指令、函数调用约定。

用户模式:

  不分组寄存器(R0-R7)

  分组寄存器(R8-R14)

传递参数与返回值(Ro-R3)

保存栈顶地址(R13/SP)

保存函数的返回地址(R14/LR)

程序计数器R15(PC)

状态寄存器CPSR

ARM处理器:

  ARM状态(执行32位对齐指令的ARM指令)

  Thumb状态(执行16位对齐的Thumb指令)

补充:常用ARM指令集及汇编

Link:https://www.cnblogs.com/farwish/p/15226741.html

ARM 反汇编速成的更多相关文章

  1. 恶意代码分析实战-x86反汇编速成班

    x86反汇编速成 x86体系结构 3种硬件构成: 中央处理器:负责执行代码 内存(RAM):负责存储所有的数据和代码 输入/输出系统(I/O):为硬盘.键盘.显示器等设备提供接口 内存 一个程序的内存 ...

  2. 第4章 x86反汇编速成班

    4.1 抽象层次 硬件<微指令<机器码<低级语言<高级语言<解释型语言 4.2 逆向工程 4.3 x86体系结构 冯-诺依曼体系结构 中央处理器(CPU): 负责执行代码 ...

  3. 基于ARM处理器的反汇编器软件简单设计及实现

    写在前面 2012年写的毕业设计,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性 ...

  4. arm汇编(c内嵌汇编及c和汇编互调)

    C语言编译成汇编: arm-linux-gcc -S test.c -o test.S C语言编译成可执行文件: arm-linux-gcc test.c -o test 多个文件编译链接: arm- ...

  5. CTF各种资源:题目、工具、资料

    目录 题目汇总 Reverse 签到题 Web Web中等难度 Crypto 基础网站 各类工具 综合 Web Payloads 逆向 Pwn 取证 题目汇总 这里收集了我做过的CTF题目 Rever ...

  6. 通过反汇编理解函数调用机制(x86和ARM)

    如下,一个简单的程序 #include <stdio.h> int add(int a, int b) { return a + b; } void main() { , b = ; in ...

  7. ARM的BIN文件反汇编方法

    最近在调试uboot的代码时,用的新版本的uboot,lowlevel_init函数里是空的,而且在链接文件中也没有发现对lowlevel_init.o的链接.在bl lowlevel_init 之前 ...

  8. 痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的反汇编文件(.s, .lst, .dump). 痞子衡在第四.五.六节课分别介绍了编译器/链接器生成的3种output文件( ...

  9. ARM汇编程序闪烁灯与其反汇编代码比较

    /* *LED闪烁 *led.s */ #define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 .global _start //把 _start ...

  10. 查看32bit的ARM(比如ARMv7)反汇编

    1.使用./arm-eabi-as test.S -o test.o编译 2.使用./arm-eabi-objdump -d test.o反汇编

随机推荐

  1. 00-【K210】API资料、电气接线图、PCB文件

    K210的接口说明文档 API接口文档: 链接:https://pan.baidu.com/s/1mlzYRJYQIeHSEMysp_v4cg?pwd=pjmv 提取码:pjmv 2.原理图.PCB文 ...

  2. .NET分布式Orleans - 5 - 持久化

    在分布式系统中,数据的持久化是至关重要的一环. Orleans 7 引入了强大的持久化功能,使得在分布式环境下管理数据变得更加轻松和可靠. 本文将介绍什么是 Orleans 7 的持久化,如何设置它以 ...

  3. 并发CPU伪共享及优化

    伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变量共享 ...

  4. 最大堆(MaxHeap)

    性质 二叉堆是一颗完全二叉树,而完全二叉树是把元素排列成树的形状. 堆中某个节点的值总不大于其父节点的值最大堆(相应的可以定于最小堆) // 返回完全二叉树的数组表示中,一个索引所表示的元素的父亲节点 ...

  5. 高抗干扰抗噪,段码LCD液晶低功耗驱动IC-VK2C23B,兼容市面上16C23

    VK2C23是一个点阵式存储映射的LCD驱动器,可支持最大224点(56SEGx4COM)或者最大416点(52SEGx8COM)的LCD屏. 单片机可通过I2C接口配置显示参数和读写显示数据,也可通 ...

  6. 鸿蒙HarmonyOS实战-ArkUI组件(Progress)

    一.Progress Progress组件是一种用户界面(UI)元素,用于向用户显示某些任务的进度.它通常以进度条的形式出现,显示任务完成的百分比.Progress组件可以在确定任务持续时间未知的情况 ...

  7. #NTT,原根#洛谷 3321 JZOJ 4051 [SDOI2015]序列统计

    题目 分析 首先朴素dp方程 设\(dp[i][j]\)表示\(i\)个数的数列乘积为\(j\)的方案 那么\(dp[i][j*a[k]\bmod m]=itself+dp[i-1][j]\) 这可以 ...

  8. JDK 14的新特性:switch表达式

    目录 简介 写在前面 连写case switch返回值 yield 总结 简介 switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP ...

  9. 【直播回顾】OpenHarmony 3.1 Release版本南北向关键能力解读

    OpenHarmony 3.1 Release版本发布后,广大开发者们纷纷开始上手体验新版本的功能.但随之而来的一系列问题,摆在了大家的面前:OpenHarmony 3.1这一版本,都有哪些重要的能力 ...

  10. C# 方法参数中的this参数

    引用:C# 方法中的this参数 - zh89233 - 博客园 (cnblogs.com) public static class StringExtension { public static v ...