使用 xxd 修改二进制文件

当新编译的动态库在旧Linux系统上运行报错时,可能因库函数版本不兼容引起。本文介绍如何使用xxd命令修改二进制文件中的版本信息,解决因libstdc++版本差异导致的问题。通过查看动态库版本、确定需要修改的偏移位置,然后利用xxd进行数据复制和替换,实现二进制补丁,使得动态库能在旧系统上运行。
摘要由CSDN通过智能技术生成

在新的 Linux 系统上编译的动态库,在一些老的 Linux 上面运行,有时候会报下列错误

/lib64/libc.so.6: version 'GLIBC_2.14' not found

这一般是因为老的系统没有最新的 GLIBC_2.14,而创建动态库的机器上使用的是 GLIB2 2.14memcpy, 这个库函数为了解决重叠拷贝问题而进行了修正。如果用到的只是这一个函数的话,可以通过修改动态库中的版本标识,让其可以老系统上面运行。

首先查看一下动态库依赖的 GLIBC 版本信息

readelf -V /path/to/_pytransform.so
...

Version needs section '.gnu.version_r' contains 2 entries:
 Addr: 0x00000000000056e8  Offset: 0x0056e8  Link: 4 (.dynstr)
  000000: Version: 1  File: libdl.so.2  Cnt: 1
  0x0010:   Name: GLIBC_2.2.5  Flags: none  Version: 7
  0x0020: Version: 1  File: libc.so.6  Cnt: 6
  0x0030:   Name: GLIBC_2.7  Flags: none  Version: 8
  0x0040:   Name: GLIBC_2.14  Flags: none Version: 6
  0x0050:   Name: GLIBC_2.4  Flags: none  Version: 5
  0x0060:   Name: GLIBC_2.3.4  Flags: none  Version: 4
  0x0070:   Name: GLIBC_2.2.5  Flags: none  Version: 3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值