【问题标题】:stack unwinding in dwarf2dwarf2中的堆栈展开
【发布时间】:2011-07-10 21:17:55
【问题描述】:

我不明白 dwarf2 中的堆栈展开如何确保在一些非常基本的 ABI(应用程序二进制接口)场景中可靠地恢复参数。考虑一个 ABI,它表示前三个参数必须在寄存器上并且在堆栈上。据我了解,dwarf2 堆栈展开机制确保如果 CFI 表被正确填充,则可以在当前帧的调用点获取寄存器的值。但是,这并不能让您进入调用者的序言并知道参数寄存器的内容是什么。所以,我认为应该有一种方法可以在同一帧中的不同点找到寄存器的值(在 .debug_frame 部分中编码的表格只给出了前一帧中的位置)。

我的理解有什么问题吗?在这种情况下,基于 dwarf2 调试格式的调试器如何工作?对于在堆栈上传递参数的架构,恢复程序中所有点的值(对于任何帧)不会有任何问题。

【问题讨论】:

    标签: debugging stack-unwinding dwarf


    【解决方案1】:

    我认为我当时的理解是不正确的。 dwarf2 中堆栈展开的工作方式是使用调用帧信息 (CFI)。这将使调试器创建先前帧之一的状态。该帧的位置表达式将使调试器知道参数的位置。

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2011-12-13
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多