第七章 ARM 反汇编基础(六)(Thumb 汇编指令集)

Thumb 汇编指令集

  • 作为 ARM 指令集的一个子集,针对代码密度问题提出,具有 16 位的指令宽度
  • 与 ARM 指令的 32 位宽度相比,Thumb 指令集在保留 32 位宽度优势的同时大大节省了系统的存储空间
  • Thumb 不是一个完整的体系结构,包含的指令集十分有限,常与 ARM 指令搭配使用
  • 第一代 Thumb 指令集更新到 ARMv6T2 后,引入了第二代 Thumb 指令集,使用与 ARM 指令相同的 32 位指令,不仅性能与 32 位 ARM 指令相当,还保留了第一代指令的简洁特性
  • Thumb 指令和 ARM 指令除了长度不同,寄存器的使用也不同。Thumb 指令集中,R11 ~ R15 寄存器使用 FP、IP、SP、LR、PC 等命名,新的命名方式直接在名称上体现了寄存器的用途,使用上也有限制和差异(相较 ARM 指令)
  • 第一代 Thumb 指令的宽度只有 16 位,在地址读取范围上比 ARM 指令小很多,在进行一些大范围的指令跳转操作时只能切换到 ARM 模式,执行 ARM 指令

16 位 Thumb 指令编码

  • 16 位的 Thumb 指令称第一代 Thumb 指令
  • 格式:
    在这里插入图片描述
  • 可看到,第一代 Thumb 指令设计十分简洁,只用了一个 bits[15:10] 的 Opcode 域来确定指令及其分类
  • 第一代 Thumb 指令的所有指令及分类方法(Opcode 域中的 x 表示取值可为 0 或 1):
Opcode 指令或指令类别
00xxxx 移位、加、减、移动与比较指令
010000 数据处理指令
010001 特殊数据指令,分支与交换指令
01001x 常量池加载指令,LDR 指令
0101xx 加载/存储单个数据指令
011xxx 加载/存储单个数据指令
100xxx 加载/存储单个数据指令
10100x 相对于 PC 寄存器的加法指令,ADR 指令
10101x 相对于 SP 寄存器的加法指令,ADD 指令
1011xx 杂项指令
11000x 多寄存器存储指令,STM、STMIA、STMEA 指令
11001x 多寄存器加载指令,LDM、LDMIA、LDMFD 指令
1101xx 条件分支与中断指令
11100x 无条件分支指令,B 指令
  • 在用 Android NDK 编译代码时,若想默认生成 Thumb 指令而非 ARM 指令,可在编译代码时指定 -mthumb 参数:
    $CC app.c -fPIE -S -mthumb -march=armv5te
  • 在生成的汇编代码中,子程序会的开头会自动添加 .thumb_func 伪指令

16 位 Thumb 指令格式解析

  • 以十六进制值
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能,;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值