English 中文(简体)
• 如何使用缺失的@GLIBC_2.6功能的图书馆?
原标题:How to cheat *.so library into using missing @GLIBC_2.6 function?

I need to run relatively new package on not-so-new RHEL 5.6.

I have 3rd party library (lib3rdparty.so) which is compiled against glibc 2.6 while RHEL 5.6 have only 2.5 installed. But in the library there is only a couple of references to sched_getcpu@@GLIBC_2.6. I ve checked it like this

readelf -s lib3rdparty.so | egrep "@GLIBC_2.[6-9]"

参看<代码>以外的新内容 GLIBC_2.5 安装。 产出

0 FUNC    GLOBAL DEFAULT  UND sched_getcpu@GLIBC_2.6 (62)
0 FUNC    GLOBAL DEFAULT  UND sched_getcpu@@GLIBC_2.6

因此,我只有一个职能从GLIBC_2.6/code>。 我现在想让图书馆认为,我有这一职能。 为此,我建立了小型图书馆(libcheat.so)。 参看here。 现在我有<代码>libcheat.so文档,如果通过<代码>readelf进行,将显示这一表述:

10 FUNC    GLOBAL DEFAULT   11 sched_getcpu@@GLIBC_2.6

图书馆 我设法成功地建立了可执行性,与<代码>lib3rd party.so有动态联系。 如果没有这个图书馆,我可以做任何事情,因为<代码>ld <>>>>>>t 查询spplecpu

但是,问题在于处理这一档案:当我试图掌握档案时,我有以下错误:

 ./hello_world: version `GLIBC_2.6  not found (required by ./lib3rdparty.so)

因此,我认为,这是使它发挥作用的最后一步,但我不知道要做什么。 I ve试图使用/etc/ld.conf.preload和出口LD_LIBRaire_PATH 因此,这将要求我的图书馆在他人面前装满。 但是,它赢得了胜利。 暂时通过<代码>strace加以操作,但没有有意义的产出。

任何想法?

最佳回答

奥基,我认为我应该提到“最后步骤”,在我的案件中,这包括铺设双轨三党图书馆。

  1. Using objdump I found an address where lib3rdparty.so searches for GLIBC_2.6
  2. Using hexedit I replaced this address with the one where GLIBC_2.5 was exported (you should search for bytes in reversed order). Also I replaced symbol with 2.5.
  3. Using objdump I ve checked that all references now using GLIBC_2.5
  4. I needed to rebuild libcheat.so as sched_getcpu now was referencing GLIBC_2.5, so I used sched_getcpu@@GLIBC_2.5 as assembler inline

之后,我将<条码>libcheat.so 贴在lib3rd party.so上,即:<条码>>> 和我的双亲开始工作。 我不敢肯定,这一障碍将完全正确,但如果你陷入这种问题,这个问题和答案可能有些帮助。

问题回答

我不敢肯定,你所走的工作是最好的前进道路。 为什么不为申请提供更新的平衡? 您可以尝试通过LD_PRELOAD 环境变量。 就最佳双向兼容性而言,您可从较新的分发版本中获取一个平衡二元,或为REHEL 5.6重建一个更新的平衡版本。

此外,试图绕过<>LD_DEBUG环境,看活链路者做什么。





相关问题
How to combine shared libraries?

I ve got some .so libraries that I d like to combine into one shared library so that it doesn t depend on the original .so files anymore. The .so files have dependencies to each other. How can I do ...

Shared library in Go?

Is it possible to create a Shared Library (.so) using Go? UPDATED: created an "issue" for it.

Create a shared lib using another shared lib

I have a shared library "libwiston.so". I am using this to create another shared library called "libAnimation.so", which will be used by another project. Now, the second library "libAnimation.so" can ...

Load multiple copies of a shared library

I am running Linux, and I would like to be able to make parallel function calls into a shared library (.so) which is unfortunately not threadsafe (I am guessing it has global datastructures). For ...

热门标签