GDB 17.1調試器的版本已經呈現(17.x系列的第一個版本,17.0分支用於開發)。 GDB支援多種程式語言(Ada、C、C++、D、Fortran、Go、Objective-C、Modula-2、Pascal、Rust等)在各種硬體(i386、amd64)上的原始程式碼層級偵錯、ARM、 Power、Sparc、RISC-V、LoongArch 等)與軟體平台(GNU/Linux、*BSD、Unix、Windows、 macOS)。
最顯著的改進:
- Linux 6.6 核心引入了影子堆疊支持,該功能利用 Intel 處理器的硬體特性,防止在堆疊緩衝區溢出時函數返回地址被覆蓋,從而有效阻止多種攻擊。其工作原理是將回傳位址不僅儲存在主堆疊上,還儲存在一個獨立的「影子」堆疊上,該堆疊無法被直接修改。函數退出前,會從影子堆疊中彈出返回地址,並將其與主堆疊中的返回地址進行比較。
- 新增了使用受保護控制堆疊 (GCS) 擴充功能的 AArch64 架構 Linux 程式進行偵錯的功能。 GCS 為函數傳回位址提供硬體保護,並阻止利用面向返回程式設計 (ROP) 技術的攻擊。 ROP 攻擊利用以返回指令結尾的現有機器指令塊構成。
- 對於採用 rv64gc 架構的系統,已實現對程式執行過程記錄的完全支持,以便進行反向偵錯和程式碼段重播。
- 「info threads」指令現在有「-stopped」和「-running」選項,可以只顯示已停止的執行緒或只顯示正在執行的執行緒。
- Linux 和 FreeBSD 平台上的「info sharedlibrary」指令現在會顯示分配給共用程式庫的整個記憶體範圍的位址(以前,只會顯示基底位址和 .text 部分的位址)。
- 現在,在 Linux 中同時偵錯多個進程時,可以使用快照(檢查點)功能。
- 擴展了對連結器命名空間的支援。
- 表情符號用於突出顯示錯誤和警告。
- 當缺少 libthread_db 函式庫時,Linux 平台會內建存取執行緒局部儲存 (TLS) 變數的功能。此功能適用於使用 GLIBC 或 MUSL 建構的 x86_64、aarch64、ppc64、s390x 和 riscv 架構。
- 新增了「set riscv numeric-register-names」命令,以使用數字 ID 而不是 ABI 名稱顯示 RISC-V 暫存器。
- Python API 已改進。新增了類別 gdb.Color 和 gdb.ParameterPrefix、gdb.Value.is_unavailable 屬性以及 gdb.warning() 函數。不再支援舊版 Python,僅支援 Python 3.4 及更高版本。
- Guile API 已改進。 “。”
- DAP(偵錯器適配器協定)的功能得到了擴展:實現了對「補全」請求的支持,並添加了「--binary-output」選項,用於停用 Windows 平台上的換行符轉換。
- 新增了變數 $_colorsupport(終端支援的色彩空間清單)、$linker_namespace_count 和 $_linker_namespace(活動連結器命名空間清單)。
- 新增了「--disable-gdb-compile」選項以停用編譯子系統,以及「--disable-gdb-dwarf-support」和「--disable-gdb-mdebug-support」選項以停用 DWARF 和 mdebug/ecoff 格式中的偵錯資訊。
- Gdbserver 已停止支援 UST(靜態追蹤點)。
來源: opennet.ru
