2012-04-26 24 views
6

Tôi đang gỡ lỗi chương trình c trong assembly để hiểu cách trình biên dịch gcc hoạt động. Tôi muốn đọc đăng ký phân đoạn $ fs của tôi vì vậy tôi sử dụng x/x $ fs, tuy nhiên nó cho tôi biết nó không thể truy cập bộ nhớ. Làm cách nào tôi có thể đọc được trên bất kỳ sổ đăng ký nào bao gồm phân đoạn, mục đích chung và thanh ghi điều khiển trên i386: 86_64?Làm cách nào để đọc giá trị của tất cả thanh ghi bằng gdb?

Trả lời

11

info registers in ra thanh ghi giá trị đối với tôi đó là những gì bạn đang yêu cầu tôi nghĩ:

(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

Bạn phải sử dụng các lệnh pset để đọc/đặt thanh ghi. Tên của các thanh ghi khác nhau cho mỗi máy; sử dụng thanh ghi thông tin để xem tên được sử dụng trên máy của bạn. Xem phần registers trong hướng dẫn sử dụng GDB để biết thông tin chi tiết với các ví dụ.

Để in một giá trị của $fs đăng ký, bạn có thể làm điều này:

(gdb) p/x $fs 
$1 = 0x0 

x lệnh không được kiểm tra một ký ức. Có những trường hợp, tuy nhiên, khi bạn không thể làm điều đó. Ví dụ, nếu một bộ nhớ chỉ bởi một địa chỉ được bảo vệ. Vì vậy, nếu bạn cố gắng xem xét một bộ nhớ tại một địa chỉ ảo 0x0, gdb rõ ràng từ chối làm như vậy, ví dụ:

(gdb) x/x $fs 
0x0: Cannot access memory at address 0x0 

Hy vọng nó giúp. Chúc may mắn!

+0

Cảm ơn một nhóm! Tôi đã làm theo một số hướng dẫn và tôi đã không nhận ra lý do tại sao nó đã được sử dụng x/x $ reg. Điều đó xóa mọi thứ. –

9
info all-registers 

cung cấp cho bạn tất cả các giá trị đăng ký bao gồm FPU đăng ký stack, ghi 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 
Các vấn đề liên quan