objdump和ARM vs Thumb

Dav*_*ven 8 assembly arm objdump binutils thumb

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

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

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

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

Jav*_*ino 5

arm-linux-gnueabi-objdump -marm -b binary -D对我有用。虽然它不保留符号信息,因此它不是您要查找的内容,但它为您提供了反汇编,这是一个开始。


Igo*_*sky -1

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

也就是说,您可以尝试以下几件事:

  1. 将文件解释为纯二进制文件 (-b 二进制 -D) - 这将禁用符号检查并将整个文件反汇编为 ARM。缺点:输出中有大量垃圾,没有好的地址。
  2. 使用IDA Pro。即使它猜测错误,您也可以随时推翻它的决定。而且,这是一个更好的反汇编环境:)