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的源码: