我正在調試程序集以瞭解gcc編譯器如何工作。我想讀取我的$ fs段寄存器,所以我使用x/x $ fs,但它告訴我它不能訪問內存。如何在i386:86_64上讀取任何包含段,通用和控制寄存器的寄存器?如何使用gdb讀取所有寄存器的值?
6
A
回答
11
info registers
打印出寄存器中的值對我來說這是你問我在想什麼:
(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
您必須使用p
和set
命令讀取/設置寄存器。每臺機器的寄存器名稱不同;使用信息寄存器來查看您的機器上使用的名稱。有關示例,請參閱GDB手冊的registers部分以獲取詳細信息。
要打印$fs
寄存器的值,你可以這樣做:
(gdb) p/x $fs
$1 = 0x0
什麼x
命令不被檢查的存儲器中。但是,有些情況下,你不能這樣做。例如,如果地址指向的內存受到保護。所以,如果你嘗試檢查,在一個虛擬地址0x0
內存,GDB顯然拒絕的話,例如:
(gdb) x/x $fs
0x0: Cannot access memory at address 0x0
希望它能幫助。祝你好運!
9
info all-registers
給你所有的寄存器值,包括FPU寄存器堆棧,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. 使用gdb檢查寄存器的值
- 2. 如何使用gdb獲取存儲在寄存器中的值? 「p/x $ ebx」因「沒有寄存器」而失敗。
- 3. 如何轉儲gdb中的所有XMM寄存器?
- 4. 解釋GDB寄存器(SSE寄存器)
- 5. 讀取由GDB寄存器指向的內存
- 6. 解引用寄存器gdb
- 7. 寄存器讀取
- 8. 用pymodbus讀取寄存器
- 9. 有沒有辦法在GDB中查看所有寄存器的特定值?
- 10. 使用mmap讀取/寫入寄存器
- 11. 如何使用gdb轉儲ARM協處理器寄存器?
- 12. 控制寄存器和gdb
- 13. gdb如何從堆棧中的所有幀中找到所有寄存器的值
- 14. 如何讀取AM335X上的特定寄存器值
- 15. 如何從Cortex-A9 CPU1的SP寄存器值讀取數據?
- 16. 如何在gdb中使用python訪問寄存器
- 17. GDB寄存器與處理器寄存器不同嗎?
- 18. 如何在GDB中打印寄存器值?
- 19. 如何從寄存器中提取值?
- 20. 使用寄存器指定要用LLDB讀取的內存
- 21. gdb和strncmp,寄存器的值是否存儲?
- 22. x86_64上的gdb eflags寄存器
- 23. 如何讀取gdb中的結構值?
- 24. Ansible:無法存取寄存器的值
- 25. GDB反彙編使用不一致的寄存器命名
- 26. 如何讀/寫一個寄存器
- 27. 如何在x86處理器中讀取標誌寄存器
- 28. 如何讀取特定內核(性能計數器)寄存器?
- 29. 宏函數讀取寄存器
- 30. 太快讀取MSP430 IO寄存器?
非常感謝!我正在學習一些教程,我不知道它爲什麼使用x/x $ reg。這清除了一切。 – 2012-04-26 00:13:56