Linux常用系统调用
系统调用参数传递以及返回值
系统调用输入参数:
在C样式的函数调用中,输入参数被存放堆栈中,但是系统调用与函数调用不同,需要的参数被存放在寄存器中。
系统调用参数顺序:
- EAX:系统调用值,也做系统调用返回值
- EBX:第1个参数
- ECX:第2个参数
- EDX:第3个参数
- ESI:第4个参数
- EDI:第5个参数
超过6个输入参数的系统调用:
EBX寄存器用于保存指向输入参数的内存位置的指针,输入参数按照连续的顺序存储
简单系统调用返回值:
EAX寄存器保存系统调用返回值
复杂的系统调用返回值:
必须在一个内存位置创建数据结构,并把该结构的地址以系统参数传递给系统调用。
内存访问内核系统调用
系统调用 | 描述 |
---|---|
brk | 改变数据段长度 |
mlock | 禁止对内存部分进行分页 |
mlockall | 禁止对调用进程进行分页 |
mmap | 把文件或者设备映射到内存中 |
mprotect | 控制对内存区域的许可访问 |
mremap | 重新映射虚拟内存地址 |
msync | 同步文件和内存映射 |
munlock | 允许对内存部分进行分页 |
munlockall | 允许对调用进程进行分页 |
munmap | 取消文件或者设备在内存中的映射 |
设备访问内核系统调用
系统调用 | 描述 |
---|---|
access | 检查设备的权限 |
chmod | 改变设备的权限 |
shown | 改变设备的所有关系 |
close | 关闭设备文件描述符 |
dup | 复制设备文件描述符 |
fcntl | 操作文件描述符 |
fstat | 获得设备的状态 |
ioctl | 控制设备的参数 |
link | 把新的名称分配给文件描述符 |
lseek | 重新定位读取/写入文件偏移量 |
mknod | 为设备创建新的文件描述符 |
open | 为设备或者文件打开/创建文件描述符 |
read | 读取设备文件描述符 |
write | 写入设备文件描述符 |
文件系统系统调用
系统调用 | 描述 |
---|---|
chdir | 改变工作目录 |
chroot | 改变根目录 |
flock | 在打开的文件上应用或者删除建议锁 |
statfs | 获得文件系统的统计数据 |
getcwd | 获得当前工作目录 |
mkdir | 创建目录 |
rmdir | 删除目录 |
symlink | 生成文件的新名称 |
umask | 设置文件创建掩码 |
mount | 挂载文件系统 |
unmount | 卸载文件系统 |
swapon | 开始内存和文件系统的交换 |
swapoff | 停止内存和文件系统的交换 |
进程系统调用
系统调用 | 描述 |
---|---|
acct | 打开或者关闭进程计数 |
capget | 获得进程功能 |
capset | 设置进程功能 |
clone | 创建子进程 |
execve | 执行程序 |
exit | 终止当前进程 |
fork | 创建子进程 |
getgid | 获得组标识 |
getpgrp / setpgrp | 获得/设置进程组 |
getppid | 获取进程标识 |
getpriority | 获得程序调度优先权 |
getuid | 获取用户标识 |
kill | 发送信号 |
nice | 改变进程优先级 |
vfork | 创建子进程并且阻塞父进程 |