|
|||||||
Как посмотреть дизассеблерный код для бинарника под ARM-архитектуру
Время создания: 04.05.2022 22:18
Текстовые метки: linux, gcc, компиляция, кросскомпиляция, дизассемблер, код, arm, stm32, objdump
Раздел: Компьютер - Аппаратное обеспечение - Микроконтроллеры ARM
Запись: xintrea/mytetra_syncro/master/base/165169191374jbgdxf5n/text.html на raw.github.com
|
|||||||
|
|||||||
При разработке ПО под микроконтроллеры иногда возникает необходимость посмотреть код, который генерируется компилятором. В ОС Linux среда разработки обычно компилирует код для микроконтроллера через специальную версию компилятора gcc, (пакет gcc-arm-none-eabi, исполняемый файл компилятора arm-none-eabi-gcc) который создает бинарник elf-формата с кодами для ARM-микропроцессора. Затем этот бинарник преобразуется в bin-файл и заливается в микроконтроллер. Таким образом, чтобы посмотреть дизассемблерный код, надо воспользоваться специальной версией утилиты objdump, которая создана для ARM-кода, и которую нужно натравить на elf-файл с ARM-кодом. Эта версия утилиты находится в пакете binutils-arm-none-eabi, и называется: arm-none-eabi-objdump Команда для просмотра дизассемблированного листинга из elf-файла выглядит так: arm-none-eabi-objdump -D -m arm <имя_файла.elf> В полученном листинге будут видны различные вспомогательные секции кода, и код каждой функции, включая функцию main(): 080002c8 <main>: 80002c8: b538 push {r3, r4, r5, lr} 80002ca: 4c10 ldr r4, [pc, #64] ; (800030c <main+0x44>) 80002cc: f7ff ff8a bl 80001e4 <clockInit> 80002d0: f7ff ffdc bl 800028c <portClockInit> 80002d4: 6822 ldr r2, [r4, #0] 80002d6: f022 020f bic.w r2, r2, #15 80002da: 6022 str r2, [r4, #0] 80002dc: 6822 ldr r2, [r4, #0] 80002de: f042 0203 orr.w r2, r2, #3 80002e2: 6022 str r2, [r4, #0] ... В первом столбце выводятся адреса. Это реальные адреса, по которым будет располагаться код внутри микроконтроллера. Во втором-третьем столбце выводятся опкоды машинных команд (оно же машинные инструкции, машинный код). В следующем столбце выводятся мнемотика команд (оно же - язык Ассемблера). * * * В принципе, утилита objdump представляет из себя неинтерактивный дизассемблер командной строки. Это одна из самых первых утилит, которая должна быть в арсенале embedded-разработчика. Если elf-файл не стрипнут и имеет таблицу именований символов, то эта утилита покажет максимум из того, что есть в elf-файле со всеми дополнительными секциями. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|