Un debugger è uno strumento che consente a un ingegnere di ispezionare un programma mentre viene eseguito su hardware reale. Può mettere in pausa l'esecuzione, avanzare passo dopo passo nel codice, leggere registri e memoria e modificare i valori per testare il comportamento di un sistema. Nei sistemi embedded, un debugger è spesso il modo migliore per capire se un guasto risiede nel software, nell'hardware o nel percorso della memoria circostante.
Nel campo della sicurezza informatica, i debugger sono importanti sia per la difesa sia per l'attacco. I difensori li usano per riprodurre crash, verificare patch e tracciare comportamenti sospetti all'interno di firmware o malware. Anche gli aggressori possono usare i debugger per fare reverse engineering del software, trovare segreti o alterare il flusso di controllo. Contano anche i loro limiti: nei sistemi con cache, il debugger può mostrare valori obsoleti o fuorvianti se lo strumento non sta osservando lo stesso stato della CPU. Per questo il debugging sicuro richiede scetticismo, attenzione alla cache e confronti incrociati con altre evidenze.


