objdump и ARM против большого пальца

Я пытаюсь разобрать объект, созданный для ARM, с помощью gcc. К сожалению, objdump пытается угадать, является ли код ARM и Thumb, и ошибается: он думает, что мой код - Thumb, когда на самом деле это ARM.

Я вижу, что objdump имеет возможность заставить его интерпретировать все инструкции как Thumb (-Mforce-thumb), но в нем нет режима ARM!

Это кажется мне очень странным упущением, и это серьезно подрывает мою способность выполнять работу (я на встроенном устройстве, и мой единственный способ отладки - посмотреть на разборку). Я пробовал разные подходы, в том числе пытался сказать objdump использовать архитектуру ARM, которая не поддерживает Thumb, но, похоже, ничего не работает. Есть идеи?

(И да, я знаю, что инструкции на самом деле ARM...)

2 ответа

arm-linux-gnueabi-objdump -marm -b binary -D делает трюк для меня. Он не сохраняет информацию о символах, поэтому это не совсем то, что вы ищете, но он дает вам разбирать, что является началом.

Это звучит как ошибка в компиляторе / компоновщике или в objdump. Обычно символы должны быть помечены правильно, если это большой палец или ARM и соответственно разобраны.

Тем не менее, есть несколько вещей, которые вы можете попробовать:

  1. интерпретировать файл как обычный двоичный файл (-b binary -D) - это отключит проверку символов и разберет весь файл как ARM. Недостаток: много мусора на выходе, нет хороших адресов.
  2. использовать IDA Pro. Даже если он угадает неправильно, вы всегда можете отменить его решение. Кроме того, это намного более приятная среда для разборки:)
Другие вопросы по тегам