0

我正在尝试使用 LD_PRELOAD 来拦截打开/关闭的调用。我对 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() 系统调用,尽管从 strace 输出来看,这两个系统调用的外观完全相同。

我知道我可以只写我对 fclose() 的拦截,它也适用于 C++ 的 ofstream::close()。但是,我对 open()/fopen() 的拦截仍然不适用于 C++ 的 ofstream::ofstream()。如何确保拦截所有打开或关闭文件的调用,无论是哪个包装函数调用它们?谢谢!

4

0 回答 0