liu*_*ruc 8 linux kernel system-calls
有时,当我们必须在内核系统中调用系统调用时,我们调用它的帮助器或相关的内核函数,而不是'syscall'.我仍然想知道我们可以在内核空间中调用系统调用吗?如果没有,是什么阻止我们这样做.
我的问题有点奇怪.
实际上,与流行的看法(以及这里的一些答案)相反,答案是,是的,你可以,但取决于哪个操作系统:
在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中,技术上不应该被允许,尽管有一些聪明的黑客可以绕过它.
即使系统调用确实是用户模式和内核之间的接口,但令人惊讶的是,即使是具有生产价值的代码也会出现这种情况,但通过仔细遵守注意事项.