web-dev-qa-db-ja.com

lddは矢印の後に位置を示しません。ライブラリがシステムに存在しません

厳選されたプログラムにアクセスできるが、システムの他の部分から完全に分離されたchroot環境を作成したいと考えています。

このchrootフォルダーにbinliblib64の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"の場合、何も出力されません。

私は今どうすればいい?

9
Post Self

VDSOは特別であり、カーネルによって直接提供されます。

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

カーネルVDSOは、常にモードの切り替えを必要としないカーネル関数のコレクションです。正確なタイマーの読み取りは、タイマーをサポートするプロセッサーではrdtscアセンブラー命令によって処理され、サポートしないプロセッサーではカーネルsyscallによって処理されます。これが通常のシステムコールである場合、最新のプロセッサは単一の非特権アセンブラー命令のsyscallオーバーヘッドを処理する必要があり、rdtscが常にインライン化されている場合、プログラムは古いマシンで実行されなくなります。

9
Simon Richter

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

_linux-vdso.so.1_は、カーネルによってプロセスのアドレス空間に自動的にマップされる仮想ライブラリです。 vdso(7) を参照してください。ファイルシステムには存在しません。

4
qubert