0

我非常关心 GNU 的成功,并希望得到一些关于如何处理 ARM 的 objdump 中的潜在错误的反馈......

我正在检查“objdump -D --target=binary -m arm7tdmi”的输出,并看到古代 ARM7TDMI 内核上不存在的指令。

(我正在查看一个随机位文件并将其视为原始二进制文件而不是 ELF 文件。)

例如,mrcc、blx 和 ldc2 只出现在 ARMv5 或更高版本中,但我在上面的命令行开关的输出中看到它们。

(我看到与“-m armv4t”相同的问题。)

我正在使用来自 Ubuntu 9.04 的 2.19.1-multiarch 版本。

这是一个真正的错误还是我必须使用不同的开关?

真挚地,

克里斯

4

2 回答 2

2

对于其他一些架构(非ARM),我也被这些东西所吸引。Objdump 不知道您是在反汇编代码还是数据部分,并且会尽力反汇编它 - 包括常量和其他数据部分。

于 2009-06-16T01:54:34.810 回答
2

好吧,这并不是一个错误,因为如果您正在查看旧的二进制文件,您不会期望在指令流中看到这样的指令,因此它们不会出现。

因此它仍然会正确显示正确的代码。

如果您强制 objdump 反汇编程序反汇编不包含代码但包含其他类型数据的内存区域(例如,使用标志 -D),那么您可能会预期以下异常结果:

  • 不是指令的数据显示为在该架构上有效的指令
  • 不是指令的数据将显示为在该架构上无效的指令。
  • 不是指令的数据显示为非法指令(哦不!)

我发现很难对这些中的任何一个感到兴奋,因为您确实指定了-D,这就是它的作用。

如果您可以指出一个正确且有效的指令流由于重新定义具有不同效果的指令编码而被不同解码的示例,那么我认为这将是一个真正的错误。

你的例子是否给你的工作带来了一些问题(包括不便)?

于 2009-06-15T22:52:26.353 回答