有时候,当我们必须在内核系统中调用系统调用时,我们调用它的帮助器或相关的内核函数,而不是做'syscall'。我仍然想知道我们能在内核空间中调用系统调用吗?如果不能,是什么阻止我们这样做。我的问题有点怪。
bq3bfh9z1#
实际上,与普遍的看法(以及此处的一些答案)相反,答案是,是的,您可以,但取决于操作系统:
cat /proc/kallsyms | grep sys_
尽管系统调用确实是用户模式和内核之间的接口,但令人惊讶的是,在相当多的情况下,即使是有生产价值的代码也会这样做--但要仔细遵守注意事项。
1条答案
按热度按时间bq3bfh9z1#
实际上,与普遍的看法(以及此处的一些答案)相反,答案是,是的,您可以,但取决于操作系统:
cat /proc/kallsyms | grep sys_
)。在大多数系统调用中(那些接受用户模式 * 的系统调用),有一个小“技巧”可以通过设置数据段(KERNEL_DS)来绕过保护。这不是完全推荐的,但是如果你需要从内核访问文件(比如SELinux),这肯定是有意义的。尽管系统调用确实是用户模式和内核之间的接口,但令人惊讶的是,在相当多的情况下,即使是有生产价值的代码也会这样做--但要仔细遵守注意事项。