ядро 2.6.3 написал маленький модуль,который должен подменить системный вызов execve #include <linux/types.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/unistd.h> # define print(fmt, args...) printk( KERN_INFO "smotrel: " fmt, ## args) unsigned *sys_call_table;
int (*o_execve)(struct pt_regs); int n_execve (struct pt_regs regs){ print ("hello\n"); return o_execve(regs); }
unsigned *find_sc(void) { .... }
int init_module(){ print("module inserted\n"); sys_call_table=find_sc(); print("sys_call_table adress:0x%x\n",sys_call_table); o_execve=(void *)sys_call_table[__NR_execve]; print("execve in sys_call_table:0x%x\n",&sys_call_table[__NR_execve]); print("execve aress:0x%x\n",o_execve); //sys_call_table[__NR_chmod]=(unsigned)n_chmod; return 0; } void cleanup_module(){ //sys_call_table[__NR_chmod]=(unsigned)o_chmod; print("module removed\n"); } после выполнения insmod rmmod вывод такой : [root@localhost mod]# tail /var/log/messages Mar 25 05:18:38 localhost kernel: smotrel: module inserted Mar 25 05:18:38 localhost kernel: smotrel: sys_call_table adress:0xc0323be0 Mar 25 05:18:38 localhost kernel: smotrel: execve in sys_call_table:0xc0323c0c Mar 25 05:18:38 localhost kernel: smotrel: execve aress:0xc01099e0 Mar 25 05:18:42 localhost kernel: smotrel: module removed проверил все с помощью gdb- все адреса правильные.