我对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'
我怎样才能得到这些部分的记忆值?
最佳答案
amd64架构中没有名为eip
的注册表
让我来说明什么是bp
/ebp
/rbp
,数据寄存器包含amd64 arch上的64位:
64 ---------------------------- 32 ---------- 16 ---- 8 ---- 0
| <--------------------------- rbp ------------------------> |
| <--------- ebp ---------> |
| <--- bp --> |
所以你可以用不同的名称访问相应的位。
但是您总是将
rip
作为一个整体访问,因为没有理由访问instruction pointer
的低位,因此在amd64 arch中没有eip
/ip
寄存器关于linux - 使用GDB和Info Reg命令失败。似乎找不到ebp,eip和esp值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12209568/