首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析矮星的有效方法

解析矮星的有效方法
EN

Stack Overflow用户
提问于 2020-10-07 05:56:35
回答 1查看 1.4K关注 0票数 0

我试图构建一个调试器,它允许我在函数或代码行上设置断点。所需的调试信息应该从精灵文件中的侏儒部分中提取。我能提取这些数据。我想要调试的项目有50-100个文件,所以我需要大约10分钟的时间来解析精灵,用readelf或pyelftools来处理我需要的所有矮人信息。为了提高速度,我的下一个方法是只解析当前开放源文件的调试信息。但使用pyelftools也需要几分钟的时间。

调试器是如何如此快速地获取信息的?我使用带有iSystem的winIDEA调试器,大约需要20秒。为了闪现精灵和之后,我可以立即设置断点在任何源文件。

我对这个话题很陌生,所以任何帮助都是非常感谢的。

编辑:我就是这样使用pyelftools从一个文件中获取函数地址的。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 02:25:16

调试器是如何如此快速地获取信息的?

通过只读取他们需要的信息(DWARF格式的结构使得您可以有效地跳过您不感兴趣的翻译单元和函数),并在C中完成它。

,我需要大约10分钟的时间来解析精灵,用可读的工具或pyelftools。

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

pyelftools似乎确实提供了一个在编译单元上迭代的API,理论上应该能够提供高效的访问。

你没有展示你是如何使用它的,你可能没有高效地使用它。

即使如此,pyelftools也是用纯Python实现的,因此很可能至少比libdwarf之类的东西慢10倍。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64238017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档