1

我正在编写/(使用 binutils)一段代码来手动反汇编 thumb2(16 位和 32 位)指令。我在区分真正的 ARM 指令和 DATA 部分时遇到了问题。

最大的问题是指令不是字对齐的。所以当我尝试阅读 32 位指令时,很多时候它实际上与下一条指令重叠。

请提供任何帮助。

谢谢,VJ

4

2 回答 2

0

如果您还能够读取符号表,GCC 将留下符号 $a $t $d 指示您应该在哪个地址切换您解释字节的方式:分别是 Arm、Thumb 和 Data。

例如,这就是 objdump 如何知道显示文字池的内容,但不尝试将它们映射回指令,尽管 a .text 部分中的相邻函数之间存在。

于 2012-11-21T16:30:58.470 回答
0

arm 指令总是字对齐的。拇指总是对齐的。thumb2 是可变字长。并且您不能以与固定字长相同的方式拆卸可变字长。要反汇编可变字长指令集,您不能简单地遍历对齐地址上的内存并反汇编。在某种形式下,您必须按执行顺序遍历数据以找到每条指令的起始地址,然后从该列表中反汇编。

于 2012-06-20T15:47:35.530 回答