objdump: невозможно использовать поставленную машину MIPS

Я получаю следующую ошибку при разборке объекта с помощью приведенной ниже команды. Объектный файл создан для платформы MIPS.

$objdump -D -m MIPS myobjfile.o

Ошибка:

objdump: Can't use supplied machine MIPS

Фрагмент, который я прикрепляю для справки из objdump.c

  const bfd_arch_info_type *inf = bfd_scan_arch (machine);

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

Не могли бы вы помочь мне получить правильный код сборки?


person Ramesh K    schedule 19.02.2016    source источник
comment
Вы пытались objdump -i просмотреть список доступных архитектур? Вам вообще нужно указывать -m MIPS, поскольку .o уже является скомпилированным двоичным файлом? Может ли он определить архитектуру из объектного файла?   -  person e0k    schedule 19.02.2016
comment
objdump и остальные GNU binutils имеют параметры времени компиляции для выбора поддерживаемых архитектур. Если вы используете это на машине, которая не поддерживает MIPS, вполне возможно, что поддержка MIPS не была включена. В этом случае вам придется загрузить или скомпилировать новый набор бинарных файлов binutils, который это делает.   -  person Nate Eldredge    schedule 19.02.2016


Ответы (3)


С этим поздно, но это решило мою проблему, которая такая же, как и у вас, но для 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 здесь: Использование objdump для архитектуры ARM: дизассемблирование в ARM

person ste11ar    schedule 30.06.2020

Вы должны попробовать mips-linux-gnu-objdump. Я использую его как часть пакета binutils-mips-linux-gnu на моем Ubuntu 16.04 TLS.

Вы можете скачать его с помощью 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 для получения дополнительной информации.

person Shlomiza    schedule 19.07.2017

Попробуйте использовать заглавную м. $objdump -D -M MIPS myobjfile.o

[-M опции|--disassembler-options=опции]

person Gobbas    schedule 13.11.2016
comment
Что делает флаг -M? Пожалуйста, добавьте больше деталей в свой ответ, используя кнопку редактирования. - person Sebastian Lenartowicz; 13.11.2016
comment
Это ничего не улучшит, так как MIPS — это имя машины, а не опция дизассемблера. - person underscore_d; 11.07.2017