博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Error】记一个快速排除bug的思路 :ASan log中没符号
阅读量:4207 次
发布时间:2019-05-26

本文共 2236 字,大约阅读时间需要 7 分钟。

首先本文的思考是来自于刚刚解决了一个奇怪的bug,其中解决的思路是值得借鉴的。由于是技术上的思考,考虑了一下还是记录在这里。

究竟是什么bug?

在使用clang开启ASan编译一个要fuzz的软件时,编译是没问题的,可以编译出binary通过。但是在使用该 binary来复现crash时,ASan的log中没有符号信息。具体的来说,看log吧:

Direct leak of 112 byte(s) in 1 object(s) allocated from:    #0 0x4b91d8  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/bin/magick+0x4b91d8)    #1 0x7ffff500703c  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x1803c)    #2 0x7ffff500713a  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x1813a)    #3 0x7ffff5027454  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x38454)    #4 0x7ffff501cf4e  (/usr/lib/x86_64-linux-gnu/libomp.so.5+0x2df4e)    #5 0x7ffff6f761fc  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickCore-7.Q16HDRI.so.6+0x5f91fc)    #6 0x7ffff74b521e  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickCore-7.Q16HDRI.so.6+0xb3821e)    #7 0x7ffff6cffabc  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickCore-7.Q16HDRI.so.6+0x382abc)    #8 0x7ffff6d03e2c  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickCore-7.Q16HDRI.so.6+0x386e2c)    #9 0x7ffff63c68cf  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickWand-7.Q16HDRI.so.6+0x18d8cf)    #10 0x7ffff64f6e57  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/lib/libMagickWand-7.Q16HDRI.so.6+0x2bde57)    #11 0x4eadb7  (/root/Fuzz/fuzz-imageMagick/ImageMagick/bin-afl-clang-docker/bin/magick+0x4eadb7)    #12 0x7ffff4a2f82f  (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)SUMMARY: AddressSanitizer: 528 byte(s) leaked in 2 allocation(s).

上面的第#12处,是编译好的binary,magick。我们可以看到是在magick+0x4eadb7出了问题。但是由于我们不知道这个0x4eadb7对应的是源码中的第几行,导致我们不知道这个bug究竟是在源码中哪个函数中由于什么原因导致的。丢到IDA中看一看肯定没问题,但是和直接看源码肯定还是有很大差别的。报给官方直接丢一个binary也是很不负责的。废话说太多了,那么这个问题可能是什么原因导致的呢?如何快速解决这个bug?

- google找一下有木有人遇到同样的错误,没有(也可能是我搜索的关键字不太好)

- 别人在做的时候是如何做的?(使用afl开ASan来重新编译binary测试)

- 你们的环境步骤都一致吗?(一致,clang版本有差别,更换了3.8和3.9的版本还是一样的问题)

- 再次这个问题的本质再细化一点是什么?(ASan的log中没有符号)

- ASan熟悉吗?符号记录的原理是什么?(重新看ASan给的官方教程,发现是依赖llvm-symbolizer)

llvm-symbolizer在我的环境中没有,重新增加一个符号链接解决了。

参考:

那你有啥思考呢?

一直以来,谨记遇到问题,需要关注这个问题的本质是什么。有人说,有时你能够准确的把你的问题写下来(本质上就是能够准确的描述出这个问题是什么),你就已经解决这个问题一大半了。现在想想,确实如此。这个问题耗费了一天的时间才解决,实在是太菜了,再一次印证了:看问题要看得更本质。

转载地址:http://lgmli.baihongyu.com/

你可能感兴趣的文章
0120 springboot集成Mybatis和代码生成器
查看>>
0121 spring-boot-redis的使用
查看>>
0203 生成mysql的数据库的数据字典
查看>>
0207 软件是如何运行和崩溃的?
查看>>
0203 生成mysql的数据库的数据字典
查看>>
0215 docker环境
查看>>
0216 aop和打印数据库执行日志
查看>>
0219 springmvc-拦截器和响应增强
查看>>
0223 研发工程师如何提高接口质量?
查看>>
0224 如何面对高并发?缓存?中台为什么会火?
查看>>
0226 rest接口设计
查看>>
0228 我的潘多拉
查看>>
0302 中台落地前概念和思考
查看>>
0228 我的潘多拉
查看>>
0302 中台落地前概念和思考
查看>>
0219 springmvc-拦截器和响应增强
查看>>
0308 软件系统的非功能需求
查看>>
0308 软件系统的非功能需求
查看>>
0309 软件基本原理1
查看>>
0312 java接口测试三棱军刺rest-assured
查看>>