【问题标题】:gdb and current function stackgdb 和当前函数栈
【发布时间】:2014-06-17 13:11:16
【问题描述】:

所以我知道我当前的块在 epb 和 esp 之间 有没有办法通过以下方式打印我的堆栈: 让我们说 len=ebp-esp 我想要一个看起来像这样的 gdb 上的命令 x/lenx $esp

所以我正在为当前正在执行的函数打印堆栈上的内容? 我可以使用如下显示来做到这一点: 显示/lenx $esp ?

【问题讨论】:

  • 是的,你可以。例如:显示 10 个字:display /10wx $esp 或例如显示 40 个字节:display /40bx $esp
  • 是的,我知道这种方式,我的问题是是否有可能有一个每次都会改变的变量(即 len = $ebp-$esp)。所以当 esp 改变时,显示器会计算 len 的新值并显示我的堆栈中的内容。

标签: gdb stack


【解决方案1】:

是否有可能有一个每次都会改变的变量

似乎display 不允许这样做。因此,您可以定义自己的命令,并在需要查看函数堆栈时简单地调用它:

define display_stack
  eval "x /%dbx $esp", $ebp-$esp
end

然后在调试你的程序时:

(gdb) display_stack

如果您需要在每个步骤中查看函数堆栈,您可以 1) 定义另一个命令 nn 并在调试函数时使用它 2) 对伪命令“停止”使用钩子:

define nn
  n
  display_stack
end

define hook-stop
  echo "hook-stop, display_stack:\n"
  display_stack
end

有用的链接:

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2016-12-24
    • 2016-11-04
    • 2021-11-14
    相关资源
    最近更新 更多