我遇到了GDB的问题。我正在研究缓冲区溢出,我需要运行命令$Info reg
来查找有关ebp
,eip
和esp
的信息,但我没有得到任何结果。我试用了Info reg $name
,但只有ebp
才有效。
基本上就是这样:
(gdb) i r
rax 0x7fffffffe180 140737488347520
rbx 0x0 0
rcx 0x7fffffffe570 140737488348528
rdx 0x7fffffffe1a6 140737488347558
rsi 0x6 6
...
...
...
es 0x0 0
fs 0x0 0
---Type <return> to continue, or q <return> to quit---+
gs 0x0 0
和
(gdb) info reg $ebp
ebp 0x41414141 1094795585
但
(gdb) info reg $eip
Invalid register `eip'
如何获取这些内存部分的值?
答案 0 :(得分:2)
amd64 arch
中没有名为eip
的注册表
让我展示什么是bp
/ ebp
/ rbp
,数据寄存器在amd64 arch上包含64位:
64 ---------------------------- 32 ---------- 16 ---- 8 ---- 0
| <--------------------------- rbp ------------------------> |
| <--------- ebp ---------> |
| <--- bp --> |
因此您可以通过不同的名称访问相应的位。
但您始终可以访问rip
作为整个单词,因为没有理由访问instruction pointer
的低位,因此,没有eip
/ {{1在amd64 arch中注册