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
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)
Bạn phải sử dụng các lệnh p
và set
để đọ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
gì 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!
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
- 1. Làm thế nào để đổ tất cả các thanh ghi XMM trong gdb?
- 2. Làm thế nào để làm cho gdb in ra tất cả các giá trị trong chế độ thập lục phân?
- 3. cách đọc tất cả giá trị ô bằng cách sử dụng Apache POI?
- 4. Làm thế nào để thay thế các giá trị trống (null) bằng 0 cho tất cả các bản ghi?
- 5. Làm cách nào để bạn áp dụng 'hoặc' cho tất cả các giá trị của một danh sách bằng Python?
- 6. Làm cách nào để in toàn bộ giá trị của chuỗi dài trong gdb?
- 7. Làm cách nào để kiểm tra giá trị trả lại của hàm trong GDB?
- 8. Giá trị cài đặt cho một cột của tất cả các bản ghi trong bảng
- 9. Nhận tất cả các giá trị của tất cả các hàng trong HBase bằng cách sử dụng Java
- 10. Làm thế nào để đọc và ghi các giá trị nút tài liệu XML?
- 11. Regex thay thế tất cả dấu phẩy bằng giá trị
- 12. Làm cách nào để đọc các giá trị trong mảng?
- 13. Làm thế nào để thêm văn bản cho tất cả các giá trị của javascript Mảng
- 14. Tôi làm cách nào để tìm kiếm tất cả bộ nhớ của một tiến trình trong gdb?
- 15. Đọc/ghi siêu dữ liệu của tệp âm thanh/video
- 16. Làm cách nào để tổng hợp tất cả các giá trị trong từ điển?
- 17. Làm thế nào để đọc các giá trị thô của định dạng âm thanh 3gp/AMR-NB?
- 18. lấy tất cả các giá trị của phần tử Form bằng cách sử dụng jquery?
- 19. Làm thế nào để lấy tất cả các bản ghi Từ CoreData Base bằng NSManagedObjectSubClass?
- 20. Cách thanh lịch để xác thực giá trị
- 21. Làm thế nào để đếm trong SQL tất cả các trường có giá trị null trong một bản ghi?
- 22. Làm cách nào để có thể đặt giá trị phủ định của giá trị khóa bằng gói data.table của R?
- 23. Perl, nhận tất cả giá trị băm
- 24. Làm cách nào để chèn một hàng không có bất kỳ giá trị nào để tất cả các cột giả sử giá trị mặc định của chúng?
- 25. Làm cách nào để thay đổi tất cả các giá trị đầu vào thành chữ hoa bằng Jquery?
- 26. Truy vấn tất cả các giá trị duy nhất của một trường bằng Elasticsearch
- 27. Kiểm tra xem tất cả các giá trị đã được đọc thành công từ std :: istream
- 28. PHPExcel: Đọc tất cả các giá trị (ngày, giờ, số) dưới dạng các chuỗi
- 29. Làm cách nào để GDB không in các giá trị tham số chức năng khi "bước vào"?
- 30. Làm cách nào để liệt kê tất cả các thuộc tính trong đối tượng và nhận giá trị của chúng?
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ứ. –