Выпуск отладчика GDB 17

Представлен релиз отладчика 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).



Источник: http://www.opennet.ru/opennews/art.shtml? num=64463

OpenNet прочитано 47 раз