URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6839
[ Назад ]

Исходное сообщение
"Перехват функции файловой системы."

Отправлено Andrew , 14-Окт-07 17:27 
Подскажите плиз...

Как перехватить или получить сигнал о вызовах следующих функций.
   open();
   close();
   read();
   write();

   fopen();
   fclose();
   fread();
   fwrite();
И Т.Д.

Thenks...


Содержание

Сообщения в этом обсуждении
"Перехват функции файловой системы."
Отправлено Answer , 14-Окт-07 18:34 
f* - библиотечные функции, они в свою очередь вызывают функции из первой группы. для перехвата вызова этих функций надо лезть в ядро, написав, допустим модуль с функциями - обертками, подменяющий одноименные системные вызовы (по этому принципу работает много интересного софта, к примеру systrace).

"Перехват функции файловой системы."
Отправлено jd , 14-Окт-07 19:09 
Можно воспользоваться механизмом LD_PRELOAD: делаете библиотеку-враппер, в которой реазизуете функции, которые хотите перехватить, при необходимости вызываете из них (в конце) "обычные" обработчики с помощью dlsym(3). Хорошо, если в вашей системе можно сделать что-то вроде dlsym(RTDL_NEXT, "open"). Запускать программу нужно установив переменную среды LD_PRELOAD так, чтобы она указывала на библиотеку. Что-то вроде:

LD_PRELOAD=./mywrapper.so myprog

И будет вам счастье.


"Перехват функции файловой системы."
Отправлено Answer , 14-Окт-07 19:47 
>Можно воспользоваться механизмом LD_PRELOAD: делаете библиотеку-враппер, в которой реазизуете функции, которые хотите
>перехватить, при необходимости вызываете из них (в конце) "обычные" обработчики с
>помощью dlsym(3). Хорошо, если в вашей системе можно сделать что-то вроде
>dlsym(RTDL_NEXT, "open"). Запускать программу нужно установив переменную среды LD_PRELOAD так, чтобы
>она указывала на библиотеку. Что-то вроде:
>
>LD_PRELOAD=./mywrapper.so myprog
>
>И будет вам счастье.

Вот оно, оказывается, как бывает! :)


"Перехват функции файловой системы."
Отправлено niXman , 09-Авг-09 14:43 
>>Хорошо, если в вашей системе можно сделать что-то вроде dlsym(RTDL_NEXT, "open"). Запускать программу нужно установив переменную среды LD_PRELOAD так, чтобы она указывала на библиотеку. Что-то вроде:

А в каких системах это поддерживается?