何らかの理由で自分のrtldバージョン(ld-elf.so.1)を修正してテストしようとしています。このリンカーを変更するたびに、システムを再起動し、CD/DVDから起動し、/libexec/にマイバージョンをインストールしてから、システムを再起動する必要があります。分割エラーのためにユーザー空間で実行されないことがあります。この過程で多くの時間を無駄にしました。
/libexecにrtldを再インストールし、システムを再起動せずにコマンドラインからこのリンカを起動する方法を尋ねたいと思います。 Linux /lib/ld-linux.so.2のようにrtldを実行できますか?
ld-elf.so.1を実行してみましたが、毎回分割エラーが発生しました。おそらく、rtldコマンドラインでいくつかのパラメータを見逃した可能性があります。コマンドラインからrtldを実行する方法に関する提案はありますか?
実行可能ファイルのデフォルトインタプリタを変更できますか?
編集:私のrootfsのファイルシステムとしてUFSを使用しています。
ベストアンサー1
Linuxのようにrtldを実行できますか
/lib/ld-linux.so.2
?
はい、/libexec/ld-elf.so.1 /path/to/your_binary
Linuxと同様にFreeBSDでもうまく動作します。
実行可能ファイルのデフォルトインタプリタを変更できますか?
はい、バイナリをコンパイルするときに渡すことができますcc -Wl,-dynamic-linker=/path/to/your_interpreter
。これが-Wl,..
gcc / clangが引数をリンカに直接渡す方法です。ld(1)
このフラグと他のフラグの説明は、マンページで確認できます。--dynamic-linker
実行しようとすると
ld-elf.so.1
毎回分割エラーが発生します。
動的リンカ/インタプリタは位置独立()でコンパイルする必要があり、それ自体は共有-pie
オブジェクトに依存したり、他のインタプリタを使用したりしないでください。