1. 说明
系统调用(System Call)是操作系统为在用户态运行的进程与硬件设备(如CPU、磁盘、打印机等)进行交互提供的一组接口。当用户进程需要发生系统调用时,CPU 通过软中断陷入内核执行中断处理函数。
2. 内嵌汇编
下面以获取系统当前时间为例,探讨系统调用方式。
1. glibc调用
int tt = time(NULL);
2. syscall调用
linux-2.6.32/arch/x86/kernel/syscall_table_32.S v2.6.32系统调用表
linux-3.18.6/arch/x86/kernel/syscall_table_32.S v3.18.6系统调用表
linux-3.5/arch/x86/syscalls/syscall_32.tbl v3.5系统调用表
通过查看 syscall_table_32.S 中断调用表文件得到sys_time中断调用号为13.
int tt = syscall(13);
3. 内嵌汇编
int tt = 0; asm("mov $0,%%ebx\n\t" "mov $13,%%eax\n\t" "int $0x80\n\t" "mov %%eax,%0\n\t" :"=m"(tt) ); printf( "time:%d\n", tt );
eax=13 传入系统调用号
ebx=0传入系统函数,相当于time(NULL)。如果有多个传入参数,可使用ebx,
ecx,edx,esi,edi,ebp 寄存器
eax 接收函数返回值,传出至tt
int $0x80 中断陷入,windows下采用0x2E作为系统调用入口
3. 扩展系统调用
glibc 中time()调用过程:用户态调用 time(),中断陷入内核态,调用内核函数 sys_time()。
可通过下列四步实现自定义系统调用:
linux-2.6.32/kernel/sys.c
sys_xxx(),实现系统调用
linux-2.6.32/arch/x86/include/asm/unistd.h
_NR_xxx,添加中断号宏定义
linux-2.6.32/arch/x86/kernel/syscall_table_32.S
.long sys_xx,添加中断汇编定义
linux-2.6.32/include/linux/syscalls.h
asmlinkage,导出该函数
参考资料:
《程序员的自我修养》
相关推荐
Linux系统调用是操作系统提供的一种核心服务方式,允许用户态的程序安全地访问操作系统功能。在Linux中,系统调用是通过软中断机制实现的,通常由特定的汇编指令如`int`触发。系统调用接口是API(应用程序编程接口)...
Linux系统调用概述 Linux系统调用是用户空间访问内核的唯一手段,它们是内核唯一的合法入口。通知内核的机制是通过软中断的机制实现的:通过引发一个异常来促使系统切换到内核态去执行异常处理程序。此时的异常处理...
【Linux系统调用手册】是理解操作系统内核与应用程序交互的关键文档,它包含了所有可以直接从用户空间调用的内核服务。系统调用是操作系统提供给用户态程序访问内核功能的接口,允许用户程序执行如创建进程、读写...
### Linux系统调用过程分析 #### 一、系统调用的基本概念 1. **系统调用的定义** 在操作系统(OS)的核心中,都设置有一组用于实现各种系统功能的子程序,并将它们提供给用户程序调用。每当用户在程序中需要OS提供...
Linux系统调用是操作系统提供的一种服务机制,允许用户态的程序安全地访问内核功能。在实验五“Linux系统调用的编程技术”中,主要目标是理解和掌握系统调用的工作原理,包括如何通过API调用系统服务以及参数传递的...
Linux系统调用是操作系统提供的一种机制,允许用户空间的程序请求内核提供服务。这些服务包括进程管理、文件系统操作、网络通信等。Linux系统调用通过一系列预定义的接口与操作系统交互,以实现对硬件资源的管理和...
### Linux系统调用权威指南 #### 一、引言 《Linux系统调用权威指南》是一篇详尽介绍Linux系统调用机制的文章。系统调用是操作系统中最核心的部分之一,它是用户空间应用程序与内核之间通信的主要接口。通过系统...
**Python-systemf:一个Brainfuck解释器支持Linux系统调用** 在编程世界中,Brainfuck是一种极简主义的编程语言,旨在挑战程序员的创新思维,而不是用于实际开发。它的语法非常简单,只有8个基本操作符,但在实现...
"Linux系统调用跟我学.pdf"这份资料可能详细介绍了学习Linux系统调用的步骤和方法。它可能包含系统调用的原理讲解,如如何设置参数、如何发起调用,以及系统调用返回后的处理。同时,可能会通过实例解析,帮助读者...
Linux系统调用劫持是一种黑客技术,用于在操作系统内核层面植入后门,以保持对系统的非法访问。这种技术常被用于制作rootkit,rootkit是攻击者用来隐藏其活动和保留管理员权限的工具集合。在Linux环境中,尤其是基于...
本集合涵盖了16篇关于常用Linux系统调用函数的文章,旨在深入理解和熟练运用这些功能。 1. **进程管理**:在Linux中,`fork()`函数用于创建新进程,`exec()`系列(如`execl()`, `execlp()`, `execle()`, `execv()`,...
Linux系统调用列表.pdf
在Linux操作系统中,系统调用是用户空间程序与内核进行交互的重要机制。它们提供了标准接口,使得应用程序能够请求操作系统执行各种低级别的任务,如创建进程、读写文件、网络通信等。本视频讲解将深入剖析Linux ...
Linux 系统调用 - 返回当前系统时间 Linux 系统调用是操作系统中最基本的接口之一,它允许用户空间应用程序和内核之间进行交互。系统调用是用户空间应用程序和内核提供的服务之间的一个接口。由于服务是在内核中...
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 ...
Linux系统调用 Linux系统调用是指用户程序和操作系统之间的接口,用户程序可以通过系统调用来请求操作系统提供的服务。系统调用是用户程序和硬件设备之间的桥梁,使得用户程序可以请求操作系统提供的服务,而不需要...