共有ライブラリの読み込みエラー:libc.so.6:共有オブジェクトファイルを開くことができません。

共有ライブラリの読み込みエラー:libc.so.6:共有オブジェクトファイルを開くことができません。

私は次のようにルートを指定したLinuxカーネルを持っています/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/ls実行するldd lsls次のエラーが発生します。

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

ベストアンサー1

明らかに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ビットライブラリをコピーする必要がありましたが、libpthread.so.064ビットライブラリを実行していました。

他の問題がある場合は、ローダーがライブラリを見つけようとしている場所を正確に見つけることが役に立ちます。一つ入れるstraceバイナリ(静的にコンパイルされたバイナリまたは動的にコンパイルされたバイナリと必要なすべてのライブラリ)をchrootしてから実行し、chroot ls正確に何が失敗するかを確認してください。または、chrootの外でバイナリをstrace chroot ls使用するには、実行してください。strace

おすすめ記事