Libraries

載入共享庫時出錯:libc.so.6:無法打開共享對象文件

  • January 16, 2015

我有一個 Linux 核心,我將其 chroot /var/chroot

bash像這樣添加了依賴項:

ldd /bin/bash
       linux-vdso.so.1 =>  (0x00007fff9a373000)
       libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f24d57af000)
       libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f24d55ab000)
       libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f24d51eb000)
       /lib64/ld-linux-x86-64.so.2 (0x00007f24d59f8000)

然後我做了:

# cd /var/chroot/
# mkdir bin/ lib64/ lib/
# cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/
# cp /lib/x86_64-linux-gnu/libdl.so.2 lib/
# cp /lib/x86_64-linux-gnu/libc.so.6 lib/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# cp /bin/bash bin/

之後:

# chroot /var/chroot

之後,我複制/bin/lsldd ls. 但是當我執行時ls出現以下錯誤:

ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32

由於您顯然能夠啟動 bash,因此您擁有正確的基礎知識:您需要將列出的所有庫複製到庫載入路徑ldd /bin/command上的目錄,以及載入器本身 ( ),它需要位於硬編碼的位置執行檔。/lib64/ld-linux-x86-64.so.2

如果您收到錯誤

error while loading shared libraries: libc.so.6: cannot open shared object file

那麼您缺少此處指示的庫。檢查您是否將其放在正確名稱下的正確目錄中。檢查您是否複製了庫文件,而不僅僅是指向它的符號連結。

如果您收到錯誤

ls: error while loading shared libraries: libpthread.so.0: wrong ELF class: ELFCLASS32

然後你為錯誤的架構複製了一個庫——你必須複製一個 32-bit libpthread.so.0,但你正在執行一個 64-bit 庫。

如果您還有其他問題,可能有助於找出載入程序嘗試查找庫的確切位置。將strace二進製文件放入 chroot(靜態編譯的,或者動態編譯的加上它需要的所有庫),然後執行chroot ls並查看到底是什麼失敗了。或者執行strace chroot ls以使用stracechroot 之外的二進製文件。

引用自:https://unix.stackexchange.com/questions/179233