在 gdb 中,似乎“堆栈”部分中的任何内容始终与%rip
寄存器相同。例如:
rip 0x0000555555554603
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554603 in main
做完之后si
:
rip 0x0000555555554606
─── Stack ────────────────────────────────────────────────────────────────────────────────────────
[0] from 0x0000555555554606 in main
gdb 中的“堆栈”部分究竟是什么?在我看来,它或多或少是%rip
当前正在运行的函数中的指令指针 ( ) (以及%rip
尚未完成执行的调用堆栈中的前一个s)。这是否正确,或者本节告诉我们什么?
如果有用,这是我在 gdb 中使用的前端,称为gdb dashboard
:
那就是调用栈。GDB 使您能够查看调用堆栈,因此您可以了解您是如何到达当前位置的(您通过哪些函数调用到达了当前位置)。
调用堆栈是已调用但尚未返回的函数列表,从第 0 帧的当前函数开始,一直到最后一帧的 main 函数。
在您的特定情况下,您的调用堆栈只是主要的,因为您没有调用其他函数(或者因为它们已经返回)。%rip 指向当前指令,因此您在当前帧中的位置始终与其内容相对应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句