ツールを書いています。そのツールの一部は、システム コールのパラメーターをログに記録する機能です。ptrace
その目的に使用できますが、ptrace
かなり遅いです。私の頭に浮かんだより高速な方法は、glibc を変更することでした。しかし、gcc は glibc で定義されたコードを使用するよりも、独自の組み込み関数をシステム コール ラッパーとして魔法のように挿入するため、これは難しくなっています。使用-fno-builtin
もそこでは役に立ちません。
そこで、すべてのシステム コール ラッパーを含む共有ライブラリを作成するというアイデアを思いつきました。mmap
次に、実際のシステム コール ラッパー関数を呼び出す前にロギングを実行します。たとえば、mymmap
がどのように見えるかの疑似コードを以下に示します。
int mmap(...)
{
log_parameters(...);
call_original_mmap(...);
...
}
次に、LD_PRELOAD を使用して、このライブラリを最初にロードします。このアイデアはうまくいくと思いますか、それとも何か不足していますか?