ASAN 检测内存错误 debug

18 篇文章 3 订阅
7 篇文章 5 订阅

ASAN 检测内存错误 debug

编译时添加选项

-fsanitize=address -fno-omit-frame-pointer

或在封装器中处理-c时添加编译选项,在链接阶段添加-lasan

插桩后生成.ll后,在链接阶段需添加-lasan选项,使其编译动态依赖库时有效

链接阶段生成动态库时添加-lasan,使其链接到动态库
若运行时提示如下错误:

==20926==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.

Q: I’ve built my shared library with ASan. Can I run it with unsanitized executable?

A: Yes! You’ll need to build your library with dynamic version of ASan and then run executable with LD_PRELOAD=path/to/asan/runtime/lib.

解决方法:

# 1. 找到libasan.so 动态库位置, 一般GCC都自带,
# 一般在 /usr/lib/gcc/XXXX/XXX/libasan.so
find / -name "libasan.so"
    
# LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/9/libasan.so ./openssl

配合Objdumpida pro等反汇编工具进行定位

#-d:将代码段反汇编
#-S:将代码段反汇编的同时,将反汇编代码和源代码交替显示,编译时需要给出-g,即需要调试信息。
#-C:将C++符号名逆向解析。
#-l:反汇编代码中插入源代码的文件名和行号。
#-j section:仅反汇编指定的section。可以有多个-j参数来选择多个section。

Objdump -C -S XXX.so > XXX.so.s

若遇到/bin/ld: DWARF error: invalid or unhandled FORM value: 0x25

  1. 更换 /bin/ld 为 llvm-lld
  2. 编译时增加-gdwarf-4选项
  3. 或者编译安装最新的binutils2.4版本 , 最新版本的已经支持DWARF-v5 参考我的文章Linux编译安装Binutils2.4版本

参考: DWARF error: invalid or unhandled FORM value: 0x25

配合addr2line 工具可以将地址转换为源代码位置

    #0 0x49cb6d  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x49cb6d)
    #1 0x4ea223  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4ea223)
    #2 0x4ea1b5  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4ea1b5)
    #3 0x4e9f14  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4e9f14)
    #4 0x4e9b8f  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4e9b8f)
    #5 0x4e61a1  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4e61a1)
    #6 0x4c2b00  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4c2b00)
    #7 0x4cac2c  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4cac2c)
    #8 0x4c6801  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4c6801)
    #9 0x4c4c83  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4c4c83)
    #10 0x4c9304  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4c9304)
    #11 0x4a0a97  (/home/workhome/llvm_test/llvm-tutorial-opt/work07/dev/mywrapper/exec/taint_track_dev+0x4a0a97)
    #12 0x7f8927588082  (/lib/x86_64-linux-gnu/libc.so.6+0x24082) (BuildId: 1878e6b475720c7c51969e69ab2d276fae6d1dee)

$ addr2line -e <binary_file> 0x3df53d
/home/workhome/XXXX/track-impl-dev.cpp:2459
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值