Russian Qt Forum

Программирование => С/C++ => Тема начата: koldun90 от Декабрь 25, 2015, 20:39



Название: Системный вызов
Отправлено: koldun90 от Декабрь 25, 2015, 20:39
Здравствуйте не подскажите как можно перехватить системные вызовы open create read write?

upd: нашел модуль ядра помогите скомпилировать
Код
C
#include <linux/module.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <linux/types.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <asm/uaccess.h>
 
extern void *sys_call_table[];
 
int (*orig_open)(const char *pathname, int flag, int mode);
 
int own_open(const char *pathname, int flag, int mode)
{
   char *kernel_path;
   char hide[]="test.txt";
   kernel_path=(char *)kmalloc(255,GFP_KERNEL);
 
   copy_from_user(kernel_path, pathname, 255);
   if(strstr(kernel_path,(char *)&hide) != NULL)
   {
kfree(kernel_path);
return -ENOENT;
 
   }
   else
   {
kfree(kernel_path);
return orig_open(pathname, flag, mode);
 
   }
 
}
int init_module()
{
   orig_open=sys_call_table[SYS_open];
   sys_call_table[SYS_open]=own_open;
   return 0;
 
}
 
void cleanup_module()
 
{
   sys_call_table[SYS_open]=orig_open;
}
 


Название: Re: Системный вызов
Отправлено: qate от Декабрь 28, 2015, 11:08
http://habrahabr.ru/post/199090/
http://www.catonmat.net/blog/simple-ld-preload-tutorial/