Недопустимый перехват системных вызовов в ядре Linux - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу использовать перехват системного вызова 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...