Здравствуйте создал библиотеку для перехвата open
#include <stdio.h>
#include <string.h>
#include <dlfcn.h>
#include <fcntl.h>
#ifndef RTLD_NEXT
#define RTLD_NEXT ((void *) -1l)
#endif /* RTLD_NEXT */
int open(const char *filename, int flags, mode_t mode)
{
if (strstr(filename,"/openlog")==NULL)
{
char buf[256];
FILE *f=fopen("/openlog","a");
if (f!=NULL)
{
sprintf(buf,"файл %s успешно открыт",filename);
fwrite(buf,sizeof(buf),1,f);
}
fclose(f);
}
int (*open_orig)(const char *filename,int flags,mode_t mode)=(int (*)(const char*, int, mode_t))dlsym(RTLD_NEXT, "open");
return open_orig(filename, flags, mode);
}
[root@maks mylib]# gcc -fPIC -c -Wall main.cpp
[root@maks mylib]# gcc -shared main.o -ldl -o main.so
устанавливаю LD_PRELOAD
[root@maks mylib]# LD_PRELOAD="main.so" /usr/bin/mc
ERROR: ld.so: object 'main.so' from LD_PRELOAD cannot be preloaded: ignored.