当前位置: 首页 > 面试题库 >

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

宋望
2023-03-14
问题内容

有时,当我们必须在内核系统中调用系统调用时,我们调用它的助手或相关的内核函数,而不是执行“
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中,尽管有一些聪明的技巧可以解决,但从技术上讲,它是不允许的。

尽管系统调用确实是用户模式和内核之间的接口,但令人惊讶的是,在很多情况下,即使是具有生产价值的代码也可以这样做-但要仔细观察警告。



 类似资料:
  • vsyscalls 和 vDSO 这是讲解 Linux 内核中系统调用章节的第三部分,前一节讨论了用户空间应用程序发起的系统调用的准备工作及系统调用的处理过程。在这一节将讨论两个与系统调用十分相似的概念,这两个概念是vsyscall 和 vdso。 我们已经了解什么是系统调用。这是 Linux 内核一种特殊的运行机制,使得用户空间的应用程序可以请求,像写入文件和打开套接字等特权级下的任务。正如你所

  • Linux 内核如何处理系统调用 前一小节 作为本章节的第一部分描述了 Linux 内核system call 概念。 前一节中提到通常系统调用处于内核处于操作系统层面。前一节内容从用户空间的角度介绍,并且 write系统调用实现的一部分内容没有讨论。在这一小节继续关注系统调用,在深入 Linux 内核之前,从一些理论开始。 程序中一个用户程序并不直接使用系统调用。我们并未这样写 Hello Wo

  • 简介 这次提交为 linux-insides 添加一个新的章节,从标题就可以知道, 这一章节将介绍Linux 内核中 System Call 的概念。章节内容的选择并非偶然。在前一章节我们了解了中断及中断处理。系统调用的概念与中断非常相似,这是因为软件中断是执行系统调用最常见的方式。我们将讨论系统调用概念的各个方面。例如,用户空间发起系统调用的细节,内核中一组系统调用处理器的执行过程, VDSO

  • 问题内容: 我有兴趣用将在Linux内核3中实现的自定义替换系统调用。我了解到sys调用表不再公开。 有任何想法吗? 对此http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x978.html示例的任何引用,对于内核3都将不胜感激:) 谢谢! 问题答案: 我建议使用kprob

  • 问题内容: 我对这个内核东西很陌生。我要做的只是向内核添加一个新的系统调用。我正在遵循以下指南:http : //hekimian-williams.com/?p=20。 问题是存在于arch / x86 / kernel下的syscall_table_32.S文件中,但是在内核版本3.3中找不到x86系统的文件。我仍然需要编辑文件并为新添加的系统调用追加一行吗?还是我需要做其他事情让内核知道我的

  • 问题内容: 我阅读了LKD 1中的一些段落,但 我无法理解以下内容: 从用户空间访问系统调用 通常,C库提供对系统调用的支持。用户应用程序可以从标准标头中提取函数原型,并与C库链接以使用您的系统调用(或库例程,后者又使用syscall调用)。但是,如果您只是编写了系统调用,则怀疑glibc是否已支持它! 幸运的是,Linux提供了一组宏,用于包装对系统调用的访问。它设置寄存器内容并发出陷阱指令。这