Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这种功能对于追踪死机地址转换成源码位置很有意义。

在调用 Addr2line 工具时,要使用 -e 选项来指定可执行映像是 test,通过使用 -f 选项,可以告诉工具输出函数名。
例如:addr2line -e test   0x1234654(死机地址)  -f 
这个工具在我们日常开发中非常有用。他可以快速的定位到程序死机的位置。注意,这里说的死机是指程序因为非法地址访问,除数为0,地址未对其访问(部分平台有此限制),bus error等错误造成的程序崩溃。不包含死锁、程序死循环等造成的死机现象。
在说明该工具的用法之前,先了解两个概念:
1. epc:在学校我们学习汇编的时候知道pc是CPU保存当前运行指令地址的寄存器,那么这个epc就是error pc。保存的是当程序崩溃时,造成指令异常的那条指令的地址。也就是问题的第一现场。比如,程序因为非法地址访问造成了死机,那么epc保存的就是直接造成非法地址访问的那条指令的地址。
2. ra:当前程序返回地址。当程序进行函数调用时更新该寄存器。当程序死机时,该地址就是第二现场。
一般程序崩溃时都有epc、ra的地址打印出来。
addr2line实例
命令:addr2line -e integration/product/a.out 802f07a8 –f
其中integration/product/a.out为造成死机对应的程序。 802f07a8 为地址。比如上面一张所说的epc地址或者是ra地址。
待查地址的确定?
有时出现的是fault add 地址,有时出现的是epc地址(exception地址)或者pc地址(通常是指向函数的地址),针对fault add地址,此处假设该为0x00250465,而有没有堆栈,则可以先通过查看进程的内存映射信息,定位到地址所在的映像文件(动态库or可执行文件)所在的位置。
cat /proc/PID/maps 查看内存信息,例如:
[root@rhel5 ~]# cat /proc/2674/maps 
00110000-00239000 r-xp 00000000 08:02 130647     /lib/libcrypto.so.0.9.8e
00239000-0024c000 rwxp 00129000 08:02 130647     /lib/libcrypto.so.0.9.8e
0024c000-00250000 rwxp 0024c000 00:00 0 
00250000-00252000 r-xp 00000000 08:02 130462     /lib/mylib-2.5.so
00252000-00253000 r-xp 00001000 08:02 130462     /lib/mylib.so
找到对应的地址区间和映像(库)之后,然后利用fault addr地址和该库地址区间计算出,该死机地址在该库中的偏移地址。接着使用addr2line 来定位该地址的所在的代码位置。
使用此命令时有几个条件:
(1)test 可执行文件在gcc编译时必须包含-g选项;
(2)(死机)地址的确定;
相关示例:
http://blog.sina.com.cn/s/blog_6b94d5680101p7fm.html
http://www.linuxidc.com/Linux/2011-05/35786.htm

http://blog.csdn.net/whz_zb/article/details/7604760

转自:http://blog.csdn.net/kehyuanyu/article/details/37668195

addr2line查看死机代码的位置相关推荐

  1. windows操作系统死机代码及其含义解剖

    使用Windows的用户大多会遇到蓝屏死机的情况,尤其是Windoows 7与windows 10的用户遇到蓝屏的情况可能更多.在一些关于硬件的致命错误中,Windows出现蓝色屏幕后,往往会有一些代 ...

  2. 用 addr2line 定位 OOPS 死机代码位置

    1. 一般 OOPS 死机时内核的 LOG kmsg 中会出现些函数地址等信息. 2. 执行 android代码包中的addr2line bin文件,比如文件 ./prebuilts/gcc/linu ...

  3. 让对方计算机死机的代码,微信让对方死机代码是什么?一串代码卡死微信

    随着网络技术的发达,越来越多的人学会写代码.不少人也会通过代码,给别人来一场恶作剧.就例如通过给对方发送一串代码便能让对方的微信死机,大家是不是都觉得很神奇呢?那么微信让对方死机的代码是什么呢?接下来 ...

  4. Windows死机代码翻译大全

    0x0000 操作完成 0x0001 不正确的函数 0x0002 系统找不到指定的文件 0x0003 系统找不到指定Sample TextSample TextSample Text的路径 0x000 ...

  5. windows死机代码

    0x0000 操作完成 0x0001 不正确的函数 0x0002 系统找不到指定的文件 0x0003 系统找不到指定的路径 0x0004 系统无法打开文件 0x0005 拒绝存取 0x0006 无效的 ...

  6. c语言死机代码大全,最近在学C语言,有段代码一运行就死机,不知为何,求大神帮忙!...

    新_day_day_new #include #define N 10 //打印分数 int PScore(int score[]) { int i; printf("\n"); ...

  7. 升级BIOS解决DELL R730XD虚拟机死机问题

    1台新配置的DELL R730XD(配置有2个Intel E5-2640 V4的CPU.128GB内存.H730的RAID卡.12块4TB的SATA硬盘.2个495W电源),在安装VMware ESX ...

  8. 批处理(cmd)如何制作死机病毒?

    在网上看到许多人做的死机病毒都很拉,只是一次性的,而且不一定会死机 例如这段代码: @echo off :start start cmd goto start 虽然会卡,但还是可以打开任务管理器结束c ...

  9. 程序员的小技能,1行代码修改开机密码、1张图片让你电脑死机

    程序员很忙,忙着敲代码debug,程序员有时候也很闲,闲下来的就是就开始自黑,自黑的段子越来越多还被编出了一首诗:"格子衬衫双肩包.钱多话少死得早,晚睡晚起加班多,没事就和产品吵" ...

最新文章

  1. Window Mobile SmartPhone智能手机软件开发vs2005 简体中文版 设置指南!
  2. 一、Windows Server 2016 AD服务器搭建
  3. 服务器管理安全(上)
  4. 期货与期权(part9)--交易员类型和交易指令类型
  5. 使用 ML.NET 进行保险价格预测
  6. vue if判断_VUE学习记录2
  7. mysql模糊查询索引失效_MySql学习笔记(九):索引失效
  8. ASP.NET MVC HandleErrorAttribute 和 远程链接
  9. rf接口自动化之结果校验
  10. android studio partially installed,APK安装流程详解2——PackageManager简介
  11. 语音合成(TTS)论文优选:Learning to Speak Fluently in a Foreign Language: Multilingual Speech Synthesis and Cr
  12. 1. SpringBoot 整合 Canal
  13. E:无法定位软件包 zlib-devel
  14. 剪贴板查看器:CopyClip 2 for Mac
  15. PDF转Word非常好的网站
  16. C语言— —编程语言与Hello World!
  17. C语言实现简单的登录操作
  18. echart简单介绍
  19. 据说有一种女人嫁给谁都能幸福
  20. 任意文件——固定到“开始“屏幕

热门文章

  1. 有知道新钶信息系统公司、艾奕康(以前叫茂尔盛)、梦网科技的吗?
  2. python电化学cv曲线怎么画_我如何使用参数自动绘制翼型
  3. Seq2Seq+Attention生成式文本摘要
  4. 监控视频压缩2—Block-Composed Background Reference for High Efficiency Video Coding
  5. javaweb项目接入CAS单点认证(含自身系统的三员过滤)
  6. 2021年低压电工模拟试题及低压电工作业考试题库
  7. 一针见血的工作励志语录
  8. 推荐系统快速开发--豆瓣电影推荐系统的快速实战开发(一)
  9. Hypermesh三维网格划分技能,以汽车发动机连杆结构为例
  10. ModbusRTU之CRC校验