File indexing completed on 2024-06-16 05:02:00
0001 /* 0002 * This is based on work by D.J. Capelis, modified by Jan Kundrát. 0003 * http://stackoverflow.com/questions/69859/how-could-i-intercept-linux-sys-calls 0004 * */ 0005 #define _GNU_SOURCE 0006 #include <dlfcn.h> 0007 #include <string.h> 0008 #include <sys/types.h> 0009 0010 extern int errorno; 0011 0012 int (*_open)(const char * pathname, int flags, ...); 0013 int (*_open64)(const char * pathname, int flags, ...); 0014 0015 const char * dev_random = "/dev/random"; 0016 const char * dev_urandom = "/dev/urandom"; 0017 0018 int open(const char * pathname, int flags, mode_t mode) 0019 { 0020 _open = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open"); 0021 if (strcmp(pathname, dev_random) == 0) 0022 return _open(dev_urandom, flags, mode); 0023 else 0024 return _open(pathname, flags, mode); 0025 } 0026 0027 int open64(const char * pathname, int flags, mode_t mode) 0028 { 0029 _open64 = (int (*)(const char * pathname, int flags, ...)) dlsym(RTLD_NEXT, "open64"); 0030 if (strcmp(pathname, dev_random) == 0) 0031 return _open64(dev_urandom, flags, mode); 0032 else 0033 return _open64(pathname, flags, mode); 0034 }