我试图通过研究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的地址用于存储数据,例如返回地址和输入参数?我如何验证我的想法?
答案 0 :(得分:4)
GDB将帧地址定义为“属于该帧的最后一个单词之后的存储位置的地址。” http://visualgdb.com/gdbreference/commands/info_frame
(这可能是特定于体系结构的。ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_7.html)