int get_sct() { unsigned long *ptr; ptr=(unsigned long *)((init_mm.end_code + 4) & 0xfffffffc); while((unsigned long )ptr < (unsigned long)init_mm.end_data) { if ((unsigned long *)*ptr == (unsigned long *)sys_close) { #ifdef DEBUG printk (KERN_INFO" -> matching detected at %p\n", ptr); #endif if ( (unsigned long *)*((ptr-__NR_close)+__NR_read) == (unsigned long *) sys_read && *((ptr-__NR_close)+__NR_open) == (unsigned long) sys_open) { sys_call_table = (void **) ((unsigned long *)(ptr-__NR_close)); break; } } ptr++; } #ifdef DEBUG printk (KERN_INFO"sys_call_table base found at: %p\n", sys_call_table); #endif if (sys_call_table == NULL) { return -1;} else { return 1; } return -1; }