2017-07-26 229 views
0

我的機器是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用戶。

反正是有解決這個問題? 在此先感謝

回答

0

您還需要從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

相關問題