Использование objdump для архитектуры ARM: разборка в ARM

У меня есть объектный файл, и я пытаюсь разобрать его. Когда я использую:

objdump -d example.o

Я получаю сборку в коде в формате файла elf64-x86-64,

Я пытаюсь разобрать это на ARM, как мне это сделать?

6 ответов

Если вы хотите разобрать код ARM, вам лучше иметь цепочку инструментов ARM, вот что я получил:

http://bb.osmocom.org/trac/wiki/toolchain

После этого вы можете использовать arm-elf-objdump вместо objdump. Команда, которую я использовал

arm-elf-objdump -D -b binary -marm binaryfile.dat

Если вы посмотрите страницу руководства, вы увидите, что "-b" сопровождается типом файла. Извините, я не знаю, как сказать -b вы хотите проанализировать файл.o. "-marm" скажет, что процессор ARM.

Надеюсь, это поможет вам.

Вы должны сначала скомпилировать файл для руки, используя arm-linux-gnueabi-gcc, Вы используете родной objdump. Для разборки файла объекта руки используйтеarm-linux-gnueabi-objdump, Надеюсь это поможет

Компилировать binutils с правильными целями, чтобы получить двоичный файл objdump binutils, который знает, как разобрать ARM.

http://www.gnu.org/software/binutils/

./configure --enable-targets=all например.

Выберите свои цели, сделайте и используйте новые objdump двоичный файл, который осведомлен о вашей цели. Увидеть binutils/README файл для получения дополнительной информации о таргетинге.

objdump -D t3c # stock binary
objdump: t3c: File format not recognized

против

./../../binutils-2.22/binutils/objdump -D t3c # latest compiled from source with all targets
In archive t3c:

t3c:arm:     file format mach-o-le


Disassembly of section .text:

00002d94 <start>:
    2d94:   e59d0000    ldr r0, [sp]
...

Установите ELDK и используйте arm-linux-objdump. Вы пытаетесь разобрать инструкции ARM, используя программу, которая знает только x86.

У меня была эта проблема на macOS (arm64). По какой-то причине configure обнаружилobjdumpиз Xcode SDK, и я не занимаюсь кросс-компиляцией, поэтому Xcode также должен содержать двоичные файлы Intel.

Все, что мне нужно было сделать, этоbrew install binutils- задача решена.

Я использую Debian 12. Поэтому я устанавливаюarm-trusted-firmware-toolsэто Debianarmинструмент для разборки:

      sudo apt install arm-trusted-firmware-tools

После этого я использую команду, аналогичную приведенной выше (qiuhan1989), и сохраняю файл как .asm.

      arm-none-eabi-objdump -D -b binary -marm binary.elf > binary.elf.asm
Другие вопросы по тегам