我正在编写/(使用binutils)一个代码来手动拆卸thumb2(16位和32位)指令。 我面临着区分真正的ARM指令和DATA部分的问题。
最大的问题是指令不是字对齐的。 因此,当我尝试读取32位指令时,很多时候它实际上与下一条指令重叠。
请帮助。
谢谢, VJ
答案 0 :(得分:0)
手臂指令始终是字对齐的。拇指始终对齐。 thumb2是可变字长。并且你不能像固定字长一样反汇编可变字长。要反汇编可变字长指令集,您不能简单地在对齐地址上遍历内存并进行反汇编。在某种形式下,您必须按执行顺序遍历数据以查找每条指令的起始地址,然后从该列表中反汇编。
答案 1 :(得分:0)
如果你还能够读取符号表,GCC将留下符号$ a $ t $ d,表示你应该在哪个地址切换字节:Arm,Thumb和Data。
例如,这是objdump知道如何显示文字池的内容,但不会尝试将它们映射回指令,尽管在.text部分中的相邻函数之间存在..