システムにライブラリがない場合、ldd は場所を表示しません。

システムにライブラリがない場合、ldd は場所を表示しません。

私は慎重に選択されたプログラムにアクセスできますが、システムの残りの部分から完全に隔離されたchroot環境を作成したいと思います。

binこのchrootフォルダに、、lib3つのフォルダを作成しましたlib64。その後、実行可能ファイル(この場合)/bin/bashをにコピーしましたbinldd /bin/bash

linux-vdso.so.1 =>  (0x00007ffff01f6000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f35ed501000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f35ed2fd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f35ecf33000)
/lib64/ld-linux-x86-64.so.2 (0x00007f35ed72a000)

出力が出ない場合を除き、これらすべてのライブラリをコピーできますlinux-vdso.so.1sudo find / -name "linux-vdso.so.1"

今どうすればいいですか?

答え1

VDSOは特別で、カーネルから直接提供されます。

ファイル名がなくてもアドレスがあることがわかるので、マッピングがうまくいきます。 VDSOをchrootに入れるために何もする必要はありません。

カーネル VDSO は、常にモード切り替えを必要としないカーネル機能の集まりです。たとえば、正確なタイマー読み取りは、rdtscそれをサポートするプロセッサのアセンブリ命令によって処理され、それをサポートしないプロセッサのカーネルシステムコールによって処理されます。これが一般的なシステムコールの場合、最新のプロセッサは、許可されていない単一のアセンブリ命令のシステムコールオーバーヘッドを処理する必要があり、プログラムがrdtsc常にインライン化されている場合、古いシステムで実行されなくなります。

答え2

プログラムを実行してみてください;-)

linux-vdso.so.1仮想ライブラリはカーネルによってプロセスアドレス空間に自動的にマップされますか?vdso(7)。ファイルシステムには存在しません。

関連情報