Я пытаюсь использовать 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 (), но не смог перехватить системный вызов close (), созданный из fclose (), хотя при выводе strace эти два системных вызова выглядят совершенно одинаково.
Я знаю, что могу просто написать свой перехват fclose (), и это также работает для ofstream :: close () в C ++. Тем не менее, мои перехваты для open () / fopen () все еще не работают для ofstream :: ofstream () в C ++. Как я могу убедиться, что я перехватываю все вызовы, чтобы открыть или закрыть файл, независимо от того, какая функция-оболочка вызывает их? Спасибо!
Задача ещё не решена.
Других решений пока нет …