宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

前言

工作已有一段时间。反汇编的任务也基本完成,告一段落。前两天逆向了一个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) 三级指令流水线
多图预警!!
ARM汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
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值半字对齐

ARM汇编基础回顾—-ARM基本概念-风君子博客
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汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
ARM汇编基础回顾—-ARM基本概念-风君子博客
2.4 异常与异常向量表

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
如果被取消了请留言告诉我,我再更新~