2 つの共有ライブラリがあります。ライブラリは、を使用してライブラリ B をロードしdlopen
ます。
同じ一連の API を実装します。
同じシステムで実行されているクライアントが API にアクセスしようとすると、どのライブラリをロードするのでしょうか?
それともこれは無効なことですか?B を静的ライブラリにする必要があります。
私の目標は、クライアントがライブラリ A にのみアクセスできるようにすることです。
2 つの共有ライブラリがあります。ライブラリは、を使用してライブラリ B をロードしdlopen
ます。
同じ一連の API を実装します。
同じシステムで実行されているクライアントが API にアクセスしようとすると、どのライブラリをロードするのでしょうか?
それともこれは無効なことですか?B を静的ライブラリにする必要があります。
私の目標は、クライアントがライブラリ A にのみアクセスできるようにすることです。
クライアントを制御できますか (つまり、クライアントを再コンパイルできますか)? その場合は、リンク時にライブラリ A を指定するだけです。その場合、それは A のdlopen
Bへのケアとなります。
B の関数呼び出しをハイジャックしようとしている場合foo
、クライアントはライブラリ B をロードしようとしていますLD_PRELOAD
。代わりにライブラリ A を強制的にロードするために を使用できます。次に、クライアントが呼び出しを発行し、 A が応答します。A は、入力値と戻り値の両方を変更、変更、および/またはログに記録した後foo()
、呼び出しを にルーティングできます。foo()@B
LD_PRELOAD=B.so ./client
の代わりに を使用してクライアントを呼び出します./client
。