【发布时间】:2010-07-31 00:05:18
【问题描述】:
我可以从模块中添加系统调用吗?
【问题讨论】:
-
如果你在谈论一个特定的内核,你应该添加一个标签(例如
linux-kernel)。
标签: c kernel-module libc
我可以从模块中添加系统调用吗?
【问题讨论】:
linux-kernel)。
标签: c kernel-module libc
在某些内核版本中,可以通过更改 sys_call_table 添加或修改 systemcall。但是因为这个表不打算在运行时改变,所以它没有保护。更改表格将导致竞争条件。即使没有竞争条件,在使用或堆叠模块时也存在与移除模块相关的问题。由于从模块更改sys_call_table 时出现问题,该符号不再在新内核中导出。换句话说,如果您在尝试加载模块时收到"unresolved symbol sys_call_table",则表示模块中存在错误,内核不再接受此类错误模块。
【讨论】:
无论您是否可以,这听起来都是一个非常糟糕的主意。如果您的新系统调用将在文件/设备上运行,也许您可以将其设为 ioctl 或类似的东西,而不是使其成为自己的系统调用?
【讨论】: