Представлен релиз отладчика 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 c использованием их цифровых идентификаторов вместо ABI-имён.
- Внесены улучшения в Python API. Добавлены новые классы gdb.Color и gdb.ParameterPrefix, атрибут gdb.Value.is_unavailable, функция gdb.warning(). Прекращена поддержка старых версий Python — поддерживается только Python 3.4 и новее.
- Внесены улучшения в Guile API. Добавлен тип «<gdb:color>».
- Расширены возможности протокола 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 (static tracepoint).
Источник: opennet.ru
