微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析DWARF的有效方法

如何解决解析DWARF的有效方法

我尝试构建一个调试器,该调试器允许我在函数代码行上设置断点。所需的调试信息应从elf文件的DWARF部分中提取。我能够提取这些数据。我要调试的项目有50-100个文件,因此我需要大约10分钟的时间来使用readelf或pyelftools解析elf来获取所需的所有矮人信息。 为了提高速度,我的下一个方法是仅解析当前打开的源文件的调试信息。但是使用pyelftools也需要几分钟。

调试器如何快速获得信息?我将iSystem调试器与winIDEA一起使用,大约需要20秒。闪烁精灵,然后我可以立即在任何源文件中设置断点。

我是这个主题的新手,所以我们将不胜感激。

编辑:这是我使用pyelftools从一个文件获取函数地址的方式

def main():
  dwarfinfo = elffile.get_dwarf_info()

  for CU in dwarfinfo.iter_CUs():
    top_DIE = CU.get_top_DIE()

    if FILENAME in top_DIE.get_full_path():
      die_info_rec(top_DIE)
      return

def die_info_rec(die):
  if "subprogram" in die.tag:
    # Function found,get data
    return

解决方法

调试器如何快速获得信息?

仅阅读 所需的信息(myList = [YOUR LIST] newList = [x+123 for x in myList] print(newList) 格式的结构使您可以有效地跳过您不感兴趣的翻译单元和功能),并在{ {1}}。

我需要大约10分钟的时间才能使用readelf或pyelftools解析elf

这可能是您问题的重要部分:解析DWARF的输出可能比直接读取信息的效率低100到1000倍。

C的确提供了一个API来遍历编译单元,并且从理论上讲应该能够提供有效的访问。

您没有显示自己的使用方式,您可能没有有效地做到这一点。

即使如此,readelf还是用纯Python实现的,因此它的速度至少要比pyelftools之类的东西慢10倍。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。