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 系统调用,理解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系统调用相关资料,是3个资料的合集。 Linux系统调用跟我学.pdf Linux系统调用列表.doc Linux 系统函数调用大全(pdf)
systemf:一个brainfuck解释器支持Linux系统调用
较详细介绍了linux中各种系统调用的用法。值得一看。
Linux系统调用劫持:技术原理、应用及检测.pdf
Linux系统调用的实现.ppt Linux系统调用的实现.ppt Linux系统调用的实现.ppt
做实验时用到的资料,关于系统调用。希望对正在学习这个课程的人有帮助