Я хочу использовать перехват системного вызова open .Поскольку у меня версия ядра 4.18, я должен взять адрес таблицы системных вызовов из файла System.map в папке / boot .Итак,
grep sys_call_table System.map-4.18.0-10-generic
дает мне следующие строки:
ffffffff81e001c0 R sys_call_table
ffffffff81e015a0 R ia32_sys_call_table
Я использую этот адрес (из первой строки) в своем коде, но insmod возвращает «Killed»после .ко казни.
Понятия не имею, об этом ваши советы мне очень помогут!
unsigned long *sys_call_table = (unsigned long *)0xffffffff81e001c0;
asmlinkage int (*original_call) (const char *, int, int);
asmlinkage int our_sys_open(const char *filename, int flags, int mode)
{
int i = 0;
char ch;
do {
get_user(ch, filename + i);
i++;
printk("%c", ch);
} while (ch != 0);
printk("\n");
return original_call(filename, flags, mode);
}
int init_module()
{
original_call = (void *) sys_call_table[__NR_open];
sys_call_table[__NR_open] = (unsigned long) our_sys_open;
return 0;
}
void cleanup_module()
{
sys_call_table[__NR_open] = original_call;
}
MODULE_LICENSE("GPL");