【Error】记一个快速排除bug的思路 :ASan log中没符号

版权声明:随意转载,需注明出处。by think_ycx https://blog.csdn.net/think_ycx/article/details/86527643

首先本文的思考是来自于刚刚解决了一个奇怪的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在我的环境中没有,重新增加一个符号链接解决了。

参考:https://github.com/google/sanitizers/issues/1043

那你有啥思考呢?

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

猜你喜欢

转载自blog.csdn.net/think_ycx/article/details/86527643