Окончательные изображения, созданные разработчиками, содержат как файл bin, так и файл ELF расширенного формата загрузчика, в чем разница между ними, особенно полезность файла ELF.
Окончательные изображения, созданные разработчиками, содержат как файл bin, так и файл ELF расширенного формата загрузчика, в чем разница между ними, особенно полезность файла ELF.
Ответы:
Файл Bin - это чистый двоичный файл без исправлений или перемещений памяти, более чем вероятно, что у него есть явные инструкции для загрузки по определенному адресу памяти. В то время как....
Файлы ELF представляют собой исполняемый связываемый формат, который состоит из поиска символов и перемещаемой таблицы, то есть они могут быть загружены ядром по любому адресу памяти, и автоматически все используемые символы настраиваются на смещение от того адреса памяти, где он был загружен в. Обычно файлы ELF имеют несколько разделов, таких как 'data', 'text', 'bss', и это лишь некоторые из них ... именно в тех разделах, где среда выполнения может вычислить, где настроить ссылки на память символа. динамически во время выполнения.
Файл bin - это просто биты и байты, которые входят в ROM или конкретный адрес, с которого вы будете запускать программу. Вы можете взять эти данные и загрузить их напрямую как есть, но вам нужно знать, что такое базовый адрес, поскольку его обычно там нет.
Файл elf содержит информацию о бункере, но он окружен множеством другой информации, возможной отладочной информацией, символами, которые могут отличать код от данных в двоичном файле. Позволяет использовать более одного фрагмента двоичных данных (когда вы сбрасываете один из них в корзину, вы получаете один большой файл корзины с данными для заполнения, чтобы добавить его к следующему блоку). Сообщает вам, сколько у вас двоичных файлов и сколько там данных bss, которые нужно инициализировать нулями (у инструментов GNU есть проблемы с правильным созданием файлов bin).
Формат файла elf является стандартным, arm публикует его улучшения / вариации по стандарту. Я рекомендую всем написать программу синтаксического анализа elf, чтобы понять, что там есть, не беспокойтесь о библиотеке, довольно просто просто использовать информацию и структуры в спецификации. Помогает преодолеть проблемы GNU в целом при создании файлов .bin, а также отладке сценариев компоновщика и других вещей, которые могут помочь испортить ваш bin или elf вывод.
некоторые ресурсы:
Формат ELF обычно является результатом компиляции по умолчанию. если вы используете цепочки инструментов GNU, вы можете перевести их в двоичный формат с помощью objcopy, например:
arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]
или с помощью утилиты fromELF (хотя она встроена в большинство IDE, таких как ADS):
fromelf -bin -o [binary-output-file] [elf-input-file]
Я просто хочу исправить здесь один момент. Файл ELF создается компоновщиком, а не компилятором.
Миссия компилятора заканчивается после создания объектных файлов (* .o) из файлов исходного кода. Компоновщик связывает все файлы .o вместе и создает ELF.
ld
документации : Обычно последний шаг в компиляции программы - это запуск ld.
NOP
без-f
(или-fbin
), он собирает в один байт0x90
, вместо 400 байт ELF контейнера с-felf32
. Так что только необработанный код, без метаданных контейнера. NASM утверждает, что он в основном используется для файлов MS-DOS .COM и .SYS .section
директивы в основном игнорируются и только генерируют выравнивание.