系统调用可以简单说是用户程序使用系统资源的接口,但是用户程序一般都不是直接调用系统调用,而是通过系统API、C库等间接调用,执行内陷命令,进入核心态执行。
在Linux系统中,每个系统调用被赋予一个系统调用号。这样,通过这个独一无二的编号就可以关联一个系统调用。用户空间程序需要调用系统调用时,只需要给出其对应的系统调用号就可以。内存记录了系统调用表中所有已经注册过的系统调用的列表,存储在sys_call_table中。
用户程序通过软中断实现内陷操作。通过引发一个异常来促使系统切换到内核态去执行异常处理程序。在x86上,内陷之前,需要通过eax寄存器把系统调用号传递到内核。sys_call()函数通过给定的系统调用号与NR_syscalls做比较来检查其有效性。如果它大于或者等于NS_syscalls,该函数就返回-ENOSYS。否则执行相应的系统调用。一般情况下,系统调用都需要传递参数,在x86下,通过ebx,ecx,edx,esi和edi传递依次为1到5的参数。
系统调用必须检查它们所有的参数是否合法。(因为这是要在内核态运行的)。Linux系统一般提供两个方法来完成必须的检查和内核空间与用户空间的数据的来回拷贝。copy_to_user()/copy_from_user(),这俩个方法都需要三个参数,(src,dst,length)。
绑定一个自定义的系统调用,如:
asmlinkage long sys_getPID(){return current->tgid}
首先我们需要把sys_getPID加入系统调用表中,见entry.s文件。依次得到系统调用号,把系统调用号加入asm/unistd.h文件中。最后我们要实现这个系统调用,可以把它放进kernel/sys.c或者kernel/sched.c文件中。
分享到:
相关推荐
Linux系统调用的编程技术,添加一个自定义系统调用
linux 系统调用,理解linux 系统调用
1了解Linux系统调用 2仔细分析汇编代码调用系统调用的工作过程,特别是参数的传递方式等。 3总结部分需要阐明自己对“系统调用的工作机制”的理解。 实验条件: 1、装有Linux操作系统的微型计算机; 实验过程 系统...
linux系统调用过程分析,深入分析linux系统调用过程,用例子讲解
常见的linux系统调用流程梳理
linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用linux系统调用
Linux 系统调用快速参考
linux系统调用视频讲解,从linux0.11代码分析讲述,便于理解。
关于 Linux 系统调用的原理和实现
有关系统调用手册的linux内部资料~一些系统调用的内建函数~
Linux系统调用列表.pdf
Linux 系统调用与实例分析 讲解了Linux系统中的系统调用实例
自己动手添加linux系统调用 需要自己下载 linux-3.2.tar.bz2文件,然后按文档运行。
Linux系统调用列表[汇编].pdf
"Linux系统调用分析" Linux系统调用是操作系统核心部分, plays a crucial role in the interaction between the kernel and user-space applications. This article provides an in-depth analysis of the Linux ...
systemf:一个brainfuck解释器支持Linux系统调用
较详细介绍了linux中各种系统调用的用法。值得一看。
Linux系统调用劫持:技术原理、应用及检测.pdf
防止恶意LKM修改Linux系统调用的方法研究 本文研究的主要目的是防止恶意LKM(Loaded Kernel Module)修改Linux系统调用,以确保Linux操作系统的安全。恶意LKM可以修改Linux系统调用,从而改变Linux操作系统的行为。...