【问题标题】:Can I add a systemcall from a module?我可以从模块中添加系统调用吗?
【发布时间】:2010-07-31 00:05:18
【问题描述】:

我可以从模块中添加系统调用吗?

【问题讨论】:

  • 如果你在谈论一个特定的内核,你应该添加一个标签(例如linux-kernel)。

标签: c kernel-module libc


【解决方案1】:

在某些内核版本中,可以通过更改 sys_call_table 添加或修改 systemcall。但是因为这个表不打算在运行时改变,所以它没有保护。更改表格将导致竞争条件。即使没有竞争条件,在使用或堆叠模块时也存在与移除模块相关的问题。由于从模块更改sys_call_table 时出现问题,该符号不再在新内核中导出。换句话说,如果您在尝试加载模块时收到"unresolved symbol sys_call_table",则表示模块中存在错误,内核不再接受此类错误模块。

【讨论】:

    【解决方案2】:

    无论您是否可以,这听起来都是一个非常糟糕的主意。如果您的新系统调用将在文件/设备上运行,也许您可​​以将其设为 ioctl 或类似的东西,而不是使其成为自己的系统调用?

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 2013-09-25
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2016-07-20
      相关资源
      最近更新 更多