我知道如何使用gdb并使用info frame,但我找不到基址、堆栈和保存的基指针的值。我该如何获取这些值?我能否在info frame提供的信息中找到它们,还是我需要做其他事情?
info reg
命令可以告诉你寄存器的内容,包括栈指针(64位x86上的rsp
)和基址指针(64位x86上的rbp
):
(gdb) info reg
rax 0x401340 4199232
rbx 0x0 0
rcx 0x0 0
rdx 0x7fffffffe608 140737488348680
rsi 0x7fffffffe5f8 140737488348664
rdi 0x0 0
rbp 0x0 0x0
rsp 0x7fffffffe508 0x7fffffffe508
r8 0x7ffff7dd4e80 140737351863936
r9 0x7ffff7dea560 140737351951712
r10 0x7fffffffe2d0 140737488347856
r11 0x7ffff7a50290 140737348174480
r12 0x4013e2 4199394
r13 0x7fffffffe5f0 140737488348656
r14 0x0 0
r15 0x0 0
rip 0x7ffff7a50290 0x7ffff7a50290 <__GI_exit>
eflags 0x202 [ IF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
info frame
获取:(gdb) info frame
Stack level 0, frame at 0x7fffffffe510:
rip = 0x7ffff7a50290 in __GI_exit (exit.c:104); saved rip = 0x40134d
called by frame at 0x7fffffffe520
source language c.
Arglist at 0x7fffffffe500, args: status=0
Locals at 0x7fffffffe500, Previous frame's sp is 0x7fffffffe510
Saved registers:
rip at 0x7fffffffe508