在DWARF信息中,DW_OP寄存器的确切含义是什么?

时间:2012-11-12 18:51:56

标签: c++ c debugging stack dwarf

我正在尝试解析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_fbregDW_OP_breg5等等。

任何人都知道他们在x86上下文中谈论了哪些寄存器?他们在谈论ebp还是esp?感谢。

1 个答案:

答案 0 :(得分:5)

这是一个象征性的注册名称。请参阅WineHQ来源中的xxx_map_dwarf_register方法:

例如,i386上的DW_OP_breg4ESP

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