ARM 反汇编速成
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 反汇编速成的更多相关文章
- 恶意代码分析实战-x86反汇编速成班
x86反汇编速成 x86体系结构 3种硬件构成: 中央处理器:负责执行代码 内存(RAM):负责存储所有的数据和代码 输入/输出系统(I/O):为硬盘.键盘.显示器等设备提供接口 内存 一个程序的内存 ...
- 第4章 x86反汇编速成班
4.1 抽象层次 硬件<微指令<机器码<低级语言<高级语言<解释型语言 4.2 逆向工程 4.3 x86体系结构 冯-诺依曼体系结构 中央处理器(CPU): 负责执行代码 ...
- 基于ARM处理器的反汇编器软件简单设计及实现
写在前面 2012年写的毕业设计,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性 ...
- arm汇编(c内嵌汇编及c和汇编互调)
C语言编译成汇编: arm-linux-gcc -S test.c -o test.S C语言编译成可执行文件: arm-linux-gcc test.c -o test 多个文件编译链接: arm- ...
- CTF各种资源:题目、工具、资料
目录 题目汇总 Reverse 签到题 Web Web中等难度 Crypto 基础网站 各类工具 综合 Web Payloads 逆向 Pwn 取证 题目汇总 这里收集了我做过的CTF题目 Rever ...
- 通过反汇编理解函数调用机制(x86和ARM)
如下,一个简单的程序 #include <stdio.h> int add(int a, int b) { return a + b; } void main() { , b = ; in ...
- ARM的BIN文件反汇编方法
最近在调试uboot的代码时,用的新版本的uboot,lowlevel_init函数里是空的,而且在链接文件中也没有发现对lowlevel_init.o的链接.在bl lowlevel_init 之前 ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的反汇编文件(.s, .lst, .dump). 痞子衡在第四.五.六节课分别介绍了编译器/链接器生成的3种output文件( ...
- ARM汇编程序闪烁灯与其反汇编代码比较
/* *LED闪烁 *led.s */ #define GPJ0CON 0xE0200240 #define GPJ0DAT 0xE0200244 .global _start //把 _start ...
- 查看32bit的ARM(比如ARMv7)反汇编
1.使用./arm-eabi-as test.S -o test.o编译 2.使用./arm-eabi-objdump -d test.o反汇编
随机推荐
- linux文件编辑
1.VIM基本概述 1.什么是VIM? vi和vim是Linux下的一个文本编辑工具.(可以理解为windows的记事本,或word文档) 2.为什么要使用VIM? 因为Linux系统一切皆为文件,而 ...
- 三维模型3DTile格式轻量化顶点压缩主要技术方法分析
三维模型3DTile格式轻量化顶点压缩主要技术方法分析 三维模型顶点压缩是3DTile格式轻量化压缩的重要组成部分,能有效减小数据大小,提高数据处理效率.下面将详细分析几种主要的顶点压缩技术方法: 预 ...
- 用Vue3.0 写过组件吗?如果想实现一个 Modal你会怎么设计?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.组件设计 组件就是把图形.非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式 现在有一个场景,点击新增与编辑都弹框出来进行 ...
- 记录--canvas基础操作
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 以下是一些有关使用Canvas的技巧: 绘制基本形状:Canvas可以用于绘制各种基本形状,如矩形.圆形.线条等.使用 fillRe ...
- JQ实现音乐插件并自动播放
这里分享我最近写出来的一个小东西,基于jq的音乐播放器,可以嵌套到网站 效果截图: 具体首页代码如下: <!DOCTYPE html> <html> <head> ...
- 记一起rust悬垂引用解决
最初要写一段从redis的hash获取json字符串,转化为结构体,代码逻辑如下 use redis::{Client, Commands, Connection, Iter}; use serde: ...
- IDEA (任意 JetBrains IDE)拆分先前 commit
最近在合并上游代码,遇到了一个问题:某个 commit 杂糅了几个不同的特性修改,这可能会导致 rebase 上游代码时需要再对该 commit 进行额外的代码冲突处理 解决方法:合并上游分支前,拆分 ...
- KingbaseES V8R6集群运维案例--主库PITR恢复后备库无法连接到集群
案例说明: KingbaseES V8R6集群,在主库执行PITR恢复后,clone备库:但是启动集群后,备库无法连接到主库,流复制状态和集群节点状态异常. 适用版本: KingbaseES V8R6 ...
- JDBCUtil 连接MYSQL数据库Java工具类
1 package com.reliable.util; 2 import java.sql.Connection; 3 import java.sql.DriverManager; 4 import ...
- python结巴分词及词频统计
1 def get_words(txt): 2 seg_list = jieba.cut(txt) 3 c = Counter() 4 for x in seg_list: 5 if len(x) & ...