как использовать aarch64-linux-gnu-objdump для дизассемблирования инструкций режима V7 (A32, T32)

Я использую aarch64-linux-gnu-objdump для дизассемблирования части программы для ARM v8. Он хорошо работает для 64-битных инструкций V8, но не работает, когда режим изменяется на набор инструкций V7 (A32) - код начинается как набор инструкций V8, переключается на A32 (состояние выполнения AArch32), а затем на T32 - набор инструкций большого пальца. как разобрать инструкции A32 и T32? Нужно ли мне разбивать код на части при переключении режима, чтобы у меня были отдельные блоки режима инструкций?

любая помощь будет оценена Weselfox


person WeaselFox    schedule 04.02.2014    source источник


Ответы (1)


В отличие от A32 («ARM») и T32 («Thumb») в 32-битной инструментальной цепочке, между 32-битной и 64-битной архитектурами ARM нет поддержки перекрестного набора команд. A64 действительно представляет собой совершенно новый набор инструкций.

Поскольку межсетевого взаимодействия между 64-битным и 32-битным состояниями не существует (вы можете изменить «ширину» только при возникновении исключения), это не проблема при нормальном использовании. Но при создании автономного изображения, содержащего код для нескольких уровней исключений, я могу представить, что это будет немного утомительно.

Вам необходимо использовать aarch64-linux-gnu- для частей A64 и arm-linux-gnueabihf- для частей A32 / T32.

person unixsmurf    schedule 04.02.2014
comment
Понятно. Я подумал, поскольку инструкции по ширине регистра и ползунку являются частью 64-битной архитектуры arm v8, для них будет возможность дизассемблирования в цепочке инструментов linaro, но я постараюсь пойти по пути, который вы предлагаете. Это автономный образ с разными уровнями исключений, кстати, спасибо. - person WeaselFox; 05.02.2014