Почему мой перехват LD_PRELOAD работает для открытия / закрытия, но не для fopen / fclose?

Я пытаюсь использовать 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 ++. Как я могу убедиться, что я перехватываю все вызовы, чтобы открыть или закрыть файл, независимо от того, какая функция-оболочка вызывает их? Спасибо!

0

Решение

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

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

Других решений пока нет …

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