我们可以在内核空间中调用系统调用吗?

有时,当我们在内核系统中调用系统调用时,我们调用它的帮助程序或相关的内核函数,而不是“系统调用”。 我仍然想知道我们可以在内核空间中调用系统调用吗? 如果不是的话,什么阻止我们这样做。

我的问题有点奇怪

Solutions Collecting From Web of "我们可以在内核空间中调用系统调用吗?"

实际上,与普遍的看法相反(这里有一些答案),答案是,你可以,但取决于哪个操作系统:

  • 在Linux中,如果你可以找到它们的内核输出(例如“cat / proc / kallsysms | grep sys_”),你可以调用几乎所有的系统调用。 通过设置数据段(KERNEL_DS),在大多数系统调用(接受用户模式*)中有一个小小的“技巧”来避开保护。 这不是完全推荐的,但是如果你需要从内核访问文件(比如SELinux),这当然是有道理的。

  • 在Windows中,内核中的大多数Nt *调用也可以作为Zw *调用 – 例如,执行“dumpbin / exports C:\ windows \ system32 \ ntoskrnl.exe | findstr Zw(或Nt)”。

  • 在Mac OS X中,技术上不应该被允许,尽管有一些聪明的黑客可以绕过它。

尽管系统调用确实是用户模式和内核之间的接口,但是,即使是有生产价值的代码也是如此 – 但通过谨慎遵守注意事项,出乎意料地出现了很多情况。