低版本环境运行高版本生成的ASan程序

Address Sanitizer(ASan)是一个快速的内存错误检测工具。它非常快,只拖慢程序两倍左右(比起Valgrind快多了)。它包括一个编译器instrumentation模块和一个提供malloc()/free()替代项的运行时库。

从gcc 4.8开始,AddressSanitizer成为gcc的一部分。当然,要获得更好的体验,最好使用4.9及以上版本,因为gcc 4.8的AddressSanitizer还不完善,最大的缺点是没有符号信息。

但是,由于经常限于现有测试环境或生产环境的原因,目标程序的ASan版本往往会使用gcc高版本进行编译生成,但是既有环境又是受限于操作系统的低版本,因此需要将高版本的目标程序移植到低版本环境运行时,往往会启动失败,因为缺少相应的库或系统版本太低。这时需要做一些额外的配置。

  1. 将libasan.so.3库拷贝到目标程序的运行依赖库路径,或直接放置到目标程序同路径下;
  2. 如果遇到libstdc++.so库版本的问题(符号识别问题),也需要更新目标环境的libstdc++.so库文件。root下执行ll /lib64/libstdc++.so.6,查看软连接指向的版本,如果是6.0.22,则忽略以下操作;并记下该版本文件名称;cp libstdc++.so.6.0.22到/lib64/目录下,重新定位软连接:ln –snf /lib64/libstdc++.so.6.0.22 /lib64/libstdc++.so.6

然后启动目标程序,即可运行成功,这样既不需要再低版本gcc下重新安装asan进行编译,也不需要把目标环境进行逐一升级。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值