Библиотека дескрипторов двоичных файлов
![]() | Тема этой статьи может не соответствовать рекомендациям Википедии по известности продуктов и услуг . ( июль 2011 г. ) |
Оригинальный автор(ы) | Лебедь Решения |
---|---|
Репозиторий | |
Написано в | С |
Тип | Библиотека |
Лицензия | Стандартная общественная лицензия GNU |
Библиотека дескрипторов двоичных файлов ( BFD ) — это основной механизм проекта GNU для переносимого манипулирования объектными файлами в различных форматах. По состоянию на 2003 год [update]Он поддерживает около 50 форматов файлов и 25 архитектур наборов команд .
История
[ редактировать ]Когда Дэвид Хенкель-Уоллес из Cygnus Support предложил развивать библиотеку как способ открыть для компании новые возможности для бизнеса, Ричард Столлман сказал, что это будет сложно; Ответ Дэвида заключался в том, что это не было такой уж «чертовски большой сделкой». Сокращенно до «BFD» это стало названием библиотеки. [ 1 ] «Дискриптор двоичного файла» был изобретен позже как бэкроним для «BFD».
Дизайн
[ редактировать ]BFD работает, предоставляя общее абстрактное представление объектных файлов. Объектный файл имеет «заголовок» с описательной информацией; переменное количество «разделов», каждый из которых имеет имя, некоторые атрибуты и блок данных; таблица символов ; записи о переезде ; и так далее.
Внутри BFD преобразует данные из абстрактного представления в детали расположения битов/байтов, необходимые целевому процессору и формату файла. Его ключевые услуги включают обработку различий в порядке байтов , например, между с прямым порядком байтов хостом и целью с прямым порядком байтов , правильное преобразование между 32-битными и 64-битными данными, а также детали арифметики адресов , указанные в записях перемещения.
БФД [ 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.
#include "bfd.h" #include <stdio.h> int main() { bfd* abfd = bfd_openr("a.o",NULL); printf("%llu\n", bfd_get_size(abfd)); return 0; }
Команда сборки:
gcc main.c -lbfd -o output ./output # prints the size
Ссылки
[ редактировать ]- ^
«Открытые исходные коды: голоса революции открытого исходного кода» . О'Рейли. Январь 1999 года . Проверено 11 ноября 2011 г.
Гамби начал проектировать библиотеку и обсуждать дизайн со Столлманом. Столлман сказал, что работа слишком сложна — потребуется полностью переписать все инструменты, и ее будет слишком сложно поддерживать. Гамби сказал ему, что это не такое уж «большое дело», и поэтому назвал это новое творение библиотекой BFD. (Мы объяснили нашим клиентам, что BFD означает библиотеку дескрипторов двоичных файлов.)
- ^ [1] Спецификация BFD
- ^ Лангасек, Стив (22 мая 2005 г.). «Re: в зависимости от общего libbfd из binutils-dev» . debian-devel (список рассылки) . Проверено 3 апреля 2011 г.
- ^ Куратоми, Тошио (4 июня 2010 г.). «binutils еще раз» . Упаковка Fedora (список рассылки) . Проверено 3 апреля 2011 г.
- ^ Тейлор, Ян (12 сентября 2003 г.). «Re: FreeBSD 4.6 — binutils 2.14 устанавливает бесполезную libbfd» . binutils (список рассылки) . Проверено 3 апреля 2011 г.