【发布时间】:2012-12-02 07:38:10
【问题描述】:
我需要用我自己的实现替换标准系统调用(例如 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]’
如何替换系统调用?
编辑:有没有不打内核补丁的解决方案?
【问题讨论】:
标签: c module linux-kernel kernel-module