La biblioteca de descriptores de archivos binarios ( BFD ) es el mecanismo principal del Proyecto GNU para la manipulación portátil de archivos objeto en una variedad de formatos. A partir de 2003,Admite aproximadamente 50 formatos de archivo y 25 arquitecturas de conjunto de instrucciones .
Historia
Cuando David Henkel-Wallace de Cygnus Support propuso desarrollar la biblioteca como una forma de abrir nuevas oportunidades de negocio para la empresa, Richard Stallman dijo que sería difícil; la respuesta de David fue que no era para tanto. Abreviado como "BFD", este se convirtió en el nombre de la biblioteca. [ 1 ] "Binary File Descriptor" se inventó más tarde como un acrónimo inverso de "BFD".
Diseño
BFD funciona presentando una vista abstracta común de los archivos objeto. Un archivo objeto tiene un "encabezado" con información descriptiva; un número variable de "secciones", cada una con un nombre, algunos atributos y un bloque de datos; una tabla de símbolos ; entradas de reubicación ; etc.
Internamente, BFD traduce los datos de la vista abstracta a los detalles de la disposición de bits/bytes que requiere el procesador y el formato de archivo de destino. Sus servicios clave incluyen el manejo de diferencias en el orden de bytes , como entre un host little-endian y un destino big-endian , la conversión correcta entre datos de 32 y 64 bits , y los detalles de la aritmética de direcciones especificada por las entradas de reubicación.
La biblioteca BFD [ 2 ] se puede dividir lógicamente en dos partes: el front-end y el back-end. El front-end proporciona una interfaz común, independiente de la vista subyacente del archivo objeto. Los usuarios interactuarán con los archivos objeto mediante esta interfaz. Incluso si el usuario desconoce la estructura de los archivos objeto, podrá utilizar la interfaz. Esta ocultación de detalles se realiza con la ayuda del back-end. El back-end implementa cómo la interfaz del front-end interactúa con la estructura de los archivos objeto. Cada vez que se introduce un nuevo tipo de archivo objeto, el back-end debe registrarlo e implementarlo si la aplicación BFD debe admitirlo.
Aunque BFD fue diseñado originalmente como una biblioteca genérica utilizable por una amplia variedad de herramientas, la necesidad frecuente de modificar la API para adaptarla a las capacidades de los nuevos sistemas ha tendido a limitar su uso; [ 3 ] [ 4 ] [ 5 ] Los principales clientes de BFD son el Ensamblador GNU (GAS), el Enlazador GNU (GLD), [ 6 ] y otras herramientas de Utilidades Binarias GNU ("binutils"), y el Depurador GNU (GDB). Como resultado, BFD no se distribuye por separado, sino que siempre se incluye con las versiones de binutils y GDB. Sin embargo, BFD es un componente crítico en el uso de herramientas GNU para el desarrollo de sistemas embebidos .
La biblioteca BFD se puede utilizar para leer los datos estructurados de un volcado de memoria .
Uso de la biblioteca BFD
Ejemplo: Imprimir el tamaño del archivo objeto utilizando las API de la biblioteca bfd.
#include "bfd.h" #include <stdio.h>int main () { bfd * abfd = bfd_openr ( "ao" , NULL ); printf ( "%llu \n " , bfd_get_size ( abfd )); return 0 ; }Comando de compilación:
Salida de gcc main.c -lbfd -o ./output # imprime el tamaño
Referencias
- ↑ "Open Sources: Voices from the Open Source Revolution" . O'Reilly. Enero de 1999. Consultado el 11 de noviembre de 2011. Gumby
comenzó a diseñar la biblioteca y a discutir el diseño con Stallman. Stallman dijo que el trabajo era demasiado difícil
:
requeriría una reescritura completa de todas las herramientas y sería muy difícil de mantener. Gumby le dijo que no era para tanto y, por lo tanto, nombró a esta nueva creación biblioteca BFD. (Les explicamos a nuestros clientes que BFD significaba biblioteca de descriptores de archivos binarios).
- ↑ Especificación BFD
- ↑ Langasek, Steve (22 de mayo de 2005). "Re: depender de la biblioteca compartida libbfd de binutils-dev" . debian-devel (Lista de correo) . Recuperado el 3 de abril de 2011 .
- ↑ Kuratomi, Toshio (2010-06-04). "binutils una vez más" . Fedora-packaging (Lista de correo) . Recuperado el 2011-04-03 .
- ↑ Taylor, Ian (12 de septiembre de 2003). "Re: FreeBSD 4.6 - binutils 2.14 instala la inútil libbfd" . binutils (Lista de correo) . Consultado el 3 de abril de 2011 .
- ↑ "Manual de GNU ld - 1. Descripción general" . Proyecto GNU .Véase también: "Manual de GNU ld - 7. BFD" .
Enlaces externos
- Página de Binutils, con acceso a las fuentes BFD actuales.
- Implementación de objdump, utiliza muchas API de BFD.
- Bibliotecas de C (lenguaje de programación)
- Formatos de archivos ejecutables
- Bibliotecas informáticas gratuitas
- Software del Proyecto GNU