我试图通过查看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 0xffffced0 0xffffced0我猜是因为从0xffffced8到0xffffced0的地址用来存储数据,比如返回地址和输入参数?我如何验证我的想法?
发布于 2018-09-23 09:27:39
GDB将帧地址定义为“属于帧的最后一个字之后的内存位置的地址”。http://visualgdb.com/gdbreference/commands/info_frame
(这可能是特定于架构的。ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_7.html)
https://stackoverflow.com/questions/52462014
复制相似问题