厳選されたプログラムにアクセスできるが、システムの他の部分から完全に分離されたchroot環境を作成したいと考えています。
このchrootフォルダーにbin
、lib
、lib64
の3つのフォルダーを作成しました。次に、実行可能ファイル(この場合は/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"
の場合、何も出力されません。
私は今どうすればいい?
VDSOは特別であり、カーネルによって直接提供されます。
ファイル名がなくてもアドレスがあるので、うまくマッピングされています。 chrootでVDSOを取得するために何もする必要はありません。
カーネルVDSOは、常にモードの切り替えを必要としないカーネル関数のコレクションです。正確なタイマーの読み取りは、タイマーをサポートするプロセッサーではrdtsc
アセンブラー命令によって処理され、サポートしないプロセッサーではカーネルsyscallによって処理されます。これが通常のシステムコールである場合、最新のプロセッサは単一の非特権アセンブラー命令のsyscallオーバーヘッドを処理する必要があり、rdtsc
が常にインライン化されている場合、プログラムは古いマシンで実行されなくなります。
プログラムを実行してみてください;-)
_linux-vdso.so.1
_は、カーネルによってプロセスのアドレス空間に自動的にマップされる仮想ライブラリです。 vdso(7)
を参照してください。ファイルシステムには存在しません。