吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3333|回复: 22
收起左侧

[Android 原创] 安卓逆向:重温Thumb汇编细节

  [复制链接]
c_kongfe 发表于 2020-12-16 10:30
本帖最后由 c_kongfe 于 2020-12-16 10:35 编辑

主要内容
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直接访问的寄存器
1.png
3.Thumb指令集组成部分
2.png
•3.1.Thumb数据处理指令
3.png
•3.2.分支跳转指令
4.png
•3.3.寄存器加载存储指令(单寄存器、多寄存器)
5.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汇编指令。
6.png
•Thumb汇编的主要应用场景:逆向调试So文件的时候,编写ARM的shellcode代码的时候。
•以下是arm的shellcode的应用
7.png
7.png
6.png
5.png
4.png
3.png
2.png
1.png

免费评分

参与人数 4吾爱币 +10 热心值 +3 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
涂秋 + 1 热心回复!
zhuzhuxia111 + 1 + 1 我很赞同!
kentish + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| c_kongfe 发表于 2020-12-16 22:36
大王品美人 发表于 2020-12-16 10:41
赞。
同时,要是整理成一个文档出来,当是甚佳

优秀,后续的文章我在带上文档。
 楼主| c_kongfe 发表于 2020-12-16 22:39
大王品美人 发表于 2020-12-16 10:41
本帖最后由 大王品美人 于 2020-12-16 10:49 编辑

赞。
同时,要是整理成一个文档出来,当是甚佳

安卓逆向:重温Thumb汇编细节.zip

675.02 KB, 下载次数: 10, 下载积分: 吾爱币 -1 CB

整理成文档

kentish 发表于 2020-12-16 11:02
感谢楼主的分享,学习一下
mitchzh 发表于 2020-12-16 11:31
好资料,做个标记。
Disk4mat 发表于 2020-12-16 11:51
感谢楼主分享,收藏了
Heya 发表于 2020-12-16 12:26
学到了学到了
ykbest 发表于 2020-12-16 16:27
谢谢分享,抱歉我第一眼看成了汤不热
smith168668 发表于 2020-12-16 18:46
收藏学习了
zouludaifeng 发表于 2020-12-16 19:41
好资料,留着。。
涂秋 发表于 2020-12-16 22:24
温故而知新恰是我现在所需要的>_<
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 11:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表