我试图解析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?谢谢。

最佳答案

这是一个符号寄存器名称。有关以下内容,请参见WineHQ的源代码中的xxx_map_dwarf_register方法:

  • i386
  • x86_64
  • sparc
  • arm

  • 例如,DW_OP_breg4是i386上的ESP

    如果还没有,请参阅以下内容。
  • http://source.winehq.org/source/dlls/dbghelp/dwarf.c
  • http://www.dwarfstd.org/doc/040408.1.html
  • 07-24 09:44
    查看更多