5

64 ビットの Ubuntu マシンで、libc6(2.15-0ubuntu20.2) で提供されている動的リンカーを変更しようとしています。

したがって、現在、私のコードは同じバージョンの glibc ライブラリを使用しています。(私は同じソースコードをダウンロードし、それに取り組んでいます)。私の質問は、glibc ライブラリ全体をビルドせずに、ディレクトリに存在するリンカー ソース コードのみを変更してビルドすることは可能かということです。glibc\elf\

また、可能であれば、変更されていないデフォルトのリンカを使用する代わりに、自分で構築した新しいバージョンのダイナミック リンカを使用してテスト プログラムを切り替える方法を教えてください。

ポインタや提案は大歓迎です。(さらに情報が必要な場合はお知らせください)

編集:: @コンスタンティウス

リンクされた投稿の手順に従って、ld.so をビルドしました。しかし、makeで次のエラーが発生し、ld.soがelfにないことを確認しました。エラーは::

/var/services/homes/abhi/test/ld/eglibc-build/elf/librtld.os: In function `generic_getcwd':
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:356: undefined reference to `__closedir'
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:368: undefined reference to `__fdopendir'
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:384: undefined reference to `__readdir'
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:397: undefined reference to `rewinddir'
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:528: undefined reference to `__closedir'
/var/services/homes/abhi/test/ld/eglibc-2.15/elf/../sysdeps/posix/getcwd.c:490: undefined reference to `__closedir'
collect2: error: ld returned 1 exit status
make[2]: *** [/var/services/homes/abhi/test/ld/eglibc-build/elf/ld.so] Error 1
make[2]: Leaving directory `/var/services/homes/abhi/test/ld/eglibc-2.15/elf'
make[1]: *** [elf/subdir_lib] Error 2
make[1]: Leaving directory `/var/services/homes/abhi/test/ld/eglibc-2.15'
make: *** [all] Error 2

: 同じインフラストラクチャを使用して、完全な GLIBC をビルドしてインストールできるため、インフラストラクチャにエラーがあるとは思いません。-- Makeconfig を all-subdirs = csu elf gmon io misc posix setjmp signal stdlib string time に編集することに関連するエラーだと思います。--これに関する提案は..

解決済み 前に編集したものに加えて、all- subdirs リストに dirent を追加する必要がある

ありがとう

4

2 に答える 2

2

glibc のビルド システムでこれが簡単にできるかどうかはわかりませんが、libc.so をビルドせずに glibc ダイナミック リンカーをビルドして使用できない根本的な理由はありません。これを機能させる方法については、トップレベルの Makefile を熟読します。

テストに関しては、次の 2 つの方法があります。

  1. 次のように、動的リンカーを明示的に呼び出してプログラムを実行します。

    ./ld-linux.so.2 a.out args ...
    
  2. PT_INTERPプログラムをリンクするときは、このオプションをコンパイラ ドライバに渡すことによって、別の動的リンカー パス名 (プログラム ヘッダーに格納されます) を指定します。

    -Wl,-dynamic-linker,/path/to/alternate/ld-linux.so.2
    
于 2013-11-07T04:58:44.760 に答える