objdump和ARM vs Thumb

时间:2011-08-25 16:43:46

标签: assembly arm objdump binutils thumb

我正在尝试使用gcc反汇编为ARM构建的对象。不幸的是,objdump试图猜测代码是否是ARM和Thumb,并且错了:它认为我的代码是Thumb,而它实际上是ARM。

我看到objdump有一个选项可以强制它将所有指令解释为Thumb(-Mforce-thumb),但它没有强制ARM模式!

这对我来说似乎是一个非常奇怪的遗漏,它严重妨碍了我完成工作的能力(我在嵌入式设备上,我唯一的调试方法是查看反汇编)。我尝试了各种方法,包括尝试告诉objdump使用不支持Thumb的ARM架构,但似乎没有任何工作。有什么想法吗?

(是的,我知道指令确实是 ARM ...)

2 个答案:

答案 0 :(得分:4)

arm-linux-gnueabi-objdump -marm -b binary -D为我做了诀窍。它虽然没有保留符号信息,所以它并不是你想要的,但是它为你提供了反汇编,这是一个开始。

答案 1 :(得分:-1)

这听起来像编译器/链接器或objdump中的错误。通常,如果符号是Thumb或ARM,则应正确标记符号并进行相应的反汇编。

那就是说,你可以尝试一些事情:

  1. 将文件解释为普通二进制文件(-b binary -D) - 这将禁用符号检查,并将整个文件反汇编为ARM。缺点:输出中有大量垃圾,没有好的地址。
  2. 使用IDA Pro。即使它猜错了,你总是可以覆盖它的决定。此外,它是一个更好的反汇编环境:)