Библиотека дескрипторов двоичных файлов

Поддержка GNU для нескольких форматов исполняемых файлов
Библиотека дескрипторов двоичных файлов
Оригинальный автор(ы)Решения Cygnus
Репозиторий
  • sourceware.org/git/?p=binutils-gdb.git%3Ba%3Dtree%3Bf%3Dbfd
Написано вС
ТипБиблиотека
ЛицензияСтандартная общественная лицензия GNU

Библиотека дескрипторов двоичных файлов ( BFD ) — это основной механизм проекта GNU для переносимой манипуляции объектными файлами в различных форматах. По состоянию на 2003 год [обновлять]она поддерживает около 50 форматов файлов и 25 архитектур наборов инструкций .

История

Когда Дэвид Хенкель-Уоллес из Cygnus Support предложил разработать библиотеку как способ открыть новые бизнес-возможности для компании, Ричард Столлман сказал, что это будет сложно; Дэвид ответил, что это не такая уж «большая чертова сделка». Сокращенное до «BFD», это стало названием библиотеки. [1] «Binary File Descriptor» было изобретено позже как бэкроним для «BFD».

Дизайн

BFD работает, представляя общее абстрактное представление объектных файлов. Объектный файл имеет «заголовок» с описательной информацией; переменное количество «секций», каждая из которых имеет имя, некоторые атрибуты и блок данных; таблицу символов ; записи перемещения ; и так далее.

Внутренне BFD преобразует данные из абстрактного представления в детали бит/байтовой компоновки, требуемой целевым процессором и форматом файла. Его ключевые услуги включают обработку различий в порядке байтов , например, между хостом с прямым порядком байтов и целевым объектом с обратным порядком байтов , корректное преобразование между 32-битными и 64-битными данными и детали адресной арифметики, заданные записями перемещения.

Библиотеку BFD [2] можно логически разделить на две части. Фронтенд и бэкенд. Фронтенд предоставляет общий интерфейс, независимый от базового представления объектных файлов. Пользователи будут взаимодействовать с объектными файлами с помощью этого интерфейса. Даже если макет объектных файлов неизвестен пользователю, он все равно сможет использовать интерфейс. Это сокрытие деталей осуществляется с помощью бэкенда. Бэкенд реализует, как интерфейс фронтенда взаимодействует с макетом объектных файлов. Всякий раз, когда вводится новый тип объектных файлов, бэкенд должен зарегистрировать тип и реализовать его, если он должен поддерживаться приложением BFD.

Хотя BFD изначально разрабатывался как универсальная библиотека, пригодная для использования широким спектром инструментов, частая необходимость вносить изменения в API для адаптации к возможностям новых систем, как правило, ограничивала его использование; [3] [4] [5] Основными клиентами BFD являются GNU Assembler (GAS), GNU Linker (GLD) и другие инструменты GNU Binary Utilities («binutils»), а также GNU Debugger (GDB). В результате BFD не распространяется отдельно, но всегда включается в выпуски binutils и GDB. Тем не менее, BFD является критически важным компонентом в использовании инструментов GNU для разработки встраиваемых систем .

Библиотеку BFD можно использовать для чтения структурированных данных из дампа ядра .

Использование библиотеки BFD

Например: распечатать размер файла объекта с использованием API библиотеки BFD.

#включить "bfd.h"#include <stdio.h>целочисленный основной(){ bfd* abfd = bfd_openr("ao",NULL); printf("%llu\n", bfd_get_size(abfd)); вернуть 0;}

Команда сборки:

gcc main.c -lbfd -o вывод./output # выводит размер

Ссылки

  1. ^ "Open Sources: Voices from the Open Source Revolution". O'Reilly. Январь 1999. Получено 11 ноября 2011 г. Гамби начал проектировать библиотеку и обсуждать дизайн со Столлманом. Столлман сказал, что работа слишком сложная — она потребует полной переписывания всех инструментов, и ее будет слишком сложно поддерживать. Гамби сказал ему, что это не такая уж "большая чертова сделка", и поэтому назвал это новое творение библиотекой BFD. (Мы объяснили нашим клиентам, что BFD означает библиотеку дескрипторов двоичных файлов.)
  2. ^ Спецификация BFD
  3. ^ Лангашек, Стив (2005-05-22). "Re: зависимость от общей libbfd из binutils-dev". debian-devel (список рассылки) . Получено 2011-04-03 .
  4. ^ Куратоми, Тосио (2010-06-04). "binutils once again". Fedora-packaging (список рассылки) . Получено 2011-04-03 .
  5. ^ Тейлор, Ян (2003-09-12). "Re: FreeBSD 4.6 - binutils 2.14 устанавливает бесполезный libbfd". binutils (список рассылки) . Получено 2011-04-03 .
  • Страница Binutils с доступом к текущим исходникам BFD
  • реализация objdump, использует множество API BFD
Получено с "https://en.wikipedia.org/w/index.php?title=Библиотека_дескрипторов_двоичных_файлов&oldid=1240648178"