open() システム コールを完全に引き継いで、おそらく実際のシステム コールをラップしてログを記録したいとします。これを行う 1 つの方法は、LD_PRELOAD を使用して、open() エントリ ポイントを引き継ぐ (ユーザーが作成した) 共有オブジェクト ライブラリをロードすることです。
次に、ユーザーが作成した open() ルーチンは、glibc 関数へのポインターを ing して呼び出して取得しopen()
ますdlsym()
。
ただし、上記で提案したソリューションは動的なソリューションです。自分のopen()
ラッパーを静的にリンクしたいとします。どうすればいいですか?メカニズムは同じだと思いますが、ユーザー定義open()
と libcの間にシンボルの衝突があると思いopen()
ます。
同じ目標を達成するための他のテクニックを共有してください。