#include #include #include #include #include #include #include #include static void __attribute__ ((constructor)) on_load(void) { //printf("LIBRARY: LOADED\n"); } static void __attribute__ ((destructor)) on_unload(void) { //printf("LIBRARY: UNLOADED\n"); } static int print_trap(const char *fn, const char *filename) { char buffer[PATH_MAX]; realpath(filename, buffer); printf("WRITE TRAP [%s]: %s\n", fn, buffer); } int open(const char *filename, int flags, ...) { int result; if (flags & (O_WRONLY | O_RDWR | O_CREAT | O_APPEND)) print_trap("open", filename); if (flags & O_CREAT) { va_list ap; va_start(ap, flags); result = syscall(SYS_open, filename, flags, va_arg(ap, int)); va_end(ap); } else { result = syscall(SYS_open, filename, flags); } return result; } int truncate(const char *path, off_t length) { print_trap("truncate", path); return syscall(SYS_truncate, path, length); } int unlink(const char *path) { print_trap("unlink", path); return syscall(SYS_unlink, path); } int mkdir(const char *path, mode_t mode) { print_trap("mkdir", path); return syscall(SYS_mkdir, path, mode); } int link(const char *name1, const char *name2) { print_trap("link", name2); return syscall(SYS_link, name1, name2); } int symlink(const char *name1, const char *name2) { print_trap("symlink", name2); return syscall(SYS_symlink, name1, name2); } int rename(const char *from, const char *to) { print_trap("rename", from); print_trap("rename", to); return syscall(SYS_rename, from, to); } int rmdir(const char *path) { print_trap("rmdir", path); return syscall(SYS_rmdir, path); }