我想添加一个新的系统调用通过LKM,但我不知道如何做到这一点。也就是说,我知道如果我想添加一个全新的系统调用,我可以查看sys_call_table并找到一个sys_ni_syscall
并将其替换,但我很好奇是否有可能实际上将添加到sys_call_table
。我意识到它可能是而不是可能,因为它是一个固定大小的数组,但我想知道是否有其他聪明的方法来添加系统调用而不覆盖未使用的系统调用号码。是否可以通过LKM添加系统调用?
9
A
回答
1
检查“Linux内核模块编程指南”(http://www.tldp.org/LDP/lkmpg/2.6/html/index.html)的Linux文档项目网站。具体来说,看看这里的系统调用:http://www.tldp.org/LDP/lkmpg/2.6/html/x978.html。至少应该给你一个开始。
+4
请仔细阅读,虽然看起来像sys_call_table是不再在2.6内核中导出。请参阅syscall.c中的注释 – FreeMemory 2009-01-21 14:25:15
3
下面是一个例子
linux system calls
编辑:
上面的例子显示HOWTO实现系统调用,就实现一个从一个可加载的模块; AFAIK,这是不可能的,除非你在哪里覆盖现有的,因为数组的大小是#define。
请记住,还需要更改用户空间,至少如果您希望能够实际使用新的系统调用。
1
这是一个老问题,但我想提出我的解决方案。实施“类似系统调用”环境的最简单方法是依靠假设备。 特别是,您可以创建一个新的设备驱动程序,它实际上不会驱动任何东西。然而,写上它可能会导致已安装的模块执行所需的操作。 此外,如果您想要提供多项服务,则可以将它们映射到ioctl
操作。
相关问题
- 1. Android LKM拦截系统调用
- 2. 是否可以通过Theos Tweak拦截系统调用?被拘留的版本
- 3. OS X系统调用是否可以覆盖或插入系统范围内?
- 4. 我可以从模块添加一个系统调用吗?
- 5. Android:是否可以观察系统调用?
- 6. 是否可以在iOS上进行系统调用?
- 7. 当我寻找添加系统调用时,我添加系统调用linux-2.6.31
- 8. Mutex是否会调用系统调用?
- 9. 命令通过终端,但不是通过python系统调用
- 10. 是否可以使用django从系统目录加载文件?
- 11. 我们是否可以将系统图标添加到flex应用程序
- 12. 是否可以通过编程添加工作流程修改?
- 13. 是否可以实现通过EF添加插入行的ID
- 14. 是否可以通过编程添加Crystal Reports的子报表?
- 15. 是否可以通过DynamicProxy将属性添加到类型?
- 16. 制作系统,可以通过调试编写代码
- 17. 是否可以通过iPhone API下载使用统计信息?
- 18. 是否可以通过iPhone API下载使用统计信息?
- 19. 是否可以添加类?
- 20. 如何通过库调用C编译器而不是通过系统调用?
- 21. 是否可以从非Linux系统远程调试linux代码?
- 22. Linux:通过ptrace()执行系统调用()
- 23. 是否可以通过Java中的NTP客户端同步系统时钟?
- 24. 是否可以通过Python从系统托盘显示气球提示?
- 25. 是否可以在Windows的NumericUpDown按钮控件中添加系统时间?
- 26. 是否可以调用存储过程?
- 27. 是否可以通过使用datagrid列来调用该函数?
- 28. 是否可以通过引用从python调用C函数?
- 29. 是否可以通过API调用分发iOS应用程序
- 30. 是否可以通过网络上的应用程序(代码)通过网络启动“关闭”系统?
[使用LKM实现Linux系统调用]可能的副本(https://stackoverflow.com/questions/12623066/implementing-linux-system-call-using-lkm) – 2018-01-29 15:26:15