如何在拆卸期间分离ARM指令和数据

时间:2012-06-20 04:41:31

标签: arm thumb objdump

我正在编写/(使用binutils)一个代码来手动拆卸thumb2(16位和32位)指令。 我面临着区分真正的ARM指令和DATA部分的问题。

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

请帮助。

谢谢, VJ

2 个答案:

答案 0 :(得分:0)

手臂指令始终是字对齐的。拇指始终对齐。 thumb2是可变字长。并且你不能像固定字长一样反汇编可变字长。要反汇编可变字长指令集,您不能简单地在对齐地址上遍历内存并进行反汇编。在某种形式下,您必须按执行顺序遍历数据以查找每条指令的起始地址,然后从该列表中反汇编。

答案 1 :(得分:0)

如果你还能够读取符号表,GCC将留下符号$ a $ t $ d,表示你应该在哪个地址切换字节:Arm,Thumb和Data。

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