我试图覆盖某个进程的所有文件相关函数,作为预加载的库, 我有这个代码,我编译为预加载的库,然后我只是运行该过程,看看标准输出:
#include <stdio.h>
#include <dlfcn.h>
FILE *(*original_fopen)(const char*, const char*) = NULL;
FILE *fopen(const char *path, const char *mode) {
printf("In our own fopen, opening %s\n", path);
fflush(stdout);
if (!original_fopen) {
original_fopen = (FILE * (*)(const char*, const char*))dlsym(RTLD_NEXT, "fopen");
}
return (*original_fopen)(path, mode);
}
可以使用g++ -Wall -fPIC -shared -o hooks.so hooks.cpp -ldl
然后只使用任何使用fifos的程序:
LD_PRELOAD=hooks.so ./prog
问题是,似乎该程序出于某种原因使用来自libio / iofopen.c的函数_IO_new_fopen,所以:1。有没有办法强制它使用fopen?它最初是如何使用此功能的?或2.我可以覆盖它吗?我尝试了相同的签名,但它没有用..
更新: 从应用程序的某些地方调用回调 ,所以我确定这是一些包含,并且必须有一种方法来覆盖它..但是如何?