2012-01-16 13 views

risposta

21

Questo articolo fornisce una buona discussione di vantaggi e svantaggi: http://www.nynaeve.net/?p=80

Per rispondere alla tua domanda direttamente breakpoint software sono più flessibili, perché i punti di interruzione di hardware sono limitati in alcune funzionalità e altamente architettura-dipendente. Un esempio riportato nell'articolo è che l'hardware x86 ha un limite di 4 breakpoint hardware.

I punti di interruzione dell'hardware sono più veloci perché hanno registri dedicati e meno sovraccarico rispetto ai breakpoint software.

+0

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

+1: nynaeve è uno dei migliori blog di RE sull'IMO netto :) – Necrolis

+0

@TheIndependentAquarius Tecnicamente, non è possibile avere _unlimited_ punti di interruzione del software;) –

14

È possibile passare attraverso GDB internals, spiega molto bene i punti di interruzione HW e SW.

I punti di interruzione HW sono qualcosa che richiede il supporto di MCU. I controller ARM dispongono di registri speciali in cui è possibile scrivere alcuni spazi di indirizzamento, ogni volta che PC (programma contatore) == sp registri la CPU si arresta. Di solito è necessario che Jtag scriva in quei registri speciali.

I punti di interruzione SW sono implementati in GDB inserendo una trappola, o una divisione illegale, o qualche altra istruzione che causerà un'eccezione, e quindi quando viene rilevata, gdb prenderà l'eccezione e interromperà il programma. Quando l'utente dice di continuare, gdb ripristinerà l'istruzione originale, single-step, reinserirà il trap e continuerà.

Ci sono molti vantaggi nell'usare i debugger HW su debugger SW, specialmente se si hanno a che fare con interrupt e dispositivi bus di memoria. Gli interrupt AFAIK non possono essere sottoposti a debugging con i debugger del software.

4

In aggiunta alle risposte precedenti, è anche importante notare che mentre i punti di interruzione del software sovrascrivono specifiche istruzioni nel programma per sapere dove fermarsi, il numero più limitato di punti di interruzione hardware è in realtà parte del processore.

Justin Seitz nel suo libro Gray Hat Python fa notare che la differenza importante è che le istruzioni sovrascrittura, breakpoint software in realtà cambiare la CRC del file, e così qualsiasi tipo di programma come un malware che calcola i propri CRC può cambia il suo comportamento in risposta ai breakpoint impostati, mentre con i breakpoint hardware è meno ovvio che il debugger si fermi e passi attraverso alcuni blocchi di codice.

1

In breve, i breakpoint hardware fanno uso di registri dedicati e quindi sono in numero limitato. Questi possono essere impostati sia sulla memoria volatile che su quella non volatile.

I punti di interruzione del software vengono impostati sostituendo l'opcode dell'istruzione nella memoria RAM con l'istruzione del punto di interruzione. Questi possono essere impostati solo nella memoria RAM (la memoria Flash non è fattibile per essere scritti) e non sono limitati.

This article provides good explanation about breakpoints.

Grazie e saluti, Shivakumar V W

+0

Il collegamento è morto, rimuovere o aggiornare –

9

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

+1

Aggiungere alcune interruzioni di riga, questo è troppo difficile da leggere! – Joel

0

watchpoints sono un caso in cui la gestione hardware è molto più più veloce:

watch var 
rwatch var 
awatch var 

Quando si entra in quei comandi su GDB 7.7 x86-64 si dice:

Hardware watchpoint 2: var 

Questa funzionalità hardware per x86 è citata a: http://en.wikipedia.org/wiki/X86_debug_register

È probabilmente possibile a causa del circuito di paging esistente, che gestisce ogni accesso alla memoria.

L'alternativa "software" è single step the program, ovvero molto lento.

Confrontalo in punti di interruzione regolari, dove almeno l'implementazione del software inserisce e l'istruzione int3 e consente l'esecuzione del programma, quindi paghi solo l'overhead quando viene colpito un punto di interruzione.

0

Alcuni citazione da Intel Sistema debugger doc Guida:

hardware contro il software Breakpoint il debugger può utilizzare sia hardware e software punti di interruzione, ognuna di queste ha punti di forza e di debolezza:

I punti di interruzione dell'hardware vengono implementati utilizzando i registri dei punti di interruzione architetturali DR2 descritti in Intel SDM. Hanno il vantaggio di di essere utilizzabili direttamente al reset, essendo non volatili, e utilizzabile con flash o altra memoria di sola lettura. Lo svantaggio è che sono una risorsa limitata. I punti di interruzione software richiedono per modificare la memoria di sistema mentre vengono implementati sostituendo l'opcode nella posizione desiderata con un'istruzione speciale.Ciò rende una risorsa illimitata, ma la dipendenza dalla memoria significa che non è possibile installarli prima che un modulo sia caricato in memoria e, se il software di destinazione sovrascrive quella memoria, diventeranno non validi. In generale, qualsiasi funzione di debug che deve essere abilitata dal debugger non viene mantenuta dopo un ripristino e può subire conseguenze dopo altre transizioni di modalità architettonica come SMM entry/exit o VM entry/exit. Esempi specifici includono:

CPU Reset cancella tutte le funzionalità di debug, tranne che per l'intervallo di reset. Questo significa, ad esempio, che i punti di interruzione specificati dall'utente non saranno validi finché il target non si arresta una volta dopo il ripristino. Si noti che questo arresto può essere a causa di un reset-break, o a causa di un arresto avviato dall'utente. In in entrambi i casi il debugger ripristinerà le funzionalità di debug necessarie. SMM Entry/exit disabiliterà/riattiverà i punti di interruzione, ciò significa che è impossibile specificare un punto di interruzione in SMRAM mentre si trova all'esterno di SMRAM. Se si desidera un'interruzione all'interno di SMRAM, è necessario innanzitutto arrestare l'interruzione di immissione SMM e applicare manualmente il punto di interruzione. In alternativa, è possibile applicare la patch al BIOS per riattivare i punti di interruzione quando si immette SMM, ma questo richiede la possibilità di modificare il BIOS che non può essere utilizzato nel codice di produzione .

Problemi correlati