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. epoll与select区别
  2. java 动态创建实例_java – 有没有办法动态创建类(而不是实例)?
  3. (7)操作系统安全机制一
  4. python socketserver最大连接_大聊Python----SocketServer
  5. 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
  6. leetcode16 3-Sum
  7. CSDN写博客时设置图片显示大小
  8. Android组件化demo实现以及遇坑分享
  9. 维特比算法(Viterbi Algorithm)
  10. python中提交post表单_python接口自动化二(发送post请求)
  11. 数据挖掘的方法有哪些?
  12. 合肥工业大学计算机和信息学院,合肥工业大学计算机与信息学院
  13. python编程爱心编码_用python画爱心及代码演示
  14. 标志寄存器的状态标志
  15. Yahoo Programming Contest 2019 D - Ears
  16. 互联网名词辨析:“顶”与“踩”
  17. cac会议投稿难度大吗_请问CAC2017会议录用的论文是不是全部送到EI检索啊,还是择优选给EI - 学术会议 - 小木虫 - 学术 科研 互动社区...
  18. Mysql的游标究竟怎么用–映日荷花别样红
  19. 牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟
  20. 【生态资讯】Codugh的BSV新token将助力开发者从其API中获利

热门文章

  1. java毕业设计创达内部管理系统Mybatis+系统+数据库+调试部署
  2. InterSystems IRIS 和 IRIS for Health 2021.2 正式发布!
  3. Python3环境搭建——下载Python
  4. iOS-Undefined symbols for architecture x86_64-- 调适萤石摄像头驱动程序--萤石开放平台
  5. 区分LLC和MAC协议差异详解
  6. MySQL 占用过高CPU时的优化手段
  7. 常用测试工具-----SecureCRT
  8. visionpro学习再研究,camera实时观察和调用(四,追着自己跑,megauging继续推进)
  9. 1209_MISRA_C规范学习笔记_Rule 10.6
  10. 2021年低压电工模拟试题及低压电工作业考试题库