gdb 中的 "Stack" 部分是什么

What is the "Stack" section in gdb

在 gdb 中,似乎位于“堆栈”部分的任何内容始终与 %rip 寄存器相同。例如:

rip 0x0000555555554603
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554603 in main

在做 si 之后:

rip 0x0000555555554606
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554606 in main

gdb 中的“堆栈”部分到底是什么?在我看来,它或多或少是当前运行函数中的指令指针(%rip)(以及调用堆栈中尚未完成执行的先前%rips) .这是否正确,或者这部分告诉我们什么?

如果有用,这是我在 gdb 中使用的前端,称为 gdb dashboard:

这就是调用堆栈。 GDB 使您能够看到调用堆栈,因此您可以了解您是如何到达当前位置的(您通过哪些函数调用到达当前位置)。

调用堆栈是已调用但尚未返回的函数列表,从第 0 帧的当前函数开始,一直向下到最后一帧的 main。

在您的特定情况下,您的调用堆栈只是主要的,因为您没有调用其他函数(或者因为它们已经返回)。 %rip 指向当前指令,因此您在当前帧中的位置始终与其内容相对应。