GNU/Linux >> Linux の 問題 >  >> Linux

`file` によって報告されたように、ダイナミック リンカ/ローダ自体をダイナミックにリンクするにはどうすればよいですか?

<オール>
  • はい、初期化時にリンクします。技術的には、動的リンカはそのままで完全に解決されるため、オブジェクトの解決と再配置は必要ありませんが、シンボルを定義し、「解釈」しているバイナリを解決するときにそれらを処理する必要があり、それらのシンボルが更新されます。ロードされたライブラリ内の実装を指すようにします。特に、これは malloc に影響します — リンカーには、対応するシンボルを備えた最小限のバージョンが組み込まれていますが、ロードされて再配置されると (または挿入されたバージョンがある場合は介在バージョンによってさえも) C ライブラリのバージョンに置き換えられます。リンカーが壊れる可能性がある時点では発生しません。

    詳細は rtld.c にあります 、dl_main 関数。

    ただし、ld.so に注意してください。 外部依存関係はありません。 nm -D に関連するシンボルを確認できます;未定義のものはありません。

  • マンページは /lib 直下のエントリのみを参照しています 、つまり /lib/ld.so (a.out をサポートする libc 5 動的リンカー ) および /lib*/ld-linux*.so* (ELF をサポートする libc 6 動的リンカー)。マンページはとても 特定、および ld.so ld-2.28.so ではありません .

    現在のシステムの大部分に見られる動的リンカーには、a.out が含まれていません。 サポート。

  • fileldd 静的にリンクされたバイナリを構成するものの定義が異なるため、動的リンカーについて異なることを報告します。 ldd の場合 、 DT_NEEDED がない場合、バイナリは静的にリンクされています シンボル、つまり 未定義のシンボルはありません。 file の場合 PT_DYNAMIC がない場合、ELF バイナリは静的にリンクされます。 セクション (これは file のリリースで変更されます) 5.37に従います。 PT_INTERP の存在を使用するようになりました コード内のコメントと一致する、動的にリンクされたバイナリのインジケーターとしてのセクション)。

    GNU C ライブラリの動的リンカーには DT_NEEDED がありません 記号ですが、PT_DYNAMIC があります セクション (技術的には共有ライブラリであるため)。その結果、ldd (動的リンカー) は、静的にリンクされていることを示しますが、file 動的にリンクされていることを示します。 PT_INTERP がありません セクションなので、file の次のリリース また、静的にリンクされていることも示します。

    $ ldd /lib64/ld-linux-x86-64.so.2
            statically linked
    
    $ file $(readlink /lib64/ld-linux-x86-64.so.2)
    /lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
    

    (file の場合) 5.35)

    $ file $(readlink /lib64/ld-linux-x86-64.so.2)
    /lib/x86_64-linux-gnu/ld-2.28.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
    

    (現在開発中のバージョンの file を使用) ).


    Linux
    1. インストールされている glibc ライブラリのバージョンを確認するにはどうすればよいですか?

    2. Pythonのmatplotlibで「バックエンド」を設定するにはどうすればよいですか?

    3. ファイルの各行の先頭に文字列を追加するにはどうすればよいですか?

    1. コンテナー自体から Docker Linux コンテナー情報を取得するにはどうすればよいですか?

    2. wgetで最新のAnacondaをインストールするにはどうすればよいですか

    3. 実行中のプロセスの絶対パスを知るにはどうすればよいですか?

    1. Emacsでツールバーを永続的に非表示にするにはどうすればよいですか?

    2. PDF 内のすべてのテキストをラスタライズするにはどうすればよいですか?

    3. 受け入れキューの長さを監視するにはどうすればよいですか?