我需要用自己的实现替换标准系统调用(例如SYS_mkdir)。
根据一些来源,包括Stackoverflow上的this question,自内核版本2.6
以来,sys_call_table
未被导出为符号。
我尝试了以下代码:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/unistd.h>
#include <asm/syscall.h>
int (*orig_mkdir)(const char *path);
....
int init_module(void)
{
orig_mkdir=sys_call_table[__NR_mkdir];
sys_call_table[__NR_mkdir]=own_mkdir;
printk("sys_mkdir replaced\n");
return(0);
}
....
不幸的是,我收到编译器错误:
error: assignment of read-only location ‘sys_call_table[83]’
我该如何替换系统调用?
编辑:有没有不需要内核补丁的解决方案?
char*
,然后进行赋值。 - Grijesh Chauhan