Использование 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