android汇编代码,安卓逆向——ARM汇编语言程序结构

汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。目前在嵌入式开发、单片机开发、系统软件设计、某些快速处理、位处理、访问硬件设备等高效程序的设计方面有较多应用。

学习安卓逆向,最基础的就是要懂计算机语言,要看得懂程序结构,ARM是其中最为重要的知识点之一,我们今天就来简单谈谈ARM汇编语言程序结构。

一.ARM汇编规范

1.在ARM汇编中,所有的符号都必须在一行书写,在后面不用添加我们高级语言所用的分号。

2.ARM汇编器对标识符的大小写敏感,这个一定要注意,书写符号以及指令是字母大小写一定要一致。

3.在ARM汇编程序中,一条ARM指令,伪指令。寄存器名可以全部写为大写字母,也可以全部为小写字母,但是不能大小写混合编写使用。

4.注释使用(冒号),注释内容由(冒号)开始到执行结束。

[符号]     [;注释]

源程序中可以有空行,适量的插入空行可以提高源代码的可读性。

如果单行太长,可以使用字符”\”将其分行,”\”后不能有任何字符,包括空格和制表符等。我们来看两个例子就明白了。

正确的:

139fcd3edf9b

错误的:

139fcd3edf9b

二.ARM中的符号

在ARM 汇编中,符号可以代表地址、变量、数字常量。

当符号代表地址时又称为标号,符号就是变量的变量名、数字常量的名称、标

号,符号的命名规则如下:

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

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

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

d. 符号在其作用域范围你必须是唯一的;

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

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

三.常量

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}

四.ARM指令的格式

指令的基本格式及说明:

ARM是三地址指令格式,指令的基本格式为:

{}{s},{,}

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

各项说明如下:

opcode: 指令助记符

cond: 执行条件

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

Rd: 目标寄存器

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

operand2: 第二个操作数

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

五.指令的条件域

eq:相等/z=1;

ne:不相等/标志z=0;

hi:无符号数大于/c=1,z=0;

cs/hs:无符号数大于或等于/c=1;

cc/lo:无符号数小于/c=0;

ls:无符号数小于或等于/c=0,z=1;

gt:有符号数大于/z=0,n=v;ge:有符号数大于或等于/n=v;

lt:有符号数小于/n!=v;le:有符号数小于或等于/z=1,n!=v;

mi:负数/n=1;pl:整数或0/n=0;

vs:溢出/v=1;vc:没有溢出

139fcd3edf9b

总结:

ARM汇编的特点:汇编语言,又称为助记符语言。它的大多数指令都是单周期指令;大多数指令都是可以有条件执行的。学好语言只是是学好安卓逆向的基础,一定要脚踏实地,先打好基础再去深入学习。r如果有什么问题或者建议欢迎在评论区留言交流或者私聊沟通哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值