使用LKM实现Linux系统调用

时间:2012-09-27 13:55:13

标签: linux-kernel system-calls kernel-module

我试图向Linux内核3.2.x添加一个新的系统调用。 在通过互联网搜索有用的参考资料时,我有一种印象,即在问题Is it possible to add a system call via a LKM?

中无法实现系统调用作为可加载模块

我找到了另一个链接,上面写着“有一种方法可以添加系统调用而无需使用模块作为包装器重新编译内核,但这超出了本文档的范围”。 来源http://hekimian-williams.com/?p=20

我知道静态实现系统调用将要求我在每次进行任何更改时编译内核代码。是否有上述博客中指定的方法可以将其作为模块实现。

非常感谢任何有关方向的建议或指示。

1 个答案:

答案 0 :(得分:4)

  1. 找到sys_call_table/ia32_sys_call_table
  2. 制作副本并根据需要进行修改(让它为my_sys_call_table
  3. 找到system_call条目(此条目及其他条目)
  4. 如果表格大小已更改,则修改NR_syscalls比较instruction
  5. 修改system_call处的sys_call_table引用,指向my_sys_call_table

    500        call *sys_call_table(,%eax,4)
          ->
    500        call *my_sys_call_table(,%eax,4)
    
  6. 利润?
  7. 玩得开心:)