Тема этой статьи может не соответствовать рекомендациям Википедии по значимости для продуктов и услуг . ( июль 2011 г. ) |
Оригинальный автор(ы) | Решения Cygnus |
---|---|
Репозиторий |
|
Написано в | С |
Тип | Библиотека |
Лицензия | Стандартная общественная лицензия 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 можно использовать для чтения структурированных данных из дампа ядра .
Например: распечатать размер файла объекта с использованием 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 # выводит размер
начал проектировать библиотеку и обсуждать дизайн со Столлманом. Столлман сказал, что работа слишком сложная — она потребует полной переписывания всех инструментов, и ее будет слишком сложно поддерживать. Гамби сказал ему, что это не такая уж "большая чертова сделка", и поэтому назвал это новое творение библиотекой BFD. (Мы объяснили нашим клиентам, что BFD означает библиотеку дескрипторов двоичных файлов.)