有人可以帮我理解这个: -
(gdb) info frame
Stack level 0, frame at 0xb75f7390:
 eip = 0x804877f in base::func() (testing.cpp:16); saved eip 0x804869a
 called by frame at 0xb75f73b0
 source language c++.
 Arglist at 0xb75f7388, args: this=0x0
 Locals at 0xb75f7388, Previous frame's sp is 0xb75f7390
 Saved registers:
  ebp at 0xb75f7388, eip at 0xb75f738c
什么是"ebp,eip Locals at和Previous Frame's sp"是什么意思?请解释
pep*_*ero 76
(gdb)信息框架
堆栈级别0
帧位于0xb75f7390
base :: func()中的eip = 0x804877f(testing.cpp:16); 保存了eip 0x804869a
eip是下一条执行指令的寄存器(也称为程序计数器).所以此时,执行的下一个是"0x804877f",这是testing.cpp的第16行.
保存的eip"0x804869a"被称为"返回地址",即从该被调用者堆栈返回后在调用者堆栈帧中恢复的指令.它在"CALL"指令时被压入堆栈(保存它以便返回).
帧由0xb75f73b0调用
源语言c ++
Arglist在0xb75f7388,args:this = 0x0
当地人在0xb75f7388,
局部变量的地址.
前一帧的sp是0xb75f7390
这是前一帧的堆栈指针指向(调用者帧)的位置,在调用时,它也是被调用堆栈帧的起始内存地址.
保存的寄存器: 这是被调用堆栈上的两个地址,用于两个保存的寄存器.
ebp在0xb75f7388,即保存调用者堆栈帧的"ebp"寄存器的地址(请注意,它是寄存器,而不是调用者的堆栈地址).即,对应于"PUSH%ebp"."ebp"是通常被认为是该堆栈帧的本地的起始地址的寄存器,它使用"offset"来寻址.换句话说,局部变量的操作都使用这个"ebp",所以你会看到类似的东西等mov -0x4(%ebp), %eax.  
如前所述,在0xb75f738c处跳过,但这里是堆栈的地址(包含值"0x804877f").