В чем разница между файлами ELF и файлами bin?


Конечные изображения, созданные комплиерами, содержат как файл bin ,так и расширенный загрузчик формата ELf file , в чем разница между ними, особенно утилита ELF file.

3 75

3 ответа:

Файл Bin-это чистый двоичный файл без каких-либо исправлений памяти или перемещений, скорее всего, он имеет явные инструкции для загрузки по определенному адресу памяти. В то время как....

Файлы ELF являются исполняемым Линкабельным форматом, который состоит из поиска символов и перемещаемой таблицы, то есть он может быть загружен ядром по любому адресу памяти и автоматически, все используемые символы, настраиваются на смещение от того адреса памяти, в который он был загружен. Обычно файлы ELF есть несколько разделов, таких как "данные", "текст", "bss", чтобы назвать, но a few...it находится в тех разделах, где во время выполнения можно вычислить, где динамически корректировать ссылки памяти символа во время выполнения.

Файл bin - это просто биты и байты, которые входят в ПЗУ или определенный адрес, с которого вы будете запускать программу. Вы можете взять эти данные и загрузить их непосредственно как есть, вам нужно знать, что такое базовый адрес, хотя, как правило, его там нет.

Файл elf содержит информацию bin, но он окружен множеством другой информации, возможной отладочной информацией, символами, которые могут отличать код от данных внутри двоичного файла. Позволяет использовать более одного фрагмента двоичных данных (когда вы сбрасываете один из них в корзину, вы получаете один большой файл с данными заполнения, чтобы поместить его в следующий блок). Сообщает вам, сколько у вас двоичных файлов и сколько данных bss, которые хотят быть инициализированы в нули (инструменты gnu имеют проблемы с правильным созданием файлов bin).

Формат файла elf является стандартным, arm публикует свои усовершенствования / варианты стандарта. Я рекомендую всем написать программу разбора elf, чтобы понять, что там есть, не утруждайте себя библиотекой, это довольно просто чтобы просто использовать информацию и структуры в спецификации. Помогает преодолеть проблемы gnu в общем создании .файлы bin, а также отладочные скрипты компоновщика и другие вещи, которые могут помочь испортить ваш вывод bin или elf.

Некоторые ресурсы:

  1. эльф для руки architecture
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. эльф из wiki
    http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

Формат ELF обычно является результатом компиляции по умолчанию. если вы используете цепочки инструментов GNU, вы можете перевести их в двоичный формат с помощью objcopy, например:

  arm-elf-objcopy -O binary [elf-input-file] [binary-output-file]

Или с помощью утилиты fromELF (встроенной в большинство IDE, таких как Хотя объявления):

 fromelf -bin -o [binary-output-file] [elf-input-file]