Die Veröffentlichung des Debuggers GDB 17.1 (erste Ausgabe der Serie 17.x, der Branch 17.0 wurde für die Entwicklung verwendet) wurde vorgestellt. GDB unterstützt die Fehlersuche auf Quellcode-Ebene für eine Vielzahl von Programmiersprachen (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust usw.) auf verschiedenen Hardware- (i386, amd64, ARM, Power, Sparc, RISC-V, LoongArch usw.) und Softwareplattformen (GNU/Linux, *BSD, Unix, Windows, macOS).
Die bemerkenswertesten Verbesserungen:
- Für x86-64 Systeme wurde die Unterstützung für den Schattenstack (shadow stack) implementiert, der mit dem Linux-Kernel 6.6 eingeführt wurde und es ermöglicht, viele Exploits zu blockieren, indem die Hardware-Funktionen von Intel-Prozessoren zum Schutz vor der Überschreibung der Rücksprungadresse aus einer Funktion im Falle eines Stacküberlaufs verwendet werden. Das Prinzip des Schutzes besteht darin, dass nach der Übergabe der Kontrolle an die Funktion die Rücksprungadressen nicht nur im normalen Stack, sondern auch in einem separaten „Schatten“-Stack vom Prozessor gespeichert werden, der nicht direkt verändert werden kann. Vor dem Verlassen der Funktion wird die Rücksprungadresse aus dem Schattenstack abgerufen und mit der Rücksprungadresse aus dem Hauptstack verglichen.
- Die Möglichkeit zur Fehlersuche von Linux-Programmen, die für die Architektur AArch64 kompiliert sind und die GCS-Erweiterung (Guarded Control Stack) verwenden, wurde hinzugefügt. GCS bietet Mittel zum Schutz der Rückgabewerte aus Funktionen und zur Blockierung von Exploits, die Methoden des Return-Oriented Programming (ROP) verwenden — bei denen der Exploit aus bereits vorhandenen Stücke maschineller Anweisungen, die mit einer Rückgabeverwaltungsanweisung enden, gebildet wird.
- Für Systeme mit der Architektur rv64gc wurde die vollständige Unterstützung für das Aufzeichnen des Programmablaufs zur Unterstützung der Rückwärtsfehlerbehebung und der Wiedergabe von Codeabschnitten implementiert.
- Die Optionen „-stopped“ und „-running“ wurden zum Befehl „info threads“ hinzugefügt, um nur gestoppte oder nur laufende Threads anzuzeigen.
- Im Befehl „info sharedlibrary“ wird auf Linux- und FreeBSD-Plattformen die Anzeige der Adressen für den gesamten Adressbereich bereitgestellt, der der Shared Library zugewiesen ist (zuvor wurden nur die Basisadresse und die Adressen für den .text-Bereich angezeigt).
- Die Möglichkeit zur Verwendung von Zustandsbackup (Checkpoint) in Linux wurde beim gleichzeitigen Debuggen mehrerer Prozesse sichergestellt.
- Erweiterte Unterstützung für Linker-Namensräume.
- Zur Kennzeichnung von Fehlern und Warnungen wurden Emoji verwendet.
- Die Linux-Plattform bietet jetzt eine integrierte Möglichkeit zum Zugriff auf Thread-lokale Variablen (Thread-Local Storage, TLS), die bei fehlender libthread_db-Bibliothek verwendet wird. Diese Funktion ist für die Architekturen x86_64, aarch64, ppc64, s390x und riscv verfügbar, wenn sie mit GLIBC oder MUSL kompiliert wird.
- Der Befehl „set riscv numeric-register-names“ wurde hinzugefügt, um RISC-V-Register mit ihren numerischen Identifikatoren anstelle von ABI-Namen anzuzeigen.
- Verbesserungen der Python-API. Neue Klassen gdb.Color und gdb.ParameterPrefix, das Attribut gdb.Value.is_unavailable und die Funktion gdb.warning() wurden hinzugefügt. Die Unterstützung für ältere Python-Versionen wurde eingestellt — nur Python 3.4 und neuer wird unterstützt.
- Verbesserungen der Guile-API. Der Typ „“ wurde hinzugefügt.
- Erweiterungen des DAP (Debugger Adapter Protocol): Unterstützung für „completions“-Anfragen und die Option „—binary-output“, um die Umwandlung von Zeilenumbruchzeichen auf Windows-Plattformen zu deaktivieren.
- Es wurden die Variablen $_colorsupport (Liste der vom Terminal unterstützten Farbräume), $linker_namespace_count und $_linker_namespace (Liste der aktiven Namensräume des Linkers) hinzugefügt.
- Optionen „—disable-gdb-compile“ wurden hinzugefügt, um das Kompilierungssystem zu deaktivieren, sowie „—disable-gdb-dwarf-support“ und „—disable-gdb-mdebug-support“, um die Debugging-Informationen in den Formaten DWARF und mdebug/ecoff zu deaktivieren.
- Die Unterstützung für UST (statische Tracepoints) wurde in gdbserver eingestellt.
Quelle: opennet.ru
