breakpoint hardware sono effettivamente comparatori, confrontando la corrente PC con l'indirizzo nel comparatore (se abilitato). I breakpoint hardware sono la soluzione migliore quando si impostano i breakpoint.Tipicamente impostato tramite il probe di debug (usando JTAG, SWD, ...). Lo svantaggio dei breakpoint hardware: sono limitati. Le CPU hanno solo un numero limitato di breakpoint hardware (comparatori). Il numero di breakpoint hardware disponibili dipende dalla CPU. I nuclei ARM 7/9 hanno 2, dispositivi ARM moderni (Cortex-M 0,3,4) tra 2 e 6, x86 in genere 4.
I punti di interruzione software vengono infatti impostati sostituendo l'istruzione da rottamare con un istruzione breakpoint. L'istruzione breakpoint è presente nella maggior parte delle CPU e solitamente è breve quanto l'istruzione più breve, quindi solo un byte su x86 (0xcc, INT 3). Sulle CPU Cortex-M, le istruzioni sono 2 o 4 byte, quindi l'istruzione breakpoint è un'istruzione a 2 byte.
I punti di interruzione del software possono essere impostati facilmente se il programma si trova nella RAM (ad esempio su un PC). Un sacco di sistemi incorporati hanno il programma situato nella memoria flash. Qui non è così facile scambiare le istruzioni, poiché il flash deve essere riprogrammato, quindi i breakpoint hardware vengono utilizzati principalmente. La maggior parte delle sonde di debug supporta solo i breakpoint hardware se il programma si trova nella memoria flash. Tuttavia, alcuni (come il J-Link di SEGGER) consentono la riprogrammazione della memoria flash con l'istruzione breakpoint e consentono anche un numero illimitato di punti di interruzione (software) anche durante il debug di un programma in flash.
More info about software breakpoints in flash memory
Ah, quindi non possiamo avere un breakpoint hardware illimitato! Ok, quindi anche se i breakpoint del software sono lenti, non abbiamo scelta !! Grazie, il link sembra carino. –
+1: nynaeve è uno dei migliori blog di RE sull'IMO netto :) – Necrolis
@TheIndependentAquarius Tecnicamente, non è possibile avere _unlimited_ punti di interruzione del software;) –