DWARF es un formato de datos de depuración estandarizado y ampliamente utilizado . Originalmente, DWARF se diseñó junto con el formato ejecutable y enlazable (ELF), aunque es independiente de los formatos de archivos objeto . [ 1 ] El nombre es un complemento de fantasía medieval a "ELF" que no tenía un significado oficial, aunque posteriormente se propuso el nombre "Debugging With Arbitrary Record Formats" como acrónimo inverso . [ 1 ]
DWARF se originó con el compilador C y el depurador sdb en Unix System V Release 4 (SVR4). [ 1 ]
Historia
La primera versión de DWARF resultó consumir una cantidad excesiva de almacenamiento, por lo que una versión sucesora incompatible, DWARF-2, la reemplazó e incorporó diversos esquemas de codificación para reducir el tamaño de los datos. DWARF no obtuvo una aceptación universal inmediata; por ejemplo, cuando Sun Microsystems adoptó ELF como parte de su migración a Solaris , optó por seguir utilizando stabs , en una incrustación conocida como "stabs-in-elf". Linux siguió el ejemplo, y DWARF-2 no se convirtió en el estándar hasta finales de la década de 1990.
El Grupo de Trabajo DWARF del Grupo de Estándares Libres publicó la versión 3 de DWARF en enero de 2006, [ 2 ] agregando (entre otras cosas) soporte para espacios de nombres de C++ , datos asignables de Fortran 90 y técnicas adicionales de optimización del compilador .
El comité DWARF publicó la versión 4 de DWARF, que ofrece "una compresión de datos mejorada, una mejor descripción del código optimizado y soporte para nuevas características del lenguaje en C++", en 2010. [ 3 ]
La versión 5 del formato DWARF se publicó en febrero de 2017. [ 4 ] [ 5 ] "incorpora mejoras en muchas áreas: mejor compresión de datos, separación de los datos de depuración de los archivos ejecutables, descripción mejorada de macros y archivos fuente, búsqueda más rápida de símbolos, depuración mejorada de código optimizado, así como numerosas mejoras en la funcionalidad y el rendimiento."
Estructura
DWARF utiliza una estructura de datos denominada Entrada de Información de Depuración (DIE) para representar cada variable, tipo, procedimiento, etc. Una DIE tiene una etiqueta (por ejemplo, DW_TAG_variable , DW_TAG_pointer_type , DW_TAG_subprogram ) y atributos (pares clave-valor). Una DIE puede tener DIE anidadas (hijas), formando una estructura de árbol . Un atributo de DIE puede hacer referencia a otra DIE en cualquier parte del árbol; por ejemplo, una DIE que representa una variable tendría una entrada DW_AT_type que apunta a la DIE que describe el tipo de la variable.
Para ahorrar espacio, dos tablas grandes necesarias para los depuradores simbólicos se representan como instrucciones codificadas en bytes para máquinas de estados finitos simples y de propósito especial . La tabla de números de línea, que asigna ubicaciones de código a ubicaciones de código fuente y viceversa, también especifica qué instrucciones forman parte de los prólogos y epílogos de las funciones. La tabla de información de marcos de llamada permite a los depuradores localizar marcos en la pila de llamadas .
DWARF se ha dividido en diferentes secciones como .debug_info, [ 6 ] .debug_frame, etc.
.debug_info
La sección .debug_info de un ELF contiene información generada por los compiladores para describir el código fuente durante la depuración , registrando los símbolos y su tipo, ámbito, archivo, número de línea, etc. La sección .debug_info [ 7 ] es uno de los componentes principales de los archivos de información de depuración DWARF [ 8 ] [ 9 ] . [ 10 ] Esto lo genera un compilador cuando se utiliza el modificador -g o sus variantes.
Herramientas
Libdwarf es una biblioteca que proporciona acceso a la información de depuración de DWARF en archivos ejecutables y archivos objeto. [ 11 ]
Lecturas adicionales
Michael Eager, presidente del Comité de Estándares DWARF, ha escrito una introducción a los formatos de depuración y a DWARF 3, Introducción al formato de depuración DWARF . [ 1 ]
Referencias
- 1 2 3 4 Michael J. Eager (abril de 2012). "Introducción al formato de depuración DWARF" (PDF) . Recuperado el 8 de enero de 2015 .
- ↑ "Se publica el estándar DWARF versión 3" (Comunicado de prensa). Free Standards Group. 4 de enero de 2006. Archivado del original el 25 de julio de 2011. Consultado el 25 de junio de 2007 .
- ↑ "Lanzamiento de la versión 4 de DWARF" . El comité de DWARF. 16 de junio de 2010. Archivado del original el 30 de julio de 2020. Consultado el 24 de junio de 2010 .
- ↑ "Se publica el estándar DWARF versión 5" . El comité DWARF. 15 de febrero de 2017. Consultado el 7 de agosto de 2017 .
- ↑ "Estándar DWARF 5" . El comité DWARF. 15 de febrero de 2017. Consultado el 7 de agosto de 2017 .
- ↑ "Explorando la información del formato de depuración de DWARF" .
- ↑ "Opciones de depuración (Uso de la colección de compiladores GNU (GCC))" . gcc.gnu.org .
- ↑ "Extensiones enanas" . gcc.gnu.org .
- ↑ You, Ilsun; Youn, Taek-Young (3 de febrero de 2023). Aplicaciones de seguridad de la información: 23.ª Conferencia Internacional, WISA 2022, Isla de Jeju, Corea del Sur, 24-26 de agosto de 2022, Artículos seleccionados revisados . Springer Nature. ISBN 978-3-031-25659-2.
- ↑ "Recuperación de secciones ELF con debuginfod" . www.redhat.com . Consultado el 25 de septiembre de 2023 .
- ↑ "libdwarf: Una interfaz de biblioteca de consumo para DWARF" . www.prevanders.net . Consultado el 6 de diciembre de 2023 .
Enlaces externos
- Sitio web oficial
- Libdwarf , una biblioteca C destinada a simplificar la lectura (y escritura) de aplicaciones que utilizan DWARF2 y DWARF3.
- elfutils , otra biblioteca C para el procesamiento de archivos ELF/DWARF.
- Cómo funcionan los depuradores : Parte 3 - Información de depuración
- Formatos de depuración DWARF y STAB
- Depuración de formatos de datos