【问题标题】:In the DWARF info, what do they exactly mean by the DW_OP registers?在 DWARF 信息中,DW_OP 寄存器的确切含义是什么?
【发布时间】:2012-11-01 05:28:19
【问题描述】:

我正在尝试解析 DWARF 信息,然后使用该信息使用 pin 工具从程序中获取局部变量。这有点像在类固醇上使用pin 作为GDB。但是,我很难理解它们对局部变量和分配的寄存器的含义。

例如,

<2>< 1214>  DW_TAG_variable
    DW_AT_name                  mts
    DW_AT_decl_line             69
    DW_AT_type                  <90>
    DW_AT_location              DW_OP_breg4+44

我知道,为了从变量 mts 中获取数据,我必须将 44 添加到某个寄存器,我的问题是我不知道他们在谈论哪个寄存器。我该如何解释这个?我在网上找不到任何东西。

另一个例子是DW_OP_fbreg、DW_OP_breg5等等。

有人知道他们在x86 上下文中谈论的是哪些寄存器吗?他们在谈论ebp还是esp?谢谢。

【问题讨论】:

    标签: c++ c debugging stack dwarf


    【解决方案1】:

    这是一个象征性的寄存器名称。请参阅WineHQ 的源代码中的xxx_map_dwarf_register 方法:

    例如,DW_OP_breg4 在 i386 上是 ESP。

    如果您还没有这样做,请参阅以下内容。

    【讨论】:

    • 是的,这表明它存储在 esp 加 44 的地址中。DWARF 规范可以在dwarfstd.org 找到——这通常是最好的参考,虽然它没有架构/ABI——具体信息,例如 DWARF 寄存器编号如何映射到 i386 寄存器名称。
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2017-04-19
    • 2011-05-06
    • 2013-07-22
    • 2010-11-05
    • 2016-10-27
    相关资源
    最近更新 更多