可以帮我理解一下吗:-
(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的sp”是什么意思?请解释
最佳答案
(GDB)信息框
堆栈级别0
backtrace中的
帧位于0xb75f7390
eip = 0x804877f在base::func()中(testing.cpp:16);保存的eip 0x804869a
因此,此刻要执行的下一个操作是在“0x804877f”处,即test.cpp的第16行。
由帧在0xb75f73b0处调用
源语言c++
Arglist位于0xb75f7388,参数:此= 0x0
当地人,位于0xb75f7388 ,
局部变量的地址。
上一帧的sp为0xb75f7390
这是前一帧的堆栈指针指向(调用者帧)的位置,在调用时,它也是被调用堆栈帧的起始内存地址。
保存的寄存器:
这是被调用者堆栈上的两个地址,用于保存两个寄存器。
那是保存调用者堆栈帧的“ebp”寄存器的地址(请注意,它是寄存器,而不是调用者堆栈地址)。
即对应于“PUSH%ebp”。 “ebp”是通常被视为该堆栈帧本地地址的起始地址的寄存器,使用“偏移量”进行寻址。
换句话说,局部变量的操作都使用此“ebp”,因此您将看到类似于
mov -0x4(%ebp), %eax
等的信息。如前所述,但这是堆栈的地址(其中包含值“0x804877f”)。
关于gdb - 如何解释GDB “info frame”输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5144727/