Почему find(ing) by -atime не печатает ожидаемые файлы?

Короче говоря, загрузите свою библиотеку с помощью LD_PRELOADoverride syslog (3)вместо подключения (3 ).

Сокет /dev/logUnix используется функцией syslog (3 )glibc, которая подключается к нему и записывает в него данные. Переопределение connect (3 ), вероятно, не работает, потому что реализация syslog (3 )внутри glibc будет выполнять системный вызов connect (2), а не библиотечную функцию, поэтому ловушка LD_PRELOADне будет перехватывать вызов из системного журнала (3 ).

Существует разрыв между strace, который показывает системные вызовы, и LD_PRELOAD, который может переопределять библиотечные функции (, в данном случае функции из glibc. )Тот факт, что существует функция connect (3)glibc, а также системный вызов connect (2 ), также помогает устранить эту путаницу. (Возможно, здесь помогло бы использование ltrace, показывая вместо этого вызовы системного журнала (3 ).)

Вероятно, вы можете подтвердить, что переопределение подключения (3 )в LD_PRELOAD, которое вы делаете, не будет работать с syslog (3 ), если ваша тестовая программа вызовет syslog (3 )напрямую, а не явно подключаясь к /dev/log, что, как я подозреваю, является тем, как ведет себя приложение.NET Core.

Подключение к системному журналу (3 )также потенциально более полезно, потому что, находясь на более высоком уровне стека, вы можете использовать этот хук для принятия решений, таких как выборочная пересылка некоторых из сообщения в системный журнал. (Вы можете загрузить функцию системного журнала из glibc с помощью dlsym(RTLD_NEXT, "syslog"),а затем вы можете использовать этот указатель функции для вызова syslog (3 )для сообщений, которые вы хотите переслать с вашего хука.)

Подход с заменой /dev/logна символическую ссылку на /dev/nullнесовершенен, поскольку /dev/nullне принимает операции соединения (2 )(только файловые операции, такие как открытие (2 )), поэтому syslog (3 )попытается подключиться и получить ошибку и как-то попытаться ее обработать (или, возможно, вернуть вызывающей стороне ), в любом случае это может иметь побочные эффекты.

Надеемся, что здесь достаточно LD_PRELOADпереопределения системного журнала (3 ).

3
08.01.2019, 01:02
0 ответов

Теги

Похожие вопросы