我是靠谱客的博主 饱满钥匙,最近开发中收集的这篇文章主要介绍android汇编参数传递,安卓逆向:重温Thumb汇编指令细节,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

主要内容

1.Thumb指令集详解

2.Thumb直接访问的寄存器

3.Thumb指令集组成部分详解

4.Thumb和arm状态却换

5.Thumb的常见应用场景

1.Thumb指令集详解

ARM处理器支持两种指令集:ARM指令集和Thumb指令集。

ARM指令集指令长度为32位,Thumb指令集指令长度为16位。在16位外部数据总线宽度下,ARM处理器上使用Thumb指令的性能要比使用ARM指令的性能更好。

存在Thumb指令的意义:兼容数据总线宽度为16为的应用系统。

2.Thumb直接访问的寄存器

d6f703bcd742385e37b439089fb4baaa.png

3.Thumb指令集组成部分

848acd9702b4a3032acbd0780052a03a.png

3.1.Thumb数据处理指令

38870000000706b467154c0662afafeb.png

3.2.分支跳转指令

cd4fbf3981b61c1cc11db16285e14a85.png

3.3.寄存器加载存储指令(单寄存器、多寄存器)

cc565700cd6f65f323019d61a655398b.png

3.4.杂项指令

SWI:软中断指令

指令格式如下:

SWI immed_8

其中:immed_8 8 位立即数,值为0~255 之间的整数。

SWI 指令举例如下:

SWI 1 ;软中断,中断立即数为0

SWI 0x55 ;软中断,中断立即数为0x55

使用SWI 指令时,通常使用以下两种方法进行传递参数,SWI 异常中断处理程序可以提供相关的服务,这两种方法均是用户软件协定。SWI 异常中断处理程序要通过读取引起软中断的SWI 指令。以取得8 位立即数。

(A)指令中8 位的立即数指定了用户请求的服务类型,参数通过用寄存器传递。

MOV R0,#34 ;设置子功能号为34

SWI 18 ;调用18 号软中断

(B)指令中的8 位立即数被忽略,用户请求的服务类型由寄存器R0 的值决定,参数通过其它的通用寄存器传递。

MOV R0,#18 ;调用18 号软中断

MOV R1,#34 ;设置子功能号为34

SWI 0

4.Thumb和ARM状态却换

•ARM/Thumb之间的状态切换是通过一条专用的转移交换指令BX来实现的

汇编格式: BX{} Rm

功能: BX 指令跳转到指令中所指定的目标地址,并实现状态的切换。 Rm 是一个表达目标地址的寄存器。当Rm 中的最低位Rm[0] 为 1 时,强制程序从ARM 指令状态跳到Thumb 指令状态;当 Rm 中的最低位Rm[0]为0 时,强制程序从Thumb 指令状态跳到ARM 指令状态。

BX 指令示例

CODE32 ;ARM 程序段,32 位编码

arm1 ADR R0,thumb1+1 ;把thumb1 所在地址赋给R0 ,末位R0[0] 置1 ,要跳转THUMB 指令集

MOV LR,PC ;设置返回地址

BX R0 ;跳转

ADD R1,R2,#2 ;返回地址处,第4 条指令

CODE16 ;THUMB 程序段, 16 位编码

thumb1 ADD R1,R3,#1 ;THUMB 程序

BX LR ;跳转到返回地址处,执行第4 条指令

以上示例分析:说明了带状态切换的子程序调用和返回结构,ARM 程序段执行MOV LR,PC 语句时将返回地址保存到了LR 寄存器中。 执行到BX 语句时 ,PC 指向下一个要执行的语句,此时PC(R15) 中的值为下一个语句ADD 指令所在的地址,并根据R0 中的bit[0] 实现了由ARM 状态切换到Thumb 状态。 从而调用Thumb 子程序,子程序调用完后使用BX LR 指令,从而实现了子程序调用的返回并切换到ARM 状态。

5.Thumb指令一些应用情况

•在ida中识别Thumb指令和ARM指令的方法

•CODE32表示的采用ARM汇编指令,CODE16表示采用的是THUMB汇编指令。

801d860581a19af05f75fd52d5cedc2e.png

•Thumb汇编的主要应用场景:逆向调试So文件的时候,编写ARM的shellcode代码的时候。

•以下是arm的shellcode的应用

13228131ec3f16933350f43516705da5.png

最后

以上就是饱满钥匙为你收集整理的android汇编参数传递,安卓逆向:重温Thumb汇编指令细节的全部内容,希望文章能够帮你解决android汇编参数传递,安卓逆向:重温Thumb汇编指令细节所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部