我需要用自己的实现替换标准系统调用(例如SYS_mkdir).
正如我在一些来源中读到的,包括Stackoverflow上的this question,自内核版本2.6以来,sys_call_table不是导出符号.
我尝试了以下代码:
@H_403_6@#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); } ....不幸的是我收到编译错误:
@H_403_6@error: assignment of read-only location ‘sys_call_table[83]’如何更换系统调用?
编辑:有没有内核修补的解决方案?
解决方法
这对我有用.
看到
Linux Kernel: System call hooking example
和
https://bbs.archlinux.org/viewtopic.php?id=139406