gdb和当前函数堆栈
所以我知道我当前的区块在epb和esp之间 有没有办法按以下方式打印我的堆栈: 让我们说len=ebp esp 我希望gdb上的命令看起来像这样 x/lenx$esp 所以我要为正在执行的当前函数翻出堆栈上的内容? 我可以使用如下显示方式来执行此操作: 显示/lenx$esp 是否可能有一个每次都会改变的变量 似乎gdb和当前函数堆栈,gdb,stack,Gdb,Stack,所以我知道我当前的区块在epb和esp之间 有没有办法按以下方式打印我的堆栈: 让我们说len=ebp esp 我希望gdb上的命令看起来像这样 x/lenx$esp 所以我要为正在执行的当前函数翻出堆栈上的内容? 我可以使用如下显示方式来执行此操作: 显示/lenx$esp 是否可能有一个每次都会改变的变量 似乎display不允许此操作。因此,您可以定义自己的命令,并在需要查看函数堆栈时简单地调用它: define display_stack eval "x /%dbx $esp", $
display
不允许此操作。因此,您可以定义自己的命令,并在需要查看函数堆栈时简单地调用它:
define display_stack
eval "x /%dbx $esp", $ebp-$esp
end
然后在调试程序时:
(gdb) display_stack
如果您需要在每个步骤上查看函数堆栈,您可以1)定义另一个命令nn
,并在调试函数时使用它2)将钩子用于伪命令“stop”:
define nn
n
display_stack
end
define hook-stop
echo "hook-stop, display_stack:\n"
display_stack
end
有用链接:
display/10wx$esp
或例如显示40个字节:display/40bx$esp
。是的,我知道这种方式,我的问题是是否可能有一个每次都会更改的变量(即len=$ebp-$esp)。因此,当esp更改时,显示屏将计算len的新值,并显示堆栈上的内容。