Каково различие между файлами ELF и файлами мусорного ведра?

Заключительные изображения, произведенные компиляторами, содержат и файл мусорного ведра и расширенный файл ЭЛЬФА формата загрузчика, каково различие между этими двумя, особенно утилита файла ELF.

89
задан Vadim Kotov 13 November 2017 в 13:52
поделиться

3 ответа

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

ELF файлы - это Executable Linkable Format, который состоит из таблицы поиска и перемещения символов, то есть, он может быть загружен по любому адресу памяти ядром и автоматически, все используемые символы, подгоняются под смещение от того адреса памяти, в который он был загружен. Обычно файлы ELF имеют несколько секций, таких как 'data', 'text', 'bss', и т.д. ... именно в этих секциях время выполнения может вычислить, где динамически корректировать ссылки на память символа во время выполнения.

84
ответ дан 24 November 2019 в 07:19
поделиться

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

  1. ELF для архитектуры ARM
    http://infocenter.arm.com/help/topic/com.arm.doc.ihi0044d/IHI0044D_aaelf.pdf
  2. ELF из вики
    ] 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, таких как ADS):

 fromelf -bin -o [binary-output-file] [elf-input-file]
30
ответ дан 24 November 2019 в 07:19
поделиться

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

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

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

33
ответ дан 24 November 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: