動的にリンクされた実行可能ファイルとその依存関係から静的にリンクされた実行可能ファイルを作成する

動的にリンクされた実行可能ファイルとその依存関係から静的にリンクされた実行可能ファイルを作成する

たとえば、これを行うと、cat次のようにldd $(which cat)表示されます。

linux-vdso.so.1 (0x00007fff8afbb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb3102dd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb310524000)

cat静的リンクになるようにバイナリをこれらの3つのファイルとso結び付ける方法はありますか?

私の意図はコンテナ内で使用することです。

答え1

安定剤これを行うことができます。動的にリンクされたバイナリとその依存関係をバンドルします。結果は、バイナリを最初に静的に構築した場合に得られる結果とはまったく異なりますが、目的の結果を提供します。

「静的」バイナリを生成するには、レイアウトのランダム化を無効にする必要があります。

printf 0 | sudo tee /proc/sys/kernel/randomize_va_space

(その後、元の値を復元します)。

コンテナに実際に必要なバイナリが何であるかに応じて、静的Busyboxのようなものを使用する方が簡単かもしれません。

最初の依存関係は関心を持たなければならない動的ライブラリではありませんカーネルで提供されるvDSO

関連情報