Представен е релиз на отладчика 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).
Най-забележителни подобрения:
- За системите x86-64 е реализирана поддръжка на теневия стек (shadow stack), появил се в ядрото на Linux 6.6, който помага за блокиране на множество експлойти, използвайки хардуерните възможности на процесорите Intel за защита от презаписване на адреса на връщане от функцията в случай на препълване на буфера в стека. Същността на защитата е, че след предаване на управлението на функциите, адресите на връщане се съхраняват от процесора не само в обикновения стек, но и в отделен „теневи” стек, който не може да бъде променян директно. Преди излизане от функцията адресът на връщане се извлича от теневия стек и се съпоставя с адреса на връщане от основния стек.
- Добавена е възможност за отстраняване на грешки в Linux-програми, събрани за архитектура AArch64 и използващи разширението GCS (Guarded Control Stack). GCS предоставя средства за хардуерна защита на адресите на връщане от функции и блокиране на експлойти, използващи методи за програмиране с ориентация на връщането (ROP — Return-Oriented Programming, експлоит, съставен от вече налични парчета машинни инструкции, завършващи с инструкция за връщане на управлението).
- За системите с архитектура rv64gc е реализирана пълна поддръжка на запис на изпълнението на програмата за отстраняване на грешки в обратна посока и повторно възпроизвеждане на участъци от кода.
- В командата „info threads” са добавени опциите „-stopped” и „-running” за показване само на спрените или само на изпълняващите се потоци.
- В командата „info sharedlibrary” на платформите Linux и FreeBSD е осигурено показването на адреси за целия диапазон памет, заделен за споделена библиотека (по-рано се показваха само основният адрес и адресите за секцията .text).
- Осигурена е възможността за използване на снимки на състоянието (checkpoint) в Linux при едновременна отстраняване на грешки на няколко процеса.
- Разширена е поддръжката на пространства от имена на компоновчика (linker namespace).
- За откриване на грешки и предупреждения са използвани символи emoji.
- Платформата Linux предлага вградена възможност за достъп до локални променливи на потока (Thread-Local Storage, TLS), използвана при липса на библиотеката libthread_db. Функцията е налична за архитектурите x86_64, aarch64, ppc64, s390x и riscv при компилация с GLIBC или MUSL.
- Добавена е команда „set riscv numeric-register-names” за показване на регистрите RISC-V с използване на техните цифрови идентификатори вместо ABI-имена.
- Внесени са подобрения в Python API. Добавени са нови класове gdb.Color и gdb.ParameterPrefix, атрибут gdb.Value.is_unavailable, функция gdb.warning(). Поддръжката на стари версии на Python е прекратена — поддържат се само Python 3.4 и по-нови.
- Внесени са подобрения в Guile API. Добавен е тип „”.
- Разширени са възможностите на протокола DAP (Debugger Adapter Protocol): реализирана е поддръжка на заявки „completions” и е добавена опцията „—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
