【问题标题】:Why in GDB, the value of "frame at" is different from the value of ebp($fp) register?为什么在 GDB 中,“frame at”的值与 ebp($fp) 寄存器的值不同?
【发布时间】:2019-02-26 22:37:59
【问题描述】:

我试图通过查看 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这个地址是用来存放返回地址和输入参数等数据的吧?如何验证我的想法?

【问题讨论】:

    标签: c assembly gdb stack


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 2016-08-26
      • 1970-01-01
      • 2012-04-03
      • 2022-06-22
      • 2017-05-09
      • 2012-10-28
      • 2011-07-22
      相关资源
      最近更新 更多