Linux(arm架构)上的asan的安装和使用

背景

最近的项目代码需要做动态扫描,主要扫描是否存在动态内存申请、释放,以及内存溢出等问题。

系统:Linux(麒麟V10)
平台:aarch64(鲲鹏)

asan下载和安装

rpm包下载

安装gcc编译器时一般是可以一并安装asan工具的。如果所在服务器没有安装asan工具,则可以寻找对应编译器版本的asan的rpm包进行安装。

项目使用的gcc为7.3.0,因此我们在下面的网站找到了7.3.0对应的asan工具rpm包:

https://update.cs2c.com.cn/NS/V10/V10SP3/os/adv/lic/base/aarch64/Packages

  • libsasan-7.3.0-20220207.45.ky10.aarch64.rpm
  • libsasan-static-7.3.0-20220207.45.ky10.aarch64.rpm

如果要更高级版本的rpm,可以在上面的地址上寻找。

rpm包安装

下载上面两个rpm包后,直接在rpm包所在路径下执行:

rpm -ivh *.rpm

安装后,在/usr/lib/gcc/aarch64-linux-gnu/7.3.0/下会找到libasan.a。
为啥不找libasan.so呢?因为如果使用动态库,就需要使用环境变量LD_PRELOAD,以确保libasan.so首先被加载。这样会导致设置后执行任何可执行程序都会进行预加载,包括linux指令。会使测试过程举步维艰 … …

因此后面我们使用libasan.a。

编译

必要的编译选项:

  • “-static-libasan -fsanitize=address -fno-onit-frame-pointer”
  • “-g”

环境变量

export ASAN_OPTIONS=halt_on_error=0:detect_leaks=1:log_path=../log/asan_err.log
  • halt_on_error=0 防止执行过程中发现内存问题导致程序中断退出
  • detect_leaks=1 检测内存泄漏
  • log_path=…/log/asan_err.log asan的日志输出到…/log/asan_err.log中

程序退出

使用kill -2(Ctrl+C)退出程序,否则asan无法输出完整的检测结果日志。
程序结束后,即可查看…/log/asan_err.log日志。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值