2012-06-20 41 views
1

我正在写/(使用binutils)一段代码来手动拆卸thumb2(16位和32位)指令。 我面临一个区分真正的ARM指令和数据部分的问题。如何在拆卸过程中分离ARM指令和数据

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

请任何帮助。

感谢, VJ

回答

0

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

0

如果您还可以读取符号表,GCC将会留下符号$ a $ t $ d,指示您应该在哪个地址切换如何解释字节:Arm,Thumb和Data。

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