【问题标题】:objdump: Can't use supplied machine MIPSobjdump:不能使用提供的机器 MIPS
【发布时间】:2016-02-19 06:02:07
【问题描述】:

使用以下命令拆卸对象时出现以下错误。为 MIPS 平台生成目标文件。

$objdump -D -m MIPS myobjfile.o

错误:

objdump: Can't use supplied machine MIPS

我附上的 sn-p 供 objdump.c 参考

  const bfd_arch_info_type *inf = bfd_scan_arch (machine);

  if (inf == NULL)
      fatal (_("can't use supplied machine %s"), machine);

你能帮我得到正确的汇编代码吗?

【问题讨论】:

  • 您尝试objdump -i 查看可用架构列表了吗?你甚至需要指定-m MIPS,因为.o 已经是一个已编译的二进制文件?它可以从目标文件中找出架构吗?
  • objdump 和 GNU binutils 的其余部分具有编译时选项来选择支持的架构。如果您在不是 MIPS 的机器上运行它,则很可能不包括 MIPS 支持。在这种情况下,您必须下载或编译一组新的 binutils 二进制文件。

标签: c objdump object-files


【解决方案1】:

这晚了,但这解决了我的问题,这与你的问题相同,但适用于 ARM64(aarch64)。

如果您是从源代码构建,则可以通过将 --enable-targets=all 传递给 ./configure 来启用所有目标架构:

git clone git://sourceware.org/git/binutils-gdb.git 
cd binutils-gdb
./configure --enable-targets=all
make

这使得 objdump 可以与所有架构一起工作,包括 MIPS

这是来自@soulseekah 的帖子:Using objdump for ARM architecture: Disassembling to ARM

【讨论】:

    【解决方案2】:

    你应该试试mips-linux-gnu-objdump。 我在我的 ubuntu 16.04 TLS 上将它用作 binutils-mips-linux-gnu 包的一部分。

    您可以使用 apt-get 下载它:

    $sudo apt-get install binutils-mips-linux-gnu
    

    然后尝试运行:

    $mips-linux-gnu-objdump -b binary -m mips -D myobjfile.o
    

    -b binary 代表二进制文件格式,它是可选的。

    您应该访问https://linux.die.net/man/1/x86_64-linux-gnu-objdump 了解更多信息。

    【讨论】:

      【解决方案3】:

      尝试使用大写 m。 $objdump -D -M MIPS myobjfile.o

      [-M 选项|--disassembler-options=options]

      【讨论】:

      • -M 标志有什么作用?请使用“编辑”按钮为您的答案添加更多细节。
      • 这不会改善任何东西,因为MIPS 是机器名称,而不是反汇编选项。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多