为什么在GDB中,“ frame at”的值与ebp($ fp)寄存器的值不同?

时间:2018-09-23 00:39:45

标签: c assembly gdb stack

我试图通过研究GDB中的堆栈框架信息来理解基本的汇编语言。我试图找出当主函数调用一个函数时发生了什么。

但是我发现“ info frame”中“ frame at”的值与“ info reg”中ebp寄存器的值不同。按照惯例,这两个值不都应该表示堆栈帧的起点并且不相同吗?

(gdb) info frame
Stack level 0, frame at 0xffffced8:
...
(gdb) info reg
esp            0xffffcec0   0xffffcec0
ebp            0xffffced0   0xffffced0

我猜这是因为从0xffffced8到0xffffced0的地址用于存储数据,例如返回地址和输入参数?我如何验证我的想法?

1 个答案:

答案 0 :(得分:4)

GDB将帧地址定义为“属于该帧的最后一个单词之后的存储位置的地址。” http://visualgdb.com/gdbreference/commands/info_frame

(这可能是特定于体系结构的。ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_7.html