Khi chạy info registers
trong gdb, chúng tôi nhận được một đầu ra tương tự như sau:thông tin GDB đăng ký lệnh - cột thứ hai của đầu ra
rax 0x1c 28
rbx 0x0 0
rcx 0x400a60 4196960
rdx 0x7fffffffde88 140737488346760
rsi 0x1 1
rdi 0x400932 4196658
rbp 0x0 0x0
rsp 0x7fffffffde68 0x7fffffffde68
r8 0x400ad0 4197072
r9 0x7ffff7dea560 140737351951712
r10 0x7fffffffdc30 140737488346160
r11 0x7ffff7732dd0 140737344908752
r12 0x4007f0 4196336
r13 0x7fffffffde80 140737488346752
r14 0x0 0
r15 0x0 0
rip 0x7ffff7732dd0 0x7ffff7732dd0
eflags 0x202 [ IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
Trong khi tôi hiểu được cho rax
, rcx
vv, GDB là chuyển đổi các giá trị để thập phân cho cột thứ hai, điều này dường như không nhất quán. Một số thanh ghi, cụ thể là rsp
và rip
hiển thị cùng một giá trị trong hex, ngay cả trong cột thứ hai. Mặt khác, eflags
hiển thị các cờ trong cột thứ hai.
Lý do mà gdb
thực hiện điều này là gì? Nếu nó sẽ hiển thị cùng một thông tin (trong trường hợp của rsp
và rip
), không phải là nó dư thừa? Ngoài ra, làm thế nào để khái quát hóa trên các kiến trúc khác? (Đầu ra trên là dành cho x86-64).
Tôi sẽ gọi đạo văn này ... khi bạn đặt câu hỏi [tại đây] (http://reverseengineering.stackexchange.com/questions/9221/output-of-gdb-info-registers) và bạn đã sao chép phần lớn câu trả lời của tôi ở đây mà không trích dẫn nguồn của bạn đúng ... Tôi mạnh mẽ không chấp nhận cách này! – perror
@perror ở đó tôi đã đề cập đến câu hỏi này. Ngoài ra tôi đã thay đổi câu trả lời của tôi loại bỏ một phần của câu trả lời của bạn. –