Gcc derleyicisinin nasıl çalıştığını anlamak için bir c programında hata ayıklama yapıyorum. $ Fs segment kaydımı okumak istiyorum, böylece x/x $ fs kullanıyorum, ancak belleğe erişemediğini söylüyor. I386: 86_64'de segment, genel amaç ve kontrol kayıtlarını içeren herhangi bir kayıt hakkında nasıl bilgi edinebilirim?Tüm kayıtların değerini gdb ile nasıl okurum?
6
A
cevap
11
info registers
yazdırır kayıtlar değerleri:
(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)
3
Kayıtları okumak/ayarlamak için p
ve set
komutlarını kullanmanız gerekir. Her makine için kayıt isimleri farklıdır; Makinenizde kullanılan adları görmek için bilgi kayıtlarını kullanın. Örneklerle ilgili ayrıntılı bilgi için GDB kılavuzunun registers bölümüne bakın.
$fs
kayıt değerini yazdırmak için, bunu yapabilirsiniz:
(gdb) p/x $fs
$1 = 0x0
Ne x
komutu bir bellek inceliyor gelmez. Bununla birlikte, yapamayacağınız durumlar var. Örneğin, bir adres tarafından işaret edilen bir bellek korunur. Sanal bir adrese 0x0
bir hafıza incelemek için denerseniz, gdb açıkçası örneğin bunu reddediyor:
(gdb) x/x $fs
0x0: Cannot access memory at address 0x0
yardımcı olur Umut. İyi şanslar! Ne düşündüğümü soran budur benim için
9
info all-registers
size FPU kayıt yığını, xmm kayıtları dahil tüm kayıt değerleri verir.
(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
İlgili konular
- 1. Scala ile Play-Framework'de bir çerezin değerini nasıl okurum?
- 2. QSettings kullanarak Windows kayıt defteri (Default) değerini nasıl okurum?
- 3. Yalnızca tüm kayıtların eşleşmesi durumunda sonuçların birleştirilmesi nasıl olur?
- 4. gdb içindeki tüm konuları durdurmuyor
- 5. gdb ile Debug qemu
- 6. Raylar: Kayıtların yerleştirilmesini sağlayın
- 7. gdb
- 8. GDB
- 9. gdb
- 10. Dizenin ilk satırını nasıl okurum?
- 11. Bir yıl öncesine kadar olan tüm kayıtların seçilmesi
- 12. Çoklu libs ile ndk-gdb
- 13. Gdb
- 14. GDB
- 15. GDB debug bayrağını cmake ile nasıl ayarlarsınız?
- 16. Silinen kayıtların sayısını nasıl alabilirim?
- 17. Kayıtların yalnızca yarısını seçin
- 18. GDB
- 19. GDB
- 20. PHPExcel ile bir xlsx dosyasının ikinci sayfasını nasıl okurum?
- 21. Realm: Kayıtların sırası değiştirildi
- 22. Android'de tüm arraylist değerini hashmap'a nasıl ekleyebilirim?
- 23. gdb borulu girişine (argümanlar) ile ayıklama
- 24. Immutable.js ile javascript ham nesnesinden kayıtların bir haritası nasıl oluşturulur?
- 25. Haskell'de kayıtların ihracatı nasıl kontrol edilir? Aşağıdaki örnek modül ile
- 26. Solaris GDB: Nasıl yürütülür?
- 27. clojure içindeki kayıtların belgelenmesi
- 28. Emacs 23.1.1 gdb ile - kaynak pencerelerini zorlamak
- 29. Python kullanarak bir görüntü dosyasını nasıl okurum?
- 30. Kotlin'de bir ortam değişkenini nasıl okurum?
Teşekkürler bir demet! Bazı dersleri takip ediyordum ve neden x/x $ reg kullanıyor olduğunun farkında değildim. Bu işleri temizler. –