0

LD_PRELOAD を使用して、open/close の呼び出しをインターセプトしようとしています。close() の私のテスト実装はただ

int close(int fd) {
  fprintf(stderr, "TEST\n");
  return syscall(SYS_close, fd);
}

そして、私はそれを行うテストプログラムを持っています

int handle=open("test.txt", O_WRONLY|O_CREAT, 0644);
close(handle);
FILE *f = fopen("test.txt", "w");
fclose(f);

問題は、私の LD_PRELOAD コードは close() 呼び出しを正常に傍受しましたが、fclose() から作成された close() syscall を傍受できませんでしたが、strace 出力からは 2 つの syscall がまったく同じに見えます。

fclose() のインターセプトを書くだけでよいことはわかっており、C++ の ofstream::close() でも機能しました。ただし、open()/fopen() のインターセプトは、C++ の ofstream::ofstream() ではまだ機能しません。どのラッパー関数が呼び出すかに関係なく、ファイルを開いたり閉じたりするすべての呼び出しをインターセプトするにはどうすればよいですか? ありがとう!

4

0 に答える 0