C 为什么在GDB中,“;框架位于;是否与ebp($fp)寄存器的值不同?
我试图通过查看GDB中的堆栈帧信息来理解基本汇编语言。我试图找出当一个函数被main函数调用时发生了什么 但是我发现“info frame”中的“frame at”的值与“info reg”中的ebp寄存器的值不同。按照惯例,这两个值不应该都指示堆栈帧的起点并且相同吗C 为什么在GDB中,“;框架位于;是否与ebp($fp)寄存器的值不同?,c,assembly,gdb,stack,C,Assembly,Gdb,Stack,我试图通过查看GDB中的堆栈帧信息来理解基本汇编语言。我试图找出当一个函数被main函数调用时发生了什么 但是我发现“info frame”中的“frame at”的值与“info reg”中的ebp寄存器的值不同。按照惯例,这两个值不应该都指示堆栈帧的起点并且相同吗 (gdb) info frame Stack level 0, frame at 0xffffced8: ... (gdb) info reg esp 0xffffcec0 0xffffcec0 ebp
(gdb) info frame
Stack level 0, frame at 0xffffced8:
...
(gdb) info reg
esp 0xffffcec0 0xffffcec0
ebp 0xffffced0 0xffffced0
我猜这是因为0xffffced8到0xffffced0之间的地址用于存储返回地址和输入参数等数据?如何验证我的想法?GDB将帧地址定义为“属于帧的最后一个字之后的内存位置地址。” (这可能是特定于体系结构的。)