1

実行時に実行依存共有ライブラリとリンクできるようにしたい弱いシンボルを持つバイナリがあります。

$nm testrun
...         
w basic2.test
...

私の最初のテストでは.o、静的リンク時にファイルを使用していましたが、うまくいきましたが、共有する必要があります。

したがって、私の 2 番目のテストは、そのシンボルが定義された共有ライブラリを取得し、コンパイル時に-lmy(libmy.so) とリンクすることでした。これも実際に機能しました。

3 番目のステップでは、コンパイル時にリンクせずに ld_preload トリックを使用しようとしましたが、これは機能しませんでした。

nm libmy.so
...
00000550 T basic2.test
...

この特定のものが機能しない理由は本当にわかりません。動的ローダーには、libmy.so にあるものでテストランの弱いシンボルを設定するのに十分な情報が必要なようです。

より多くの作業が必要になると思われる私の最終的な目的は、dlsym で適切なシンボルをチェックしてそこに設定する小さな関数を開始時にロードすることです。

ヒントはありますか?

4

1 に答える 1

3

manページLD_DYNAMIC_WEAKからと一緒に使用する必要があるようです:LD_PRELOAD

LD_DYNAMIC_WEAK (2.1.91 以降の glibc)弱いシンボルをオーバーライドできるようにします(古い glibc の動作に戻します)。セキュリティ上の理由から、glibc 2.3.4 以降、set-user-ID/set-group-ID バイナリでは LD_DYNAMIC_WEAK が無視されます。

注: タイプミスの可能性がありますが、使用-lmylib.soしないでください。-Lmylib.so

于 2012-11-21T15:31:22.937 に答える