我对GDB有问题。我现在正在研究缓冲区溢出,我需要运行命令$Info reg来查找有关ebpeipesp的信息,但是没有任何结果。我试着对他们每个人都使用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/

10-11 19:42