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