10

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

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

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

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

4

2 回答 2

5

arm-linux-gnueabi-objdump -marm -b binary -D对我有用。虽然它不保留符号信息,所以它不是您正在寻找的东西,但它为您提供了反汇编,这是一个开始。

于 2013-03-06T14:29:12.850 回答
-1

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

也就是说,您可以尝试一些事情:

  1. 将文件解释为普通二进制文件 (-b binary -D) - 这将禁用符号检查并将整个文件反汇编为 ARM。缺点:输出中有很多垃圾,没有好的地址。
  2. 使用IDA 专业版。即使它猜错了,您也可以随时推翻它的决定。此外,它是一个更好的反汇编环境:)
于 2011-08-25T16:56:01.920 回答