5、css3 去掉下拉框后面的三角形 ,去掉之后,若想在后面换成其他的什么图片背景就很容易了  select {appearance"> centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数 - 11GX
首页 > centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数

centos6.5原生系统修改ceph-mon 的ELF来让其加载低版本glibc库函数

文章目录

        • Step 1:glibc-2.17 被libc.so.6库依赖,升级glibc库
        • Step2:升级编译器-->4.8.2可以正常编译glibc2.17
        • Step3:修改ELF,降低ceph-mon依赖的库函数版本
          • 解决ceph-mon调用高版本libc库(修改动态库链接表ELF)

Step 1:glibc-2.17 被libc.so.6库依赖,升级glibc库

环境上需要拥有gcc支持编译

使用glibc源码编译安装步骤如下:

tar -zxvf glibc-2.17.tar.gz
cd glibc-2.17
mkdir build && cd $_
sudo ../configure --prefix=/usr/glibc-2.17 --disable-profile --enable-add-ons --withheaders=/
usr/include --with-binutils=/usr/bin
make && make install

出现如下问题:

/usr/bin/python: error while loading shared libraries: libpython2.6.so.1.0: cannot open
shared object file: No such file or directory

系统崩溃,glibc库的链接被损坏。因为编译器版本较低,并不支持高版本的glibc库,导致升级高版本的C库时破坏掉

了原生系统的C库链接

Step2:升级编译器–>4.8.2可以正常编译glibc2.17

使用命令

objdump -T /lib64/libc.so.6 |grep GLIBC_2.17可以看到在C库中使用glibc-2.17版本的具体函数

执行如下命令可以看到我们的ceph-mon所要求的GLIBC库函数

objdump -T /usr/bin/ceph-mon |grep GLIBC_2.17
或者使用命令
nm -a /usr/bin/ceph-mon |grep GLIBC_2.17 打印所有使用glibc_2.17的版本函数
发现并没有输出,即ceph-mon没有用到与2.17版本的C函数
objdump -T /usr/bin/ceph-mon |grep GLIBC_2.14
[root@node5 yum]# objdump -T /usr/bin/ceph-mon |grep GLIBC_2.14
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.14 memcpy
此时可以看到Ceph-mon使用了2.14 libc库的memcpy函数
即我们在无法在低版本的centos上运行ceph-mon的原因是其引用了高版本的libc-2.17库中的memcpy

解决以上C库引用版本问题可以尝试更改mon的链接文件,让elf调用低版本的C库中的memcpy函数

Step3:修改ELF,降低ceph-mon依赖的库函数版本

使用命令查看ELF符号表

readelf -sV /usr/bin/ceph-mon

Version needs section ‘.gnu.version_r’ contains 11 entries: Addr: 0x00000000002a9330 O set: 0x2a9330 Link: 5

(.dynstr) 000000: Version: 1

File: ld-linux-x86-64.so.2 Cnt: 1

0x0010: Name: GLIBC_2.3 Flags: none Version: 39

0x0020: Version: 1

File: librt.so.1 Cnt: 1

0x0030: Name: GLIBC_2.2.5 Flags: none Version: 36

0x0040: Version: 1

File:libgcc_s.so.1 Cnt: 2

0x0050: Name: GCC_3.0 Flags: none Version: 42

0x0060: Name: GCC_3.4 Flags: none Version: 35

0x0070: Version: 1

File: libdl.so.2 Cnt: 1

0x0080: Name: GLIBC_2.2.5 Flags: none Version: 23

0x0090: Version: 1

File:libnss3.so Cnt: 4

0x00a0: Name: NSS_3.12.9 Flags: none Version: 38

0x00b0: Name: NSS_3.3 Flags: none Version: 32

0x00c0: Name: NSS_3.2 Flags: none Version: 19

0x00d0: Name: NSS_3.12.5 Flags: none Version: 16

0x00e0: Version:1

File: libibverbs.so.1 Cnt: 2

0x00f0: Name: IBVERBS_1.0 Flags: none Version: 30

0x0100: Name: IBVERBS_1.1 Flags: none Version: 14

0x0110: Version: 1

File: libm.so.6 Cnt: 1

0x0120: Name: GLIBC_2.2.5 Flags: none Version: 13

0x0130: Version: 1

File: libresolv.so.2 Cnt: 2

0x0140: Name: GLIBC_2.2.5 Flags: none Version: 21

0x0150: Name:GLIBC_2.9 Flags: none Version: 12

0x0160: Version: 1

File: libstdc++.so.6 Cnt: 12

0x0170: Name: CXXABI_1.3.7 Flags: none Version: 41

0x0180: Name: GLIBCXX_3.4.17 Flags: none Version: 37

0x0190: Name: CXXABI_1.3.1 Flags: none Version: 34

0x01a0: Name: GLIBCXX_3.4.18 Flags: none Version: 26

0x01b0: Name: GLIBCXX_3.4.9 Flags: none Version: 25

0x01c0: Name: GLIBCXX_3.4.11 Flags: none Version: 20

0x01d0: Name: GLIBCXX_3.4.14 Flags: none Version: 18

0x01e0: Name: CXXABI_1.3.5 Flags: none Version: 15

0x01f0: Name: GLIBCXX_3.4.15 Flags: none Version:

9 0x0200: Name: GLIBCXX_3.4.19 Flags: none Version: 8

0x0210: Name: GLIBCXX_3.4 Flags: none Version: 5 0x0220:

Name: CXXABI_1.3 Flags: none Version: 4 0x0230: Version: 1

File: libpthread.so.0 Cnt: 3

0x0240: Name: GLIBC_2.12Flags: none Version: 17

0x0250: Name: GLIBC_2.2.5 Flags: none Version: 7

0x0260: Name: GLIBC_2.3.2 Flags: none Version: 3

0x0270: Version: 1

File: libc.so.6 Cnt: 12

0x0280: Name: GLIBC_2.3.3 Flags: none Version: 40 0x0290:

Name: GLIBC_2.7 Flags: none Version: 33

0x02a0: Name: GLIBC_2.4 Flags: none Version: 31

0x02b0: Name:GLIBC_2.14 Flags: none Version: 29

0x02c0: Name: GLIBC_2.10 Flags: none Version: 28

0x02d0: Name: GLIBC_2.8Flags: none Version: 27

0x02e0: Name: GLIBC_2.9 Flags: none Version: 24

0x02f0: Name: GLIBC_2.3.2 Flags: noneVersion: 22

0x0300: Name: GLIBC_2.3 Flags: none Version: 11

0x0310: Name: GLIBC_2.2.5 Flags: none Version: 10

0x0320: Name: GLIBC_2.5 Flags: none Version: 6

0x0330: Name: GLIBC_2.3.4 Flags: none Version: 2

解决ceph-mon调用高版本libc库(修改动态库链接表ELF)

使用命令strings /root/ceph-mon | grep GLIBC_ 查看运行库调用的glibc版本如下有2.16以及2.14

在这里插入图片描述

使用nm /root/ceph-mon |grep GLIBC_2.14查看对应版本的调用函数,只有高版本的一个函数

在这里插入图片描述

再使用命令nm /lib64/libc.so.6 |grep memcpy查看当前系统libc库中的memcpy函数是否低版本的c库函数

在这里插入图片描述

显然我们拥有两种版本的内存拷贝函数,那么接下来就是修改2.14版本的动态库为2.2.5版本的

使用命令 readelf -sV /root/ceph-mon 使用加载器读取ceph-mon内容,查看该部分内容如下 二进制文件入口地址(16进制)如下(由于内容较多,无法显示完全,只截取有用信息部分):

在这里插入图片描述

对应函数偏移地址(16进制)如下,查看file libc.so.6文件下的对应版本

在这里插入图片描述

如上2.14版本的内存拷贝函数偏移地址为0x02c0,2.2.5版本的为0x0320

寻找真正的函数入口地址即为二进制文件入口地址+函数偏移地址–》

glibc2.14版本的: 0x2a9368+0x02c0=0x2a9628

glibc2.2.5版本的: 0x2a9368+0x0320=0x2a9688

执行命令vim /root/ceph-mon 打开二进制文件,一般模式下输入:%!xxd 转为16进制格式如下

在这里插入图片描述

这个时候因为我们函数真正入口地址为0x2a9628,以8结尾,所以我们跳转到2a9620以及2a9680位置,对应函数入口地址如下:

在这里插入图片描述

红色为2.16版本的memcpy函数入口地址,蓝色为2.2.5版本入口地址,将2.16的数值与2.2.5数值对应位置保持一直即可完成版本修改

在这里插入图片描述

输入:%!xxd -r指令将16进制转回为2进制,保存退出即可,再次执行readelf -sV /root/ceph-mon查看readelf动态链接表,已经完成修改memcpy函数的glibc版本为2.2.5。此处注意,编辑转换为16进制之后的ceph-mon二进制文件时不能退出vim编辑,否则再次进去的时候无法转换回二进制格式

在这里插入图片描述

更多相关:

  • 环境:Cmake3.10+OpenCV2.4.13.5+CUDA9.2 Problem CMake Warning at cmake/OpenCVPackaging.cmake:23 (message):CPACK_PACKAGE_VERSION does not match version provided by version...

  • Qt程序版本号使用 在pro文件中添加(版本号可以3段或者4段) VERSION=1.0.1.2DEFINES += APP_VERSION=\"$${VERSION}\" 实际代码中使用 QString version = APP_VERSION;qInfo()<<"版本信息:"<< version;...

  • 一:概述SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP。SpringMVC是Spring实现的一个Web层,相当于Struts的框架,但是比Struts更加灵活和强大!Mybatis是 一个持久层...

  • AppDomain.CurrentDomain.ApplicationIdentity.CodeBase   获取作为URL的部署清单的位置 Eg:发布前地址为E:PROJECTWORKLandaV8inDebugxxxxx.xbap(xxxxx.xbap为部署站点下的文件),部署后获取的地址为http://192.168...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 这是第三部分,完成效果如下 图1 建图和导航 三、使用RTAB-Map进行建图和导航 1. rtab...

  • 引言 在这个-SLAM建图和导航仿真实例-项目中,主要分为三个部分,分别是 (一)模型构建(二)根据已知地图进行定位和导航(三)使用RTAB-MAP进行建图和导航 该项目的slam_bot已经上传我的Github。 由于之前的虚拟机性能限制,我在这个项目中使用了新的ubantu 16.04环境,虚拟机配置 内存 8GCPU...

  • [{name:1},{name:2}].forEach((v,i,ar) => {console.log(v,i,ar)});//基础遍历[{name:1},{name:2}].map((v) => v.name);//[1,2]返回对象数组中指定字段值的一位数组(不改变原始数组)[{name:1},{name:2},{name:3}...

  • 体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图。 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base* sudo apt-get install ros-melodic-map-server* sudo apt-get insta...

  • 前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射,比如http接口中 用户传入了url,我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C++ 并没有友好得支持这样的操作,而最近工作中需要通过C++实现http接口,这个过程想要代码实现得优雅...

  • 这是我在stackoverflow上的第一个问题。我成功地安装了其他需要的包,如箭头,但我无法安装。jq. https:/pypi.orgprojectjq。我尝试安装 jq 在Win10上使用此命令(有代理限制,python 3.7.7)。(project) C:project>pip --proxy=https://xxx:80...

  • # Input icrf(tensor数据) # Output out(float数据) import tensorflow as tf import numpy as npsess = tf.Session() preinput = tf.placeholder(tf.float32, [None, None, None, 3])...

  • 转自:https://keras-cn.readthedocs.io/en/latest/layers/convolutional_layer/ https://keras-cn.readthedocs.io/en/latest/layers/pooling_layer/ 1.con1D keras.layers.convoluti...

  • 1、 text{-moz-user-select: none; /*火狐*/-webkit-user-select: none; /*webkit浏览器*/-ms-user-select: none; /*IE10*/-khtml-user-select: none; /*早期浏览器*/-o-user-select: non...

  • 1、一元运算符 2、二元运算符 3、三元运算符 4、h5中div可设置是否能编辑的属性,当然如果在p、span标签什么的也是可以的

    5、css3 去掉下拉框后面的三角形 ,去掉之后,若想在后面换成其他的什么图片背景就很容易了  select {appearance...