Sto eseguendo il debug di un programma c in assembly per capire come funziona il compilatore gcc. Voglio leggere il mio registro dei segmenti $ fs, quindi uso x/x $ fs, ma mi dice che non può accedere alla memoria. Come posso ottenere una lettura su qualsiasi registro che includa segmenti, scopi generali e registri di controllo su i386: 86_64?Come faccio a leggere il valore di tutti i registri con gdb?
risposta
info registers
stampe dei valori registri per me, che è quello che stai chiedendo penso:
(gdb) info registers
rax 0x7ffff7731ec8 140737344904904
rbx 0x0 0
rcx 0x0 0
rdx 0x7fffffffd618 140737488344600
rsi 0x7fffffffd608 140737488344584
rdi 0x1 1
rbp 0x0 0x0
rsp 0x7fffffffd528 0x7fffffffd528
r8 0x7ffff7730300 140737344897792
r9 0x7ffff7dec250 140737351959120
r10 0x7fffffffd390 140737488343952
r11 0x7ffff73d0b50 140737341360976
r12 0x400be0 4197344
r13 0x7fffffffd600 140737488344576
r14 0x0 0
r15 0x0 0
rip 0x402330 0x402330 <main>
eflags 0x246 [ PF ZF IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
(gdb)
È necessario utilizzare i comandi p
e set
per leggere/impostare i registri. I nomi dei registri sono diversi per ogni macchina; usa i registri delle informazioni per vedere i nomi usati sulla tua macchina. Vedere la sezione registers del manuale GDB per informazioni dettagliate con esempi.
Per stampare un valore del registro $fs
, si può fare questo:
(gdb) p/x $fs
$1 = 0x0
comando Cosa x
non sta esaminando un ricordo. Ci sono casi, tuttavia, quando non puoi farlo. Ad esempio, se una memoria puntata da un indirizzo è protetta. Quindi, se si tenta di esaminare una memoria a un indirizzo virtuale 0x0
, gdb si rifiuta ovviamente di farlo, ad esempio:
(gdb) x/x $fs
0x0: Cannot access memory at address 0x0
Speranza che aiuta. In bocca al lupo!
info all-registers
ti dà tutti i valori di registro tra cui FPU registro stack, registri XMM.
(gdb) i all-r
rax 0x2aaaaace62ce 46912498459342
rbx 0x2aab18e71290 46914345570960
rcx 0x2aaab2020d60 46912619285856
rdx 0xffffffffffd934ee -2542354
rsi 0x2aab18ec7a40 46914345925184
rdi 0xa 10
rbp 0x2aab18e6f000 0x2aab18e6f000
rsp 0x2aab18e6f000 0x2aab18e6f000
r8 0xe 14
r9 0x2aab18eb1f08 46914345836296
r10 0x2aaab9085000 46912737136640
r11 0x0 0
r12 0x2aab18ec7170 46914345922928
r13 0x477f3280 1199518336
r14 0x7 7
r15 0x2aaada787000 46913298132992
rip 0x2aaaaae3b18e 0x2aaaaae3b18e <flt_fadd+4>
eflags 0x283 643
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
st0 10 (raw 0x4002a000000000000000)
st1 3 (raw 0x4000c000000000000000)
st2 0 (raw 0x00000000000000000000)
st3 0 (raw 0x00000000000000000000)
st4 0 (raw 0x00000000000000000000)
st5 0 (raw 0x00000000000000000000)
st6 0 (raw 0x00000000000000000000)
st7 0 (raw 0x00000000000000000000)
fctrl 0x137f 4991
fstat 0x7000 28672
ftag 0xc0 192
fiseg 0xaae3afe5 -1427918875
fioff 0x2aaa 10922
foseg 0x18e6ee48 417787464
fooff 0x2aab 10923
fop 0x704 1796
xmm0 {f = {0x0, 0x6, 0x0, 0x0}} {f = {0, 6.48876953, 0, 0}}
xmm1 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm2 {f = {0x0, 0x1c0, 0x0, 0x0}} {f = {0, 448, 0, 0}}
xmm3 {f = {0x0, 0x1, 0x0, 0x0}} {f = {0, 1.75, 0, 0}}
xmm4 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm5 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm6 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm7 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm8 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm9 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm10 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm11 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm12 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm13 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm14 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
xmm15 {f = {0x0, 0x0, 0x0, 0x0}} {f = {0, 0, 0, 0}}
mxcsr 0x1fa0 8096
- 1. Come scaricare tutti i registri XMM in gdb?
- 2. Come leggere i registri di tomcat con logstash
- 3. Come leggere i registri degli arresti anomali di iOS 4?
- 4. Come faccio a leggere i contenuti FILE in QML?
- 5. Come faccio a leggere i valori da wp-config.php?
- 6. Come faccio a leggere sedendo l'input standard?
- 7. Come faccio a leggere/scrivere file compressi con gzip?
- 8. Come faccio a leggere e inode traslazione
- 9. non interrompe tutti i thread in gdb
- 10. Comportamento del compilatore msvc dopo l'utilizzo di tutti i registri
- 11. Come faccio a leggere/scrivere file binari?
- 12. Ottieni tutti i registri di esecuzione di Apache Spark
- 13. Come faccio a far uscire GDB da un loop?
- 14. Come faccio a ripristinare tutti i filtri nelle griglie Extjs?
- 15. Come leggere ed eseguire i comandi GDB da un file?
- 16. Come faccio a unire tutti i casi in Uno?
- 17. come leggere i registri delle chiamate una volta terminata la chiamata e archiviata nei registri?
- 18. Utilizzando Python, come faccio a leggere/scrivere i dati in memoria come farei con un file?
- 19. Come faccio a interrompere la continuazione in GDB
- 20. Come configurare logrotate con i registri php
- 21. Come eliminare i vecchi registri con log4j2
- 22. Come ottenere i registri di altre app?
- 23. Come vedo i registri su parse-server?
- 24. gdb - il debugging con tubo
- 25. Registri di lettura con pymodbus
- 26. Invia i registri heroku a s3
- 27. Come faccio a contrassegnare un elemento come leggere con lettore di API di Google (usando python)
- 28. In GDB, come faccio a eseguire un comando automaticamente quando il programma si ferma? (come display)
- 29. Come faccio a trovare "i" con Turkish i in java?
- 30. Java PhantomJSDriver disabilita tutti i registri nella console
Grazie mille! Stavo seguendo un tutorial e non mi rendevo conto perché stava usando x/x $ reg. Questo chiarisce le cose. –