10

我想通过 LKM 添加一个新的系统调用,但我不知道该怎么做。也就是说,我知道如果我想添加一个全新的系统调用,我可以查看 sys_call_table 并找到一个sys_ni_syscall并替换它,但我很好奇是否可以实际添加sys_call_table. 我意识到这可能是不可能的,因为它是一个固定大小的数组,但我想知道是否有任何其他聪明的方法来添加系统调用而不覆盖未使用的系统调用号。

4

3 回答 3

4

这是一个示例
linux 系统调用

编辑:
上面的示例显示了如何实现系统调用,就从可加载模块实现系统调用而言;AFAIK,这是不可能的,除非您在哪里覆盖现有的,因为数组的大小是#define。

请记住,至少如果您希望能够实际使用新的系统调用,还需要更改用户空间。

于 2009-01-21T06:03:54.797 回答
2

检查 Linux 文档项目网站以获取“Linux 内核模块编程指南”(http://www.tldp.org/LDP/lkmpg/2.6/html/index.html)。具体来说,在此处查找系统调用:http ://www.tldp.org/LDP/lkmpg/2.6/html/x978.html 。至少,这应该给你一个开始。

于 2009-01-21T05:04:51.873 回答
2

这是一个老问题,但我还是想提出我的解决方案。实现“类系统调用”环境的最简单方法是依赖假设备。特别是,您可以创建一个实际上不驱动任何东西的新设备驱动程序。然而,在其上书写可能会导致已安装的模块执行所需的操作。此外,如果您想提供多种服务,您可以将它们映射到ioctl操作。

于 2013-11-12T20:33:11.687 回答