• 低版本环境运行高版本生成的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进行编译,也不需要把目标环境进行逐一升级。

    https://www.modb.pro/db/76403

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    Maven项目中的配置文件找不到以及打包问题
    企业信息化快速开发平台 JeeSite
    http缓存浅谈
    <mvc:annotation-driven />注解意义
    Spring中报"Could not resolve placeholder"的解决方案
    eclipse怎么停止building workspace
    利用mybatis-generator自动生成代码
    Java 8 中的 Streams API 详解
    tomca配置文件自动还原问题的解决 server.xml content.xml 等
    tomcat 修改默认字符集
  • 原文地址:https://www.cnblogs.com/axjlxy/p/15131510.html
Copyright © 2020-2023  润新知