È stata rilasciata la versione del debugger GDB 17.1 (primo rilascio della serie 17.x, il ramo 17.0 è stato utilizzato per lo sviluppo). GDB supporta il debugging a livello sorgente per un ampio ventaglio di linguaggi di programmazione (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust, ecc.) su diverse piattaforme hardware (i386, amd64, ARM, Power, Sparc, RISC-V, LoongArch, ecc.) e software (GNU/Linux, *BSD, Unix, Windows, macOS).
The most noticeable improvements:
- Per i sistemi x86-64 è stata implementata la supporto per lo shadow stack, introdotto nel kernel Linux 6.6, che consente di bloccare molte exploit sfruttando le capacità hardware dei processori Intel per proteggere contro la sovrascrittura dell'indirizzo di ritorno dalla funzione in caso di overflow del buffer nello stack. Il principio della protezione è che, dopo aver trasferito il controllo alla funzione, gli indirizzi di ritorno vengono memorizzati dal processore non solo nel normale stack, ma anche in un "stack ombra" separato, non modificabile direttamente. Prima di uscire dalla funzione, l'indirizzo di ritorno viene estratto dallo stack ombra e confrontato con l'indirizzo di ritorno dello stack principale.
- È stata aggiunta la possibilità di fare il debug delle applicazioni Linux compilate per l'architettura AArch64 che utilizzano l'estensione GCS (Guarded Control Stack). Il GCS fornisce strumenti per la protezione hardware degli indirizzi di ritorno dalle funzioni e per bloccare gli exploit che utilizzano metodi di programming based on return (ROP — Return-Oriented Programming, un exploit creato da pezzi esistenti di istruzioni di macchina che terminano con un'istruzione di ritorno al controllo).
- Per i sistemi con architettura rv64gc è stata implementata la piena supporto per la registrazione del processo di esecuzione del programma per il debug all'indietro e la riproduzione di segmenti di codice.
- Nel comando «info threads» sono state aggiunte le opzioni «-stopped» e «-running» per visualizzare solo i thread fermati o solo quelli in esecuzione.
- Nel comando «info sharedlibrary» sulle piattaforme Linux e FreeBSD è stata garantita la visualizzazione degli indirizzi per l'intero intervallo di memoria assegnato alla libreria condivisa (in precedenza venivano mostrati solo l'indirizzo base e gli indirizzi per la sezione .text).
- È stata garantita la possibilità di utilizzare i checkpoint in Linux durante il debug simultaneo di più processi.
- Supporto ampliato per gli spazi dei nomi del linker.
- Utilizzati simboli emoji per evidenziare errori e avvisi.
- Implementata la funzionalità integrata di accesso alle variabili locali dei thread (Thread-Local Storage, TLS) su piattaforma Linux, utilizzata in assenza della libreria libthread_db. La funzionalità è disponibile per le architetture x86_64, aarch64, ppc64, s390x e riscv quando compilata con GLIBC o MUSL.
- Aggiunta il comando «set riscv numeric-register-names» per visualizzare i registri RISC-V utilizzando i loro identificatori numerici invece dei nomi ABI.
- Miglioramenti all'API Python. Aggiunte nuove classi gdb.Color e gdb.ParameterPrefix, attribuito gdb.Value.is_unavailable, funzione gdb.warning(). Interrotta la supporto per le versioni obsolete di Python: supportato solo Python 3.4 e superiori.
- Miglioramenti all'API Guile. Aggiunto il tipo «».
- Ampliate le capacità del protocollo DAP (Debugger Adapter Protocol): implementato supporto per richieste «completions» e aggiunta l'opzione «--binary-output» per disabilitare la conversione dei simboli di fine linea su piattaforma Windows.
- Aggiunti i variabili $_colorsupport (elenco degli spazi colori supportati dal terminale), $linker_namespace_count e $_linker_namespace (elenco degli spazi dei nomi attivi del linker).
- Aggiunte le opzioni «—disable-gdb-compile» per disabilitare il sottosistema di compilazione, e «—disable-gdb-dwarf-support» e «—disable-gdb-mdebug-support» per disabilitare le informazioni di debug nei formati DWARF e mdebug/ecoff.
- In gdbserver è stata interrotta la supporto per UST (static tracepoint).
Fonte: opennet.ru
