web-dev-qa-db-ja.com

共有ライブラリのロード中にエラーが発生しました:libc.so.6:共有オブジェクトファイルを開けません

Linuxカーネルがあり、/var/chrootで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
2
MLSC

明らかにbashを起動できたので、基本的な権利があります。ldd /bin/commandによってリストされたすべてのライブラリを library load path 上のディレクトリに加えて、ローダー自体( /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.0をコピーしたはずですが、64ビットのライブラリを実行しています。

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

試す

mkdir lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libtinfo.so.5  /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu

Lsなどのコマンドを使用する場合は、ldd /bin/lsを使用してライブラリファイルをコピーする必要もあります。

ちなみに、cpはシンボリックリンクの内容をコピーします。

1
Archemar