5

我试图向 linux 内核 3.2.x 添加一个新的系统调用。在互联网上搜索有用的参考资料时,我的印象是不可能将系统调用实现为可加载模块,因为在 SO 问题中是否可以通过 LKM 添加系统调用?

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

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

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

4

1 回答 1

5
  1. 定位sys_call_table/ia32_sys_call_table
  2. 复制并根据需要进行修改(顺其自然my_sys_call_table
  3. 找到system_call条目(这个和其他)
  4. 在表大小发生变化的情况下修改NR_syscalls比较指令
  5. 修改system_callsys_call_table处的引用以指向:my_sys_call_table

    500        call *sys_call_table(,%eax,4)
          ->
    500        call *my_sys_call_table(,%eax,4)
    
  6. 利润?

玩得开心 :)

于 2012-09-27T22:38:09.473 回答