ARM处理器和汇编语言程序结构

admin 2020年11月16日09:53:52评论10 views字数 2577阅读8分35秒阅读模式

ARM处理器是一个32位精简指令集处理器架构,广泛地使用在许多嵌入式系统设计中。它包含以下三个指令类型:ARM指令、Thumb指令和Thumb2指令,除了Thumb指令是16位,其他两种都是32位。

1
ARM处理器的优点

ARM处理器的优势不在于性能,而在于执行效率上。ARM处理器采用RISC流水线指令集,在完成综合性工作方面处于劣势,而在一些任务相对固定的应用场合,优势才能得以发挥。

除了执行效率高以外,ARM还拥有指令长度固定、低成本、低消耗、体积小的优点。

ARM结构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以ARM处理器的存储、内存等性能扩展难以进行(一般在产品设计时已经定好其内存及数据存储的容量),因此采用ARM结构的系统,一般不考虑扩展,基本奉行“够用就好”的原则。 

2
原生程序与arm汇编的关系

Android嵌入式智能操作系统基于Linux内核,嵌入式系统Linux是基于ARM平台。

Android的原生程序即可执行程序,前面的章节我们学习过如何编写可执行程序,编写过程中,在两个.mk文件里进行相关配置,使得所写的程序能够在Android平台下运行起来,所依赖的也是ARM平台。

由此可见,原生程序运行基于Linux内核,并且处理器基于ARM。

3
ARM汇编的规范

在ARM汇编中,所有标号都必须在一行顶格书写,且后面不需要添加高级语言所用的冒号,而所有的指令都不能顶格书写。ARM汇编器对标识符的大小写敏感,书写标号和指令时,字母大小写必须一致。在ARM汇编程序中,一条ARM指令、伪指令或寄存器名,可以全部为大写字母,也可以全部为小写字母,但不能大小写混合编写使用。注释使用“;”(分号),注释内容由“;”(分号)开始到此行结束,注释可以在一行的顶格书写。

标准的ARM指令格式为:[标号]  <指令|条件|S>  <操作数>[;注释]

源程序中允许有空行,适当的插入空行可以提高源代码的可读性。如果单行太长,可以使用字符“”将其分行,“”后不能有任何字符,包括空格和制表符等等。对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。

汇编指令正确的例子和错误的例子如下:

正确的例子:

ARM处理器和汇编语言程序结构

错误的例子:

ARM处理器和汇编语言程序结构

4
符号

ARM 汇编中,符号可以代表地址、变量、数字常量,当符号代表地址时又称为标号,符号就是变量的变量名、数字常量的名称、标号,符号的命名规则如下:

1.符号由大小写字母、数字以及下划线组成;

2.除局部标号以数字开头外,其它的符号不能以数字开头;

3.符号区分大小写,且所有字符都是有意义的;

4.符号在其作用域范围内是唯一的;

5.符号不能与系统内部或系统预定义的符号同名;

6.符号不与指令助记符、伪指令同名。

 

5
常量

常量有数字常量、字符常量、布尔常量三种。

1.数字常量有三种表示方式:

十进制数,如:12,5,876,0;

十六进制数,如:0x4387,0xFF0, 0x1;

n 进制数,用n-XXX 表示,其中n 为2~9,XXX 为具体的数。如2-010111,8-4363156等。

2.字符常量

字符常量由一对单引号及中间字符串表示,标准C 语言中的转义符也可使用。如果需要包含双引号或$,必须使用""""和$$代替。

例如:Hello SETS "Hello World!"

Errorl SETS "The parameter ""VFH""error$$2"

3.布尔常量

布尔常量的逻辑真为{TRUE},逻辑假为{FALSE}。

例如:testno SETS {FALSE}

 

6
指令的基本格式及说明

ARM是指令的基本格式为:

<opcode> {<cond>} {s} <Rd>, <Rn> {,<operand2>}

其中<>号内的项是必须的,{}号内的项是可选的。

各项说明如下:

opcode: 指令助记符

cond: 执行条件

s: 是否影响CPSR寄存器的值

Rd: 目标寄存器

Rn: 第一个操作数的寄存器

operand2: 第二个操作数

条件码“cond”的使用可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率。所有的ARM指令都可以条件执行,而THUMB指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。

 

7
ARM指令条件域

ARM指令一般分为5个域:

第一个域是跟条件执行相关的cond,即条件码域;

第二个域是指令代码域,即opceode;

第三个域是地址基址Rn,即第一个操作数,为寄存器

第四个域是目标或源寄存器Rd;

第五个域是地址偏移或操作寄存器,操作数区,即Op2;

上述指令的5个域为:0000 0010 1001 0001 0000 0000 0000 1000

条件的指令执行中,cond有4位,共16种组合,跟CPSR配合决定指令是否执行,如下表所示。

例如:指令ADDEQ R4,R3,#1,带EQ标志位,只有CPSR当中的Z位置才执行该指令。

其中,条件后缀和S后缀的关系如下:

1.如果既有条件后缀又有S后缀,则书写时S排在后面,如ADDEQS R1,R0,R2该指令在Z=1时执行,将R0+R2的值放入R1,同时刷新条件标志位。

2.条件后缀是要测试条件标志位,而S后缀是要刷新条件标志位。

3.条件后缀要测试的是执行前的标志位,而S后缀是依据指令的结果改变条件标志。

ARM处理器和汇编语言程序结构

 

8
小结

 

通过本次的分享,了解了ARM处理器拥有执行效率高,低消耗、可嵌入式开发等优点,同时还知道了ARM处理器在任务相对固定时,才能发挥出最大优势。还分享了Android与ARM的关系:Android是基于Linux内核,采用的是ARM处理器。

以及我们了解了在ARM汇编的规范、指令条件域以及ARM指令的格式:<opcode> {<cond>} {s} <Rd>, <Rn> {,<operand2>},其中<>号内的项是必须的,{}号内的项是可选的。

 

 

文章推荐 通过Java反射调用方法反射获取Java层字段的值深入理解 JNI 动态分析JNI 静态注册精细化讲解Java 和 c/c++之间是利用什么工具进行通信的?程序的编译与执行过程

小福利

最后
推荐一个免费领取各种逆向工具包的公众号:

易锦课堂

不仅高级工具很齐全

你回复咨询还会及时解答你在逆向学习工作上的疑难杂症

长按下方二维码关注免费领取专属工具包吧

还有更多惊喜等着你哦

ARM处理器和汇编语言程序结构

 

 

原文始发于微信公众号(映山红coin安全团队):ARM处理器和汇编语言程序结构

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年11月16日09:53:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ARM处理器和汇编语言程序结构https://cn-sec.com/archives/1056752.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息