Se presentó el lanzamiento del depurador GDB 17.1 (la primera versión de la serie 17.x, la rama 17.0 fue utilizada para el desarrollo). GDB admite la depuración a nivel de código fuente para una amplia variedad de lenguajes de programación (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust, etc.) en diversas plataformas de hardware (i386, amd64, ARM, Power, Sparc, RISC-V, LoongArch, etc.) y software (GNU/Linux, *BSD, Unix, Windows, macOS).
Mejoras más notables:
- Para los sistemas x86-64 se ha implementado el soporte para la pila sombra (shadow stack), introducida en el núcleo de Linux 6.6 y que permite bloquear muchos exploits utilizando las capacidades de hardware de los procesadores Intel para proteger contra la sobrescritura de la dirección de retorno de una función en caso de desbordamiento de búfer en la pila. La esencia de la protección es que, después de transferir el control a la función, las direcciones de retorno son almacenadas por el procesador no solo en la pila normal, sino también en una "pila sombra" separada, que no puede ser modificada directamente. Antes de salir de la función, la dirección de retorno se extrae de la pila sombra y se verifica con la dirección de retorno de la pila principal.
- Se ha añadido la capacidad de depurar programas de Linux compilados para la arquitectura AArch64 y que utilizan la extensión GCS (Guarded Control Stack). GCS proporciona medios para la protección de hardware de las direcciones de retorno de funciones y para bloquear exploits que utilizan métodos de programación orientada a retorno (ROP — Return-Oriented Programming, un exploit se forma a partir de fragmentos existentes de instrucciones de máquina que finalizan con una instrucción de retorno del control).
- Para los sistemas con arquitectura rv64gc se ha implementado soporte completo para grabar el proceso de ejecución de un programa para la depuración hacia atrás y la reproducción de secciones de código.
- Se han añadido las opciones "-stopped" y "-running" al comando "info threads" para mostrar solo los hilos detenidos o solo los hilos en ejecución.
- En el comando "info sharedlibrary" en plataformas Linux y FreeBSD se garantiza la visualización de direcciones para todo el rango de memoria asignado a la biblioteca compartida (anteriormente solo se mostraba la dirección base y las direcciones para la sección .text).
- Se ha habilitado la posibilidad de utilizar puntos de control (checkpoint) en Linux al depurar varios procesos simultáneamente.
- Se ha ampliado el soporte para los espacios de nombres del enlazador (linker namespace).
- Se han utilizado símbolos emoji para resaltar errores y advertencias.
- En la plataforma Linux, se ha implementado una función integrada para acceder a variables de hilo locales (Thread-Local Storage, TLS), utilizada en ausencia de la biblioteca libthread_db. Esta funcionalidad está disponible para las arquitecturas x86_64, aarch64, ppc64, s390x y riscv cuando se compila con GLIBC o MUSL.
- Se ha añadido el comando «set riscv numeric-register-names» para mostrar los registros RISC-V utilizando sus identificadores numéricos en lugar de los nombres ABI.
- Se han realizado mejoras en la API de Python. Se han añadido nuevas clases gdb.Color y gdb.ParameterPrefix, el atributo gdb.Value.is_unavailable, y la función gdb.warning(). Se ha dejado de dar soporte a versiones antiguas de Python; solo se admite Python 3.4 o posterior.
- Se han realizado mejoras en la API de Guile. Se ha añadido el tipo «».
- Se han ampliado las capacidades del protocolo DAP (Debugger Adapter Protocol): se ha implementado el soporte para las solicitudes «completions» y se ha añadido la opción «—binary-output» para desactivar la conversión de caracteres de nueva línea en la plataforma Windows.
- Se han añadido las variables $_colorsupport (lista de espacios de color soportados por el terminal), $linker_namespace_count y $_linker_namespace (lista de espacios de nombres activos del enlazador).
- Se han añadido las opciones «—disable-gdb-compile» para desactivar el subsistema de compilación, así como «—disable-gdb-dwarf-support» y «—disable-gdb-mdebug-support» para desactivar la información de depuración en los formatos DWARF y mdebug/ecoff.
- En gdbserver, se ha dejado de dar soporte a UST (punto de traza estático).
Fuente: opennet.ru
