强制一个Linux程序从另一个位置读取的libc库文件

问题描述:

我的机器是Linux嵌入64内核3.0.4。 对于这台机器,我没有root权限并且管理员不可用。强制一个Linux程序从另一个位置读取的libc库文件

我试图运行需要的库文件的libc 2.14版本的程序和一个安装在/ lib64的是libc的2.13。

我具有相同的机器,其中我有根访问。我尝试将libc-2.14文件从本机复制到第一个文件,然后将其放入$ HOME/lib64文件夹并将此文件夹添加到LD_LIBRARY_PATH,然后创建一个新的符号链接libc.so.6以指向libc-2.14文件,但程序不断读取/ lib64中指向libc-2.13的libc.so.6文件。我无法修改/ lib64中的任何内容,因为我不是root用户。

反正是有解决这个问题? 在此先感谢

您还需要从glibc复制其他文件。您将需要程序解释/lib64/ld-linux-x86-64.so.2,或许也是libdl.so.2libm.so.6,这些辅助库libpthread.so.0多。

一旦你有了这些,你可以尝试用一个明确的动态链接程序调用其他的glibc启动任意程序。假设你复制文件到当前目录下,你可以试试这个:

./ld-linux-x86-64.so.2 --library-path . --inhibit-cache /bin/bash 

注意,这仅适用于直接启动二进制文件(在本例中bash)。子进程(从shell启动的命令)将再次使用系统glibc。

如果您没有复制所有需要的glibc库,或者区域设置格式中存在不兼容的更改,以至于新的glibc无法使用系统区域设置,则仍可能存在问题。

+0

我尝试了你的建议,我得到了'致命:内核太旧'。然后我检查了内核版本,我只注意到我拷贝文件的机器有内核3.10,我有的是3.0.4。我认为,这使情况进一步复杂化。我注定了还是有办法解决这个问题? – nytrook

+0

你仍然可以自己编译glibc(glibc 2.14上游,绝对不需要3.10内核)。或者从Red Hat Enterprise Linux 7或CentOS 7系统复制glibc 2.17,该系统已经被编译为与2.6.32或更高版本的内核配合使用。 –

+0

我编译glibc,但现在运行'./ld-linux-x86-64.so.2 - 库路径。 --inhibit-cache/path-to-program'我得到了'Segmentation Fault'错误。 – nytrook