thesequestionsを読んだ後、シンボルの解決順序を制御する方法の詳細を探しています。異なる動的に読み込まれたオブジェクトでシンボルを異なる方法で解決する
私の問題では、主に実行可能ファイルexec
があります。 exec
は、a.so
とc.so
に動的にリンクします。 a.so
は、b.so
に動的リンクします。 b.so
は、通常c.so
によって提供される機能foo
を呼び出しますが、この場合もexec
によって提供されます。 b.so
は、c.so
の実装がfoo
の場合にのみ機能します。
状況の図:
exec (foo caller and provider)
| \
a.so |
| |
b.so | (foo caller)
|/
c.so (foo provider)
私だけa.so
のコンパイル/ソースを制御することができ、私はLD_PRELOAD
でexec
にa.so
をリンクします。
私はexec
に解決するためにexec
でfoo
への呼び出しを希望の実装、およびb.so
のコールはc.so
に解決するための実装。異なるオブジェクト内の異なるシンボルルックアップを持つこのタイプのものは可能ですか?
「dlsym」でこれをどうすればできますか?私は '' a.so''が '' cs.so''の '' foo''を '' dlsym''でどのように参照できるのかを見ていますが、 '' dlsym''を使って ' 'b.so''それを使用しますか? –
申し訳ありませんが、質問は間違っています。私は答えを更新しました、うまくいけば、それは今より有用です。 – yugr
編集ありがとう!しかし、すべての依存関係は、ダイアグラムでのみ下に移動します( '' a.so''は '' b。'' __builtin_return_address''のトリックは機能しません。また、実際には '' exec''と '' c.so''に '' foo''を別々に実装しています。 GOTのハッキングに関するリソースがありますか(これは私が降りたい道路ではありませんが、私が学びたいことです)? –