zoukankan      html  css  js  c++  java
  • 低版本环境运行高版本生成的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

    有时候,不小心知道了一些事,才发现自己所在乎的事是那么可笑。
  • 相关阅读:
    日志到底该如何打印?
    消息摘要(MessageDigest)
    URL编码及解码原理
    AES简介
    MySQL中整型长度的意义
    keytool生成密钥
    证书类型及秘钥库
    Base64编码及解码原理
    Holistically-Nested Edge Detection 论文总结
    全新bili主题
  • 原文地址:https://www.cnblogs.com/axjlxy/p/15131510.html
Copyright © 2011-2022 走看看