Linux内核 - 通过模块动态添加系统调用

16

有没有办法通过一个模块来动态添加系统调用?我已经找到了可以通过修改 sys_call_table[] 数组来覆盖现有系统调用的地方,让我的模块在安装时使用我的替代函数而不是原生函数,但是对于新的系统调用和模块,能实现这个操作吗?


我一直认为添加系统调用是不可行的,但这只是道听途说。 - jdizzle
1
是的,为rootkit添加系统调用有点无用 :) - Nikolai Fetissov
添加系统调用绝对不受支持。你可能需要一个新的解决方案来解决你的问题。你为什么觉得需要一个新的系统调用呢? - stsquad
2个回答

12

不,sys_call_table 是固定大小的:

const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = { ... 

你可能已经发现,最好的方法是拦截现有的系统调用。


1
谢谢。是的,我已经决定拦截。 - Zach

0
拦截现有的系统调用(以在内核中完成某些操作)在某些情况下并不是正确的方法。例如,如果您的用户空间驱动程序需要在内核中执行某些操作、发送数据或从内核中读取数据,通常正确的方法是使用ioctl()调用,它只是一个系统调用,但可以通过传递不同的参数来调用不同的内核函数或驱动程序模块。
上述内容是关于用户控制的内核代码执行。
对于数据传递,您可以使用procfs或sysfs驱动程序与内核进行通信。
附注:当您拦截系统调用时,这通常会影响整个操作系统,因此您必须考虑如何安全地解决这样做的问题:如果其他人正在调用该系统调用,而您修改/拦截了代码,会发生什么?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接