寻找libdwarf

1. 因为需要得到程序中,地址到符号的映射信息;而Pin只提供函数符号的信息,不提供其它符号,比如数据符号的信息,所以需要访问目标文件的调试信息。2. 在Pin的讨论组中,发现需要libelf和libdwarf来访问其它符号。据论坛所说,libelf访问任意ELF文件的符号信息(
摘要由CSDN通过智能技术生成

1. 因为需要得到程序中,地址到符号的映射信息;而Pin只提供函数符号的信息,不提供其它符号,比如数据符号的信息,所以需要访问目标文件的调试信息。

2. 在Pin的讨论组中,发现需要libelf和libdwarf来访问其它符号。据论坛所说,libelf访问任意ELF文件的符号信息(比如全局变量的信息),而libdwarf提供更多的访问功能——但是有个条件,其目标文件需要gcc的-g选项(-g选项默认生成DWARF格式的调试信息)。并且,http://wiki.dwarfstd.org/index.php?title=Main_Page(该链接来自DWARF官网)以及一些用户推荐使用SGI的libdwarf实现。

3. 但是,SGI已经放弃了对libdwarf的支持。并且,上述推荐给出的链接http://reality.sgiweb.org/davea/dwarf.html已经失效(也有可能是服务器挂了?)。所以,放弃。后来,在google中用“open source libdwarf”搜索,找到了libdwarf的新的官网,在source forge上面(参考11)。可以使用一下命令下载libdwarf的源码:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Libdwarf是一个开源的C库,用于解析ELF(Executable and Linkable Format)文件。通过使用Libdwarf,您可以提取ELF文件的各个部分,包括符号表、调试信息和源代码。 下面是使用Libdwarf解析ELF的一般步骤: 1. 打开ELF文件:使用dwarf_init()函数打开ELF文件,该函数接受ELF文件的文件描述符作为参数,并返回一个代表ELF文件的Dwarf_Debug结构。 2. 初始化DWARF信息:使用dwarf_elf_init()函数初始化DWARF信息,在打开的ELF文件上,此函数将检索DWARF相关的头部和节区。 3. 定位编译单元:使用dwarf_get_cu_die()函数获取第一个编译单元(DIE)的指针。编译单元是DWARF的基本单位,包含了一段源代码的调试信息。 4. 遍历DIE树:使用dwarf_siblingof()函数遍历所有的编译单元。利用DIE树的结构,您可以获取函数、变量、类型等的调试信息。 5. 解析调试信息:使用dwarf_diename()函数获取DIE的名称,使用dwarf_tag()函数获取DIE的标签。对于具有调试信息的不同DIE类型,您可以使用不同的dwarf_*函数来获取更详细的信息。 6. 关闭ELF文件:完成解析后,使用dwarf_finish()函数关闭ELF文件。 在使用Libdwarf解析ELF文件时,还需要了解DWARF调试信息的结构和格式。DWARF调试信息是以节区的形式存储在ELF文件中,它包含了源代码的行号、变量和函数的调试信息等。 总之,使用Libdwarf解析ELF文件需要使用该库提供的函数来打开ELF文件、定位编译单元、遍历DIE树以及解析调试信息,以获取所需的调试信息。希望这些步骤能帮助您理解如何使用Libdwarf进行ELF解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值