0

2 つの共有ライブラリがあります。ライブラリは、を使用してライブラリ B をロードしdlopenます。

同じ一連の API を実装します。

同じシステムで実行されているクライアントが API にアクセスしようとすると、どのライブラリをロードするのでしょうか?

それともこれは無効なことですか?B を静的ライブラリにする必要があります。

私の目標は、クライアントがライブラリ A にのみアクセスできるようにすることです。

4

1 に答える 1

0

クライアントを制御できますか (つまり、クライアントを再コンパイルできますか)? その場合は、リンク時にライブラリ A を指定するだけです。その場合、それは A のdlopenBへのケアとなります。

B の関数呼び出しをハイジャックしようとしている場合foo、クライアントはライブラリ B をロードしようとしていますLD_PRELOAD。代わりにライブラリ A を強制的にロードするために を使用できます。次に、クライアントが呼び出しを発行し、 A が応答します。A は、入力値と戻り値の両方を変更、変更、および/またはログに記録した後foo()、呼び出しを にルーティングできます。foo()@B

LD_PRELOAD=B.so ./clientの代わりに を使用してクライアントを呼び出します./client

于 2012-09-28T13:14:01.133 に答える