如何解决解析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 举报,一经查实,本站将立刻删除。