Sto eseguendo il debug di un programma in gdb e voglio che il programma si fermi quando si accede alla regione di memoria da 0x08049000 a 0x0804a000. Quando provo a impostare manualmente i breakpoint di memoria, gdb sembra non supportare più di due posizioni alla volta.Guarda un intervallo di memoria in gdb?
(gdb) awatch *0x08049000
Hardware access (read/write) watchpoint 1: *0x08049000
(gdb) awatch *0x08049001
Hardware access (read/write) watchpoint 2: *0x08049001
(gdb) awatch *0x08049002
Hardware access (read/write) watchpoint 3: *0x08049002
(gdb) run
Starting program: /home/iblue/git/some-code/some-executable
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
C'è già una domanda in cui questo è stato chiesto e la risposta è stata, che può essere possibile fare questo con valgrind. Sfortunatamente la risposta non contiene alcun esempio o riferimento al manuale di valgrind, quindi non era molto illuminante: How can gdb be used to watch for any changes in an entire region of memory?
Quindi: Come posso guardare l'intera area di memoria?
Fatto interessante: i punti di interruzione PowerPC ha spaziato (?) Ma non watchpoints: http://stackoverflow.com/questions/ 13410941/set-breakpoint-on-ogni-line-in-gdb/31658056 # 31658056 –
x86 supporta gamme di piccoli orologi fino a 8 byte: https://en.wikipedia.org/wiki/X86_debug_register –