当前位置:嗨网首页>书籍在线阅读

24-addr2line

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.6.2 addr2line

我们在代码清单13-12中介绍了mtrace的使用,你可以看到这个分析脚本的输出信息中包含了文件名和行号。mtrace是一个用Perl语言编写的脚本,它使用了addr2line来读取可执行文件(ELF格式)中的调试信息,并显示出与地址相对应的行号。在代码清单13-12中,mtrace分析了可执行程序mt_ex,还是使用它,我们可以用addr2line找出一个虚拟地址所对应的文件名和行号:

375.png 注意,除了文件和行号之外,上面的命令还显示了函数名称 put_data() 。这说明地址0x80487c6位于文件mt_ex.c的第64行,而且是在函数 put_data() 中。对于那些包含多个文件名的二进制文件,比如Linux内核,这就更有用了:

376.png 这个特别的例子突出了我们在本章中反复强调的一点:这是一个与具体架构相关的工具。必须针对目标架构配置和编译你的工具,这样,它才能和目标二进制文件的架构相匹配。和交叉编译器一样,addr2line也是一个交叉工具,而且它是二进制实用程序软件包的一部分。