Я пытался переопределить все функции, связанные с файлами определенного процесса, как предварительно загруженная библиотека,
У меня есть этот код, который я компилирую как предварительно загруженную библиотеку, а затем просто запускаю процесс и смотрю на стандартный вывод:
#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
а затем просто используйте любую программу, которая использует fifo с:
LD_PRELOAD=hooks.so ./prog
проблема, кажется, что программа по какой-то причине использует функцию _IO_new_fopen из libio / iofopen.c, поэтому: 1. есть ли способ заставить ее использовать fopen? как он изначально пришел к использованию этой функции? или 2. я могу переопределить это? Я попробовал ту же подпись, но она не сработала ..
ОБНОВИТЬ:
из некоторых мест приложения, что обратный вызов является называется, так что я уверен, что это некоторые включает и должен быть способ переопределить это .. но как?
Задача ещё не решена.