前言
工作已有一段时间。反汇编的任务也基本完成,告一段落。前两天逆向了一个bin文件,深深感觉自己若真要吃这碗饭依然是不够格的。借此回顾arm汇编一些基础知识,也希望给各位在学习的同学有所帮助。
ARM基本概念
ARM 是 RISC 架构(RISC, 精简指令集),多数指令单周期完成,采用32位加载存储体系架构。
大多数ARM核都实现以下两种指令集:
32-bit ARM 指令集
16-bit Thumb 指令集
Jazelle cores 能够执行 Java 字节码,最新的ARM核实现了 Thumb-2指令集。
小补充:x86 — CISC, 复杂指令集
指令集 架构 soc
ARMV4T ARM7 s3c44b0
ARMV5TE ARM9 s3c2410/s3c2440
ARMV6 ARM11 s3c6410 ARMV7
ARMV8 cortex-A,高大尚领域(多媒体) -R,高实时领域中-M,以单片机的价格实现32bit处理能力stm32
1) 三级指令流水线
多图预警!!
ARM7 使用三级流水线
ARM9 使用五级流水线
ARM11
cortex-a: 10多级流水线
2) ARM编程模型
2.1 ARM有7种工作模式:
1、SVC (管理模式) : 处理器复位后进入该模式;执行软中断指令(SWI)后进入该模式
2、FIQ (快速中断模式) :发生高优先级中断时进入该模式
3、IRQ (中断模式) :发生低优先级中断时进入该模式
4、ABORT (终止模式) :用于处理非正常访问存储器
5、UNDEF (未定义模式) :用于处理未定义指令
6、SYSTEM (系统模式)
7、USER (用户模式) :多数应用程序和系统任务运行在该模式
前5种又为异常模式,后2种为非异常模式;
前6种又为特权模式,最后1种为非特权模式。
2.2 ARM有2种工作状态:
ARM状态:执行ARM(32bit)指令,PC值字对齐
thumb状态:执行thumb(16bit)指令 ,PC值半字对齐
thumb对应生成的可执行文件占据存储空间更小,其执行速度要比arm指令对应的可执行文件要慢。
arm工作状态和thumb工作状态软件上可以自由切换,当处理异常时必须工作于arm工作状态。
2.3 ARM寄存器组织结构
2.3.1 寄存器和特殊功能寄存器的区别:
1)所处的位置不同寄存器位于ARM core中特殊功能寄存器位于SOC2) 访问方式不同特殊功能寄存器都有特定物理地址,可以通过指针访问寄存器只有名字没有地址,C语言很难访问到3)作用不同特殊功能寄存器是软件操作硬件的媒介
2.3.2 ARM处理器有37个32bit的寄存器:
31个用作通用寄存器,包括1个用作PCr15):r0 r1 r2 r3 ... r15r13sp 栈指针寄存器)r14lr 保存函数的返回地址)r15pc 保存取指令的位置,软件上可以给PC 实现程序的跳转,硬件每取完一条指令 会自动给PC += 4/2)6个状态寄存器:1个用作CPSRCurrent Program Status Register):CPSR[4:0] 模式位[5] T,处于哪种工作状态T=1,当前处于thumbT=0,当前处于arm [6] F=0,使能FIQ异常F=1,屏蔽FIQ异常[7] I=0,使能IRQ异常I=1,屏蔽IRQ异常[31:28] V overflow,有符号数据运算是否有溢出(可忽略)C carry,运算过程最高是否有借位或者进位例如 0xfffffffc + 20 C=10xfffc + 20 C=0Z zero零) 运算结果为0 Z=1 反之Z=0N negative负数) 运算结果为负数 N=1 反之N=05个用作SPSR Saved Program status Registers):用于备份CPSR寄存器,其中每种工作模式只能访问其中的一个子集。
ARM支持7种异常:
异常 模式
vector_base)
reset 按下复位键 SVC
undef 执行到不认识的指令 UNDEF
soft int 执行了汇编指令swi SVC
pre abort 取指令时产生了非法的存储器访问 ABORT
data abort 取数据时产生了非法的存储器访问 ABORT
irq 产生了低优先级的中断,如按键中断 IRQ
fiq 产生了高优先级的中断,如断电 FIQ
收到异常后,ARM硬件会自动做以下4件事:
1) 备份CPSR寄存器 SPSR_<mode>=CPSR2) 修改CPSR的值mode T = 0 切换为ARM工作状态F = 1,I = 1 屏蔽FIQ和IRQ异常 3) 保存返回地址到LR_<mode>4) 给PC赋值(跳转到异常向量表)PC = vector_base + offsetvector_base: 可以设置通知ARM异常向量表出现的位置查ARM公司的官方手册进行设置
异常处理接收后,在软件上必须完成的工作:
1) 恢复CPSRCPSR = SPSR_<mode>
2) 给PC赋值 PC=LR_<mode>
小补充:
ARM既支持大端模式也支持小端模式,运行程序时首先要配置为大端或者小端模式。如何配置请查ARM公司的官方文档。
写在最后
毕业后我的老师曾对我说,女孩子不要一直搞底层,很难很苦很累,工作一两年转去做少儿编程讲师或者测试、产品经理,薪资不少相对也轻松一些。我感谢也理解他的好意,或许过个几年,我年纪渐长,也会走这样的路。
但是我想,每个岗位每个工作都有各自的苦、累、难,因为害怕这个的苦,而投身另一个,该吃的苦也一样不会少。我喜欢现在所做的事情,乐在其中。
所以,往前看,砥砺前行。
最后最后,分享两本ARM经典书籍:
ARM嵌入式系统开发:软件设计与优化
ARM体系结构与编程
链接:https://pan.baidu.com/s/1Rzv92naE1kIqTZvL49lnCQ
提取码:ojp1
如果被取消了请留言告诉我,我再更新~