No, questo non è possibile e che sarebbe anche molto inefficiente da implementare.
di Debugger tipicamente supportano due tipi di punti di interruzione:
- Hardware punti di interruzione: Il debugger chiede la CPU di sollevare una speciale interrupt eccezione quando si verifica un evento, come una locazione di memoria viene modificata.
- Software Breakpoint: Il debugger sostituisce il codice operativo presso l'indirizzo del punto di interruzione con uno speciale istruzione "trappola" (
int 3
/0xcc
sull'architettura x86).
La corrispondenza dell'opcode dell'istruzione corrente richiederebbe il supporto CPU per inserire un punto di interruzione hardware o il debugger deve conoscere l'indirizzo per utilizzare un punto di interruzione software.
In teoria, il debugger può semplicemente cercare l'intera memoria per la sequenza di byte dell'istruzione, ma poiché la sequenza di byte potrebbe verificarsi anche nel mezzo di un'istruzione o di dati, potrebbe ottenere falsi positivi.
Poiché le istruzioni di assemblaggio sono di lunghezza variabile, il controllo può passare a qualsiasi indirizzo arbitrario o il codice potrebbe modificarsi, non è banale smontare un'intera regione di memoria per trovare istruzioni particolari.
Quindi, in pratica, l'unico modo per trovare in modo affidabile l'istruzione nel codice di assemblaggio arbitrario sarebbe il singolo passo al livello di istruzione. E ciò sarebbe estremamente costoso, anche una semplice chiamata di libreria come printf()
potrebbe richiedere minuti sull'hardware di oggi se si eseguono tutte le istruzioni.
fonte
2012-12-25 15:49:32
* "... e sarebbe anche molto inefficiente da implementare." * - Non sono sicuro di questo. Un'implementazione ingenua può essere inefficiente, come la comparazione delle stringhe di ogni comando mnemonico quando eseguito. Ma chiedere a GDB di fare ciò che ha suggerito il russo impiegato sembra ragionevole. Nel mio caso, voglio interrompere le chiamate a 'CPUID'. Ci sono solo quattro o cinque chiamate, quindi sembra che GDB stia facendo ciò che il russo impiegato suggerisce sarebbe perfetto per me, quindi non devo perdere tempo. – jww