私は現在、いくつかのシステムコールと、、、などの低レベル関数の使用状況を追跡する必要があるプロジェクトに取り組んでmmap
いbrk
ますsbrk
。mmap
これまで、関数の介在を使用してこれを行ってきました。たとえば、置き換える関数と同じ名前のラッパー関数を記述し、LD_PRELOAD
環境変数を設定してプログラムにロードします。でロードするポインターを介して実際の関数を呼び出しますdlsym
。
残念ながら、ラップしたい関数の1つである、sbrk
は、によって内部的に使用されdlsym
ているため、シンボルをロードしようとするとプログラムがクラッシュします。sbrk
Linuxではシステムコールではないので、単にsyscall
間接的に呼び出すために使用することはできません。
だから私の質問は、使用せずに同じ名前のラッパー関数からライブラリ関数を呼び出すにはどうすればよいdlsym
ですか?元の関数を参照できるコンパイラのトリック(gccを使用)はありますか?