Дата публикации:Sun, 21 Dec 2025 09:40:04 +0300
Представлен релиз отладчика 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).
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64463