linux系统调用

linux系统中,C库由GNU libc提供,简称glic。glibc库中除了包括C标准库外,还提供了系统调用封装。

https://www.zhihu.com/question/46763480

x86上系统调用对应的软中断号是128,发生系统调用时,通过int &0x80指令触发该中断,执行系统调用处理程序,即system_call()函数。最终根据系统调用号,调用系统调用表sys_call_table中的某一个函数。

linux-4.1.45\arch\x86\kernel\syscall_64.c
/* System call table for x86-64. */

extern void sys_ni_syscall(void);

asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
	/*
	 * Smells like a compiler bug -- it doesn't work
	 * when the & below is removed.
	 */
	[0 ... __NR_syscall_max] = &sys_ni_syscall,
#include <asm/syscalls_64.h>
};

system_call()函数在x86上是用汇编实现的,在linux-4.1.45\arch\x86\kernel\entry_64.S文件中。

每个系统调用对应一个系统调用号,内核中系统调用表为:

linux-4.1.45\arch\x86\syscalls\syscall_64.tbl
#
# 64-bit system call numbers and entry vectors
#
# The format is:
# <number> <abi> <name> <entry point>
#
# The abi is "common", "64" or "x32" for this file.
#
0	common	read			sys_read
1	common	write			sys_write
2	common	open			sys_open
3	common	close			sys_close
4	common	stat			sys_newstat
5	common	fstat			sys_newfstat
6	common	lstat			sys_newlstat
7	common	poll			sys_poll
8	common	lseek			sys_lseek
9	common	mmap			sys_mmap
10	common	mprotect		sys_mprotect
11	common	munmap			sys_munmap
12	common	brk			sys_brk
13	64	rt_sigaction		sys_rt_sigaction
14	common	rt_sigprocmask		sys_rt_sigprocmask
15	64	rt_sigreturn		stub_rt_sigreturn
16	64	ioctl			sys_ioctl
17	common	pread64			sys_pread64
18	common	pwrite64		sys_pwrite64
19	64	readv			sys_readv
20	64	writev			sys_writev
21	common	access			sys_access
22	common	pipe			sys_pipe
23	common	select			sys_select
24	common	sched_yield		sys_sched_yield
25	common	mremap			sys_mremap
26	common	msync			sys_msync
27	common	mincore			sys_mincore
28	common	madvise			sys_madvise
29	common	shmget			sys_shmget
30	common	shmat			sys_shmat
31	common	shmctl			sys_shmctl
32	common	dup			sys_dup
33	common	dup2			sys_dup2
34	common	pause			sys_pause
35	common	nanosleep		sys_nanosleep
36	common	getitimer		sys_getitimer
37	common	alarm			sys_alarm
38	common	setitimer		sys_setitimer
39	common	getpid			sys_getpid
40	common	sendfile		sys_sendfile64
41	common	socket			sys_socket
42	common	connect			sys_connect
43	common	accept			sys_accept
44	common	sendto			sys_sendto
45	64	recvfrom		sys_recvfrom
46	64	sendmsg			sys_sendmsg
47	64	recvmsg			sys_recvmsg
48	common	shutdown		sys_shutdown
49	common	bind			sys_bind
50	common	listen			sys_listen
51	common	getsockname		sys_getsockname
52	common	getpeername		sys_getpeername
53	common	socketpair		sys_socketpair
54	64	setsockopt		sys_setsockopt
55	64	getsockopt		sys_getsockopt
56	common	clone			stub_clone
57	common	fork			stub_fork
58	common	vfork			stub_vfork
59	64	execve			stub_execve
60	common	exit			sys_exit
61	common	wait4			sys_wait4
62	common	kill			sys_kill
63	common	uname			sys_newunam
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值