переопределение функции fopen не вызывается в некоторых случаях?

Я пытался переопределить все функции, связанные с файлами определенного процесса, как предварительно загруженная библиотека,
У меня есть этот код, который я компилирую как предварительно загруженную библиотеку, а затем просто запускаю процесс и смотрю на стандартный вывод:

    #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. я могу переопределить это? Я попробовал ту же подпись, но она не сработала ..

ОБНОВИТЬ:
из некоторых мест приложения, что обратный вызов является называется, так что я уверен, что это некоторые включает и должен быть способ переопределить это .. но как?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]