# Biblioteca de descriptors de fitxers binaris

La biblioteca de descriptors de fitxers binaris (BFD) és el mecanisme principal del projecte GNU per a la manipulació portàtil de fitxers d'objectes en una varietat de formats. A 2003, admet aproximadament 50 formats de fitxer per a unes 25 arquitectures de conjunts d'instruccions.

## Història

Quan David Henkel-Wallace de Cygnus Support va proposar desenvolupar la biblioteca com una manera d'obrir noves oportunitats de negoci per a l'empresa, Richard Stallman va dir que seria difícil; La resposta de David va ser que no es tractava d'un "gran problema". Abreujat com a "BFD", aquest es va convertir en el nom de la biblioteca. "Binary File Descriptor" es va inventar més tard com a backronym de "BFD".

## Disseny

BFD funciona presentant una visió abstracta comuna dels fitxers d'objectes. Un fitxer objecte té una "capçalera" amb informació descriptiva; un nombre variable de "seccions" que cadascuna té un nom, alguns atributs i un bloc de dades; una taula de símbols; entrades de reubicació; i així successivament.
Internament, BFD tradueix les dades de la vista abstracta als detalls de la disposició de bits/bytes requerits pel processador de destinació i el format de fitxer. Els seus serveis clau inclouen la gestió de diferències d'ordre de bytes, com ara entre un host little-endian i un objectiu big-endian, la conversió correcta entre dades de 32 bits i 64 bits i detalls de l'aritmètica d'adreces especificades per les entrades de reubicació.
La biblioteca BFD es pot dividir lògicament en dues parts. El front-end i el back-end. El front-end ofereix una interfície comuna independent de la visualització del fitxer d'objectes subjacent. Els usuaris interactuaran amb els fitxers d'objectes amb aquesta interfície. Fins i tot si l'usuari no coneix la disposició dels fitxers d'objectes, l'usuari encara podrà utilitzar la interfície. Aquesta ocultació del detall es fa amb l'ajuda del back-end. El back-end implementa com la interfície de front-end interactua amb la disposició dels fitxers d'objectes. Sempre que s'introdueix un nou tipus de fitxers d'objecte, el back-end ha de registrar-lo i implementar-lo si l'aplicació BFD ha de ser compatible.
Tot i que BFD va ser dissenyat originalment per ser una biblioteca genèrica utilitzable per una gran varietat d'eines, la necessitat freqüent de modificar l'API per adaptar-se a les capacitats dels nous sistemes ha tendit a limitar-ne l'ús; Els principals clients de BFD són GNU Assembler (GAS), GNU Linker (GLD) i altres eines GNU Binary Utilities ("binutils") i el GNU Debugger (GDB). Com a resultat, BFD no es distribueix per separat, sinó que sempre s'inclou amb les versions de binutils i GDB. No obstant això, BFD és un component crític en l'ús de les eines GNU per al desenvolupament de sistemes encastats.

## Referències

* ↑ «LIB BFD, the Binary File Descriptor Library - Introduction» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «Open Sources: Voices from the Open Source Revolution» (en anglès). O'Reilly, 01-01-1999. [Consulta: 11 novembre 2011].
* ↑ «LIB BFD, the Binary File Descriptor Library» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «libbfd The Binary File Descriptor Library» (en anglès). [Consulta: 8 desembre 2023].