问题描述
在gdb中,似乎“堆栈”部分中的内容始终与%rip
寄存器相同。例如:
rip 0x0000555555554603
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554603 in main
在完成si
之后:
rip 0x0000555555554606
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554606 in main
gdb中的“堆栈”部分到底是什么?在我看来,它似乎是当前正在运行的函数(以及调用堆栈中尚未完成执行的先前%rip
)中的指令指针(%rip
)。这是正确的,还是本节告诉我们什么?
如果有用,这是我在gdb中使用的前端,称为gdb dashboard
:
解决方法
那是调用堆栈。 GDB使您可以查看调用堆栈,因此可以了解如何到达目标位置(经历了哪些函数调用才能到达目标位置)。
调用堆栈是已调用但尚未返回的函数的列表,从第0帧处的当前函数开始,一直到最后一帧的main为止。
在您的特定情况下,您的调用堆栈只是主要的,因为您尚未调用其他函数(或因为它们已经返回)。 %rip指向当前指令,因此您在当前框架中的位置始终与其内容相对应。