当前位置: 首页 > news >正文

通过strings二进制文件分析工具排查 version ‘GLIBC_2.25‘ not found 报错

strings命令简介

  • strings命令用于打印文件中可打印字符串, 可以打印文本文件、可执行程序,库文件等。一般用于分析可执行程序和库文件。
  • strings命令较为常用的功能有以下两种
    • 查看系统的GLIBC版本和目标文件的依赖的GLIBC版本,当系统的GLIBC版本与目标文件的依赖的GLIBC版本不匹配时,就会出现version ‘GLIBC_2.25’ not found这种报错
    • 查看某一个函数在哪个文件中

查看系统支持的GLIBC版本和目标程序依赖的GLIBC版本是否匹配

  • 背景知识
    • 在Linux平台下,GLIBC指的是GNU C Library(GNU C标准库),它是Linux操作系统中最基础、最重要的库之一。glibc是实现C语言标准库的开源版本,它为基于Linux系统的程序提供了系统调用接口,并实现了ANSI C、POSIX以及其他许多标准规定的服务。
    • GLIBC不仅包括了基本的C语言函数库如内存管理、字符串操作、数学运算等,还封装了对Linux内核服务的访问,比如文件和目录操作、进程控制、网络通信等功能。几乎所有的Linux应用程序在编译和运行时都会依赖于GLIBC。
    • libc.so.6 是 GLIBC 在Linux系统中的一个具体实现文件,提供了C语言标准库和其他系统接口功能的实际代码。
  • 可以通过以下命令来查看当前系统支持的GLIBC版本
    • strings /lib64/libc.so.6 | grep GLIBC
  • 在centos7系统执行 strings /lib64/libc.so.6 | grep GLIBC,会看到以下打印
  •   GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16GLIBC_2.17
    
  • 说明centos7 系统支持的最低GLIBC版本为2.2.5,支持的最高GLIBC版本为 2.17
  • ubuntu18 系统上执行 strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC
  •   GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16GLIBC_2.17GLIBC_2.18GLIBC_2.22GLIBC_2.23GLIBC_2.24GLIBC_2.25GLIBC_2.26GLIBC_2.27
    
  • 可以看到 ubuntu18 支持的最低GLIBC版本为2.2.5,支持的最高GLIBC版本为2.27
  • 在ubuntu18 上编译一个openssl库,可以看下其依赖的GLIBC版本
  • strings libcrypto.so.1.1 | grep GLIBC
  •   GLIBC_2.2.5GLIBC_2.3GLIBC_2.16GLIBC_2.7GLIBC_2.14GLIBC_2.3.2GLIBC_2.25GLIBC_2.3.4GLIBC_2.17
    
  • 可以看到libcrypto.so.1.1依赖的GLIBC版本有2.25、2.3。这些版本在centos7系统上都是不支持的
  • 如果把ubuntu18上编译的程序拿到 centos7上运行,就会出现如下报错。找不到 GLIBC_2.25 这个版本。
  •   [root@localhost er]# lslibcrypto.so.1.1  libssl.so.1.1  SSLClient[root@localhost er]# ./SSLClient./SSLClient: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by ./libcrypto.so.1.1)[root@localhost er]#
    
  • 这种场景在实际中还是很常见的,如果出现这种报错,就可以使用strings命令,查看报错系统的GLIBC版本,然后再查看我们的可执行程序或依赖库,哪些依赖的GLIBC版本较高,重新在低版本系统上编译替换即可。

解决方案-重点备注

  • 出现上面这种报错,如果是自己写的程序报错,我们可以找个低版本的系统重新编译,如果是第三方库报错,找对应的源码在低版本系统上编译。
  • 我看到一些文章是通过下载高版本的GLIBC库编译后安装替换低版本的GLIBC库解决这个问题,相较于找低版本系统和编译第三方源码,这种方法确实更简单和方便。
  • 但还是不推荐这么做,因为 GLIBC库 是linux系统最基础的库,一旦我们编译替换GLIBC库的过程中出错,损坏了libc.so.6文件,那么大多数命令都将无法使用,甚至无法进入系统。如果是自己的测试机还好,要是搞坏服务器或者用户电脑的libc.so.6库,导致系统无法正常使用,后果是很严重的。
  • 我们平时也千万不要随便去删除,修改或者重命名libc.so.6这个文件,如果真的不小心损坏了,可参考以下方法去补救。
    • CentOS7救援模式修复系统丢失文件 : 虚拟机上安装的系统的补救方法。
    • 误删除libc.so.6后的修复 : 这种做法要求在删除libc.so.6之后没有关闭shell或者ssh连接的情况下紧急处理

查看函数在哪个文件中

  • 还可以使用strings命令查看某一个函数在指定目录中的哪个文件中
  •   [root@localhost er]# rm -rf src/[root@localhost er]# lslibcrypto.so.1.1  libssl.so.1.1  SSLClient[root@localhost er]# strings -f ./* | grep "SSL_write"./libssl.so.1.1: SSL_write./libssl.so.1.1: SSL_write_ex./libssl.so.1.1: SSL_write_early_data./libssl.so.1.1: SSL_write./libssl.so.1.1: SSL_write_early_data./libssl.so.1.1: SSL_write_ex./libssl.so.1.1: SSL_write_early_data./libssl.so.1.1: SSL_write_ex./libssl.so.1.1: SSL_write./SSLClient: SSL_write./SSLClient: SSL_write@@OPENSSL_1_1_0
    
  • 可以看到SSL_write函数在当前目录下的libssl.so.1.1库文件中。

相关文章:

通过strings二进制文件分析工具排查 version ‘GLIBC_2.25‘ not found 报错

strings命令简介 strings命令用于打印文件中可打印字符串, 可以打印文本文件、可执行程序,库文件等。一般用于分析可执行程序和库文件。strings命令较为常用的功能有以下两种 查看系统的GLIBC版本和目标文件的依赖的GLIBC版本,当系统的GLIBC版本与目标文…...

基于 MQTT 的开源桥接器:自由控制物联网设备 | 开源日报 No.151

Koenkk/zigbee2mqtt Stars: 10.5k License: GPL-3.0 Zigbee2MQTT 是一个 Zigbee 🐝 到 MQTT 桥接器 🌉,可以摆脱专有的 Zigbee 桥接器 🔨 允许您在不使用供应商桥接器或网关的情况下使用 Zigbee 设备通过 MQTT 桥接事件并控制 Z…...

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…...

VI / VIM的使用

vi/vim 的区别简单点来说,它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且 还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于 x win…...

第十二站(20天):C++泛型编程

模板 C提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其 类内部的类型和函数的形参类型不具体指定 ,用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定…...

【Docker】Dokcer学习① - 简介

【Docker】Docker学习① - 简介 一、Docker简介1. Docker是什么2. Docker组成3. Docker对比虚拟机4. Linux Namespace技术5. Linux control groups6. 容器管理工具 二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Dock…...

PostgreSQL 100条命令

我会为您提供一些 PostgreSQL 中最常用的命令: 1. 创建数据库:CREATE DATABASE database_name; 2. 连接到数据库:\c database_name; 3. 创建表格:CREATE TABLE table_name (column1 datatype, column2 datatype, ...); 4. 插入数…...

HTTP动态代理的原理及其对网络性能的影响

HTTP动态代理是一种通过代理服务器来转发HTTP请求和响应数据的网络技术,它可以优化网络性能、提高网络安全性,并解决跨域请求的问题。本文将详细介绍HTTP动态代理的原理及其对网络性能的影响。 一、HTTP动态代理的原理 HTTP动态代理的基本原理是在客户…...

69.使用Go标准库compress/gzip压缩数据存入Redis避免BigKey

文章目录 一:简介二:Go标准库compress/gzip包介绍ConstantsVariablestype Headertype Reader 三:代码实践1、压缩与解压工具包2、单元测试3、为何压缩后还要用base64编码 代码地址: https://gitee.com/lymgoforIT/golang-trick/t…...

JavaScript实现的一些小案例

小案例 灯开关案例 <body><img id"light" src"img/off.jpg"><script>var light document.getElementById("light");var flag false;if(flag){light.src "img/on.jpg";flag false;}else{light.src "img/…...

MVC模式

Model-View-Controller : 模型-视图-控制器模式&#xff0c;用于应用程序的分层开发。 Model(模型)&#xff1a;代表一个存取数据的对象。也可以带有逻辑&#xff0c;在数据变化时更新控制器。 View(视图)&#xff1a;代表模型包含的数据的可视化。 Controller(控制器)&#xf…...

Java中的代理模式(一)

大家好&#x1f44b;&#xff0c;我是极客涛&#x1f60e;&#xff0c;今天我们聊一聊java中的代理模式&#xff0c;话不多说&#xff0c;还是老思路&#xff0c;什么是代理模式&#xff0c;为什么要有代理模式&#xff0c;如何实现代理模式 代理模式 在说java中的代理模式之前…...

跳跃游戏-算法

题目 给定一个数组nums {1,2,3,4,5}&#xff0c;每个元素nums[i]表示从i这个位置最多可以向前跳跃nums[i]个台阶&#xff0c;求最小需要跳几次就可以调到末尾 思路 反向查找 从末尾开始逐个向前判断最远的起跳位置&#xff0c;接着再以该位置递归的判断 public int jumpT…...

ERP系统哪个好用?用友,金蝶,ORACLE,SAP综合测评

ERP系统哪个好用&#xff1f;用友&#xff0c;金蝶&#xff0c;ORACLE&#xff0c;SAP综合测评 ERP领域SAP、ORACLE相对于国内厂商如用友、金蝶优势在哪&#xff1f; SAP&#xff0c;ORACLE操作习惯一般国人用不惯&#xff1b;相对于国产软件&#xff0c;界面也很难看&#x…...

外汇天眼:美国证券交易委员会(SEC)采纳了一系列规定,以加强与特殊目的收购公司(SPACs)相关的投资者保护

美国证券交易委员会&#xff08;SEC&#xff09;今天通过了一系列新规和修订&#xff0c;以增强特殊目的收购公司&#xff08;SPACs&#xff09;的首次公开募股&#xff08;IPOs&#xff09;中的披露&#xff0c;并在SPACs与目标公司之间的后续业务合并交易&#xff08;de-SPAC…...

kotlin map 与 flatmap

kotlin map 与 flatmap 是2个不同的概念的 map 是一种数据结构&#xff0c;flatmap 是一个高阶函数&#xff0c;处理集合用的 Map Map 是一种数据结构&#xff0c;它由一系列的键值对组成&#xff0c;每个键都是唯一的&#xff0c;并且与一个特定的值相关联。你可以通过键来…...

nginx-rtmp-module 支持 Enhancing RTMP HEVC(H.265)

Enhancing RTMP, FLV 2023年7月31号正式发布&#xff0c;主要支持了HEVC(H.265)、VP9、AV1视频编码&#xff0c;发布差不多半年了&#xff0c;很多开源项目已支持&#xff0c;最近打算播放和推送端也支持下&#xff0c;想找个支持的rtmp server方便测试用&#xff0c;但没找到合…...

2024最新JDK1.8+JDK17+JDK21安装包下载+文档

2024年更新&#xff0c;JDK8的64位和32位安装包都有&#xff0c;Java8最新文档也有&#xff0c;JDK17和JDK21的最新安装包也有 因为网上的安装包都不是最新的&#xff0c;所以自己去Oracle官网登录下载保存了一份&#xff0c;需要的朋友下面网盘链接下载 JDK8—64位安装程序&…...

如何利用chatgpt提升工作效率

chatgpt全领域小助手 项目管理&#xff1a;制定项目计划、跟踪进度、分配任务和记录里程碑。客户服务&#xff1a;回答常见问题、提供产品支持和处理客户投诉&#xff0c;提升客户满意度。销售支持&#xff1a;提供销售培训、销售脚本和客户资料&#xff0c;辅助销售团队进行销…...

WinSCP下载安装并实现远程SSH本地服务器上传文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...