#define MODULE #define __KERNEL__ #include #include #include #include #include struct task_struct *init_hook = NULL; extern void *sys_call_table[]; int (*o_ptrace)(int, int, int, int); int n_ptrace(int req, int pid, int addr, int data) { int r; r = o_ptrace(req, pid, addr, data); printk ("PTRACE (%08x, %08x, %08x, %08x) = %08x\n", req, pid, addr, data, r); return (r); } #define REPLACE(x) o_##x = sys_call_table[__NR_##x];\ sys_call_table[__NR_##x] = n_##x int init_module(void) { lock_kernel(); EXPORT_NO_SYMBOLS; REPLACE(ptrace); unlock_kernel(); return(0); } #define RESTORE(x) sys_call_table[__NR_##x] = o_##x int cleanup_module(void) { lock_kernel(); RESTORE(ptrace); unlock_kernel(); return(0); }