私は慎重に選択されたプログラムにアクセスできますが、システムの残りの部分から完全に隔離されたchroot環境を作成したいと思います。
bin
このchrootフォルダに、、lib
3つのフォルダを作成しましたlib64
。その後、実行可能ファイル(この場合)/bin/bash
をにコピーしましたbin
。ldd /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.1
。sudo find / -name "linux-vdso.so.1"
今どうすればいいですか?
答え1
VDSOは特別で、カーネルから直接提供されます。
ファイル名がなくてもアドレスがあることがわかるので、マッピングがうまくいきます。 VDSOをchrootに入れるために何もする必要はありません。
カーネル VDSO は、常にモード切り替えを必要としないカーネル機能の集まりです。たとえば、正確なタイマー読み取りは、rdtsc
それをサポートするプロセッサのアセンブリ命令によって処理され、それをサポートしないプロセッサのカーネルシステムコールによって処理されます。これが一般的なシステムコールの場合、最新のプロセッサは、許可されていない単一のアセンブリ命令のシステムコールオーバーヘッドを処理する必要があり、プログラムがrdtsc
常にインライン化されている場合、古いシステムで実行されなくなります。
答え2
プログラムを実行してみてください;-)
linux-vdso.so.1
仮想ライブラリはカーネルによってプロセスアドレス空間に自動的にマップされますか?vdso(7)
。ファイルシステムには存在しません。