Linux系统调用 int 80h int 0x80

在网上找了好一会儿才找到,自己整理一下,也方便以后查看。

参考网址:

http://zh.wikipedia.org/wiki/%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8

http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

1.系统调用

在计算机中,系统调用(英语:system call),又称为系统呼叫,指运行在使用者空间的程序向操作系统内核请求需要更高权限运行的服务。 系统调用提供了用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态执行。如设备IO操作或者进程间通信。

Linux的系统调用通过int 80h实现,用系统调用号来区分入口函数。 操作系统实现系统调用的基本过程是:
      应用程序调用库函数(API);
      API将系统调用号存入EAX,然后通过中断调用使系统进入内核态;
      内核中的中断处理函数根据系统调用号,调用对应的内核函数(系统调用);
     系统调用完成相应功能,将返回值存入EAX,返回到中断处理函数;
     中断处理函数返回到API中;
     API将EAX返回给应用程序。

2.系统调用表(表格我整理成了excel下载,基于linux2.2的,不过应该都差不多)

寄存器eax存放调用号,剩下的几个寄存器存放参数。

以sys_write为例说明:

函数原型:

sys_write(unsigned int fd, const char * buf, size_t count)

下面是对于Linux汇编Helloworld的一些注释,可以对应系统调用表来看

[section .data]
strHello db "Hello, world!",0Ah
STRLEN equ $ - strHello
[section .text]
global _start
_start:
mov edx,STRLEN;对应参数count
mov ecx,strHello;对应参数buf
mov ebx,1;对应参数fd,fd = 1,在linux中对应于stdout,指的是显示屏
mov eax,4;系统调用号为4,sys_write
int 0x80
mov ebx,0;参数为0,exit(0)
mov eax,1;系统调用号为1,sys_exit

int 0x80

%eax

Name

Source

%ebx

%ecx

%edx

%esx

%edi

1

sys_exit

kernel/exit.c

int

-

-

-

-

2

sys_fork

arch/i386/kernel/process.c

struct pt_regs

-

-

-

-

3

sys_read

fs/read_write.c

unsigned int

char *

size_t

-

-

4

sys_write

fs/read_write.c

unsigned int

const char *

size_t

-

-

5

sys_open

fs/open.c

const char *

int

int

-

-

6

sys_close

fs/open.c

unsigned int

-

-

-

-

7

sys_waitpid

kernel/exit.c

pid_t

unsigned int *

int

-

-

8

sys_creat

fs/open.c

const char *

int

-

-

-

9

sys_link

fs/namei.c

const char *

const char *

-

-

-

10

sys_unlink

fs/namei.c

const char *

-

-

-

-

11

sys_execve

arch/i386/kernel/process.c

struct pt_regs

-

-

-

-

12

sys_chdir

fs/open.c

const char *

-

-

-

-

13

sys_time

kernel/time.c

int *

-

-

-

-

14

sys_mknod

fs/namei.c

const char *

int

dev_t

-

-

15

sys_chmod

fs/open.c

const char *

mode_t

-

-

-

16

sys_lchown

fs/open.c

const char *

uid_t

gid_t

-

-

18

sys_stat

fs/stat.c

char *

struct __old_kernel_stat *

-

-

-

19

sys_lseek

fs/read_write.c

unsigned int

off_t

unsigned int

-

-

20

sys_getpid

kernel/sched.c

-

-

-

-

-

21

sys_mount

fs/super.c

char *

char *

char *

-

-

22

sys_oldumount

fs/super.c

char *

-

-

-

-

23

sys_setuid

kernel/sys.c

uid_t

-

-

-

-

24

sys_getuid

kernel/sched.c

-

-

-

-

-

25

sys_stime

kernel/time.c

int *

-

-

-

-

26

sys_ptrace

arch/i386/kernel/ptrace.c

long

long

long

long

-

27

sys_alarm

kernel/sched.c

unsigned int

-

-

-

-

28

sys_fstat

fs/stat.c

unsigned int

struct __old_kernel_stat *

-

-

-

29

sys_pause

arch/i386/kernel/sys_i386.c

-

-

-

-

-

30

sys_utime

fs/open.c

char *

struct utimbuf *

-

-

-

33

sys_access

fs/open.c

const char *

int

-

-

-

34

sys_nice

kernel/sched.c

int

-

-

-

-

36

sys_sync

fs/buffer.c

-

-

-

-

-

37

sys_kill

kernel/signal.c

int

int

-

-

-

38

sys_rename

fs/namei.c

const char *

const char *

-

-

-

39

sys_mkdir

fs/namei.c

const char *

int

-

-

-

40

sys_rmdir

fs/namei.c

const char *

-

-

-

-

41

sys_dup

fs/fcntl.c

unsigned int

-

-

-

-

42

sys_pipe

arch/i386/kernel/sys_i386.c

unsigned long *

-

-

-

-

43

sys_times

kernel/sys.c

struct tms *

-

-

-

-

45

sys_brk

mm/mmap.c

unsigned long

-

-

-

-

46

sys_setgid

kernel/sys.c

gid_t

-

-

-

-

47

sys_getgid

kernel/sched.c

-

-

-

-

-

48

sys_signal

kernel/signal.c

int

__sighandler_t

-

-

-

49

sys_geteuid

kernel/sched.c

-

-

-

-

-

50

sys_getegid

kernel/sched.c

-

-

-

-

-

51

sys_acct

kernel/acct.c

const char *

-

-

-

-

52

sys_umount

fs/super.c

char *

int

-

-

-

54

sys_ioctl

fs/ioctl.c

unsigned int

unsigned int

unsigned long

-

-

55

sys_fcntl

fs/fcntl.c

unsigned int

unsigned int

unsigned long

-

-

57

sys_setpgid

kernel/sys.c

pid_t

pid_t

-

-

-

59

sys_olduname

arch/i386/kernel/sys_i386.c

struct oldold_utsname *

-

-

-

-

60

sys_umask

kernel/sys.c

int

-

-

-

-

61

sys_chroot

fs/open.c

const char *

-

-

-

-

62

sys_ustat

fs/super.c

dev_t

struct ustat *

-

-

-

63

sys_dup2

fs/fcntl.c

unsigned int

unsigned int

-

-

-

64

sys_getppid

kernel/sched.c

-

-

-

-

-

65

sys_getpgrp

kernel/sys.c

-

-

-

-

-

66

sys_setsid

kernel/sys.c

-

-

-

-

-

67

sys_sigaction

arch/i386/kernel/signal.c

int

const struct old_sigaction *

struct old_sigaction *

-

-

68

sys_sgetmask

kernel/signal.c

-

-

-

-

-

69

sys_ssetmask

kernel/signal.c

int

-

-

-

-

70

sys_setreuid

kernel/sys.c

uid_t

uid_t

-

-

-

71

sys_setregid

kernel/sys.c

gid_t

gid_t

-

-

-

72

sys_sigsuspend

arch/i386/kernel/signal.c

int

int

old_sigset_t

-

-

73

sys_sigpending

kernel/signal.c

old_sigset_t *

-

-

-

-

74

sys_sethostname

kernel/sys.c

char *

int

-

-

-

75

sys_setrlimit

kernel/sys.c

unsigned int

struct rlimit *

-

-

-

76

sys_getrlimit

kernel/sys.c

unsigned int

struct rlimit *

-

-

-

77

sys_getrusage

kernel/sys.c

int

struct rusage *

-

-

-

78

sys_gettimeofday

kernel/time.c

struct timeval *

struct timezone *

-

-

-

79

sys_settimeofday

kernel/time.c

struct timeval *

struct timezone *

-

-

-

80

sys_getgroups

kernel/sys.c

int

gid_t *

-

-

-

81

sys_setgroups

kernel/sys.c

int

gid_t *

-

-

-

82

old_select

arch/i386/kernel/sys_i386.c

struct sel_arg_struct *

-

-

-

-

83

sys_symlink

fs/namei.c

const char *

const char *

-

-

-

84

sys_lstat

fs/stat.c

char *

struct __old_kernel_stat *

-

-

-

85

sys_readlink

fs/stat.c

const char *

char *

int

-

-

86

sys_uselib

fs/exec.c

const char *

-

-

-

-

87

sys_swapon

mm/swapfile.c

const char *

int

-

-

-

88

sys_reboot

kernel/sys.c

int

int

int

void *

-

89

old_readdir

fs/readdir.c

unsigned int

void *

unsigned int

-

-

90

old_mmap

arch/i386/kernel/sys_i386.c

struct mmap_arg_struct *

-

-

-

-

91

sys_munmap

mm/mmap.c

unsigned long

size_t

-

-

-

92

sys_truncate

fs/open.c

const char *

unsigned long

-

-

-

93

sys_ftruncate

fs/open.c

unsigned int

unsigned long

-

-

-

94

sys_fchmod

fs/open.c

unsigned int

mode_t

-

-

-

95

sys_fchown

fs/open.c

unsigned int

uid_t

gid_t

-

-

96

sys_getpriority

kernel/sys.c

int

int

-

-

-

97

sys_setpriority

kernel/sys.c

int

int

int

-

-

99

sys_statfs

fs/open.c

const char *

struct statfs *

-

-

-

100

sys_fstatfs

fs/open.c

unsigned int

struct statfs *

-

-

-

101

sys_ioperm

arch/i386/kernel/ioport.c

unsigned long

unsigned long

int

-

-

102

sys_socketcall

net/socket.c

int

unsigned long *

-

-

-

103

sys_syslog

kernel/printk.c

int

char *

int

-

-

104

sys_setitimer

kernel/itimer.c

int

struct itimerval *

struct itimerval *

-

-

105

sys_getitimer

kernel/itimer.c

int

struct itimerval *

-

-

-

106

sys_newstat

fs/stat.c

char *

struct stat *

-

-

-

107

sys_newlstat

fs/stat.c

char *

struct stat *

-

-

-

108

sys_newfstat

fs/stat.c

unsigned int

struct stat *

-

-

-

109

sys_uname

arch/i386/kernel/sys_i386.c

struct old_utsname *

-

-

-

-

110

sys_iopl

arch/i386/kernel/ioport.c

unsigned long

-

-

-

-

111

sys_vhangup

fs/open.c

-

-

-

-

-

112

sys_idle

arch/i386/kernel/process.c

-

-

-

-

-

113

sys_vm86old

arch/i386/kernel/vm86.c

unsigned long

struct vm86plus_struct *

-

-

-

114

sys_wait4

kernel/exit.c

pid_t

unsigned long *

int options

struct rusage *

-

115

sys_swapoff

mm/swapfile.c

const char *

-

-

-

-

116

sys_sysinfo

kernel/info.c

struct sysinfo *

-

-

-

-

117

sys_ipc (*Note)

arch/i386/kernel/sys_i386.c

uint

int

int

int

void *

118

sys_fsync

fs/buffer.c

unsigned int

-

-

-

-

119

sys_sigreturn

arch/i386/kernel/signal.c

unsigned long

-

-

-

-

120

sys_clone

arch/i386/kernel/process.c

struct pt_regs

-

-

-

-

121

sys_setdomainname

kernel/sys.c

char *

int

-

-

-

122

sys_newuname

kernel/sys.c

struct new_utsname *

-

-

-

-

123

sys_modify_ldt

arch/i386/kernel/ldt.c

int

void *

unsigned long

-

-

124

sys_adjtimex

kernel/time.c

struct timex *

-

-

-

-

125

sys_mprotect

mm/mprotect.c

unsigned long

size_t

unsigned long

-

-

126

sys_sigprocmask

kernel/signal.c

int

old_sigset_t *

old_sigset_t *

-

-

127

sys_create_module

kernel/module.c

const char *

size_t

-

-

-

128

sys_init_module

kernel/module.c

const char *

struct module *

-

-

-

129

sys_delete_module

kernel/module.c

const char *

-

-

-

-

130

sys_get_kernel_syms

kernel/module.c

struct kernel_sym *

-

-

-

-

131

sys_quotactl

fs/dquot.c

int

const char *

int

caddr_t

-

132

sys_getpgid

kernel/sys.c

pid_t

-

-

-

-

133

sys_fchdir

fs/open.c

unsigned int

-

-

-

-

134

sys_bdflush

fs/buffer.c

int

long

-

-

-

135

sys_sysfs

fs/super.c

int

unsigned long

unsigned long

-

-

136

sys_personality

kernel/exec_domain.c

unsigned long

-

-

-

-

138

sys_setfsuid

kernel/sys.c

uid_t

-

-

-

-

139

sys_setfsgid

kernel/sys.c

gid_t

-

-

-

-

140

sys_llseek

fs/read_write.c

unsigned int

unsigned long

unsigned long

loff_t *

unsigned int

141

sys_getdents

fs/readdir.c

unsigned int

void *

unsigned int

-

-

142

sys_select

fs/select.c

int

fd_set *

fd_set *

fd_set *

struct timeval *

143

sys_flock

fs/locks.c

unsigned int

unsigned int

-

-

-

144

sys_msync

mm/filemap.c

unsigned long

size_t

int

-

-

145

sys_readv

fs/read_write.c

unsigned long

const struct iovec *

unsigned long

-

-

146

sys_writev

fs/read_write.c

unsigned long

const struct iovec *

unsigned long

-

-

147

sys_getsid

kernel/sys.c

pid_t

-

-

-

-

148

sys_fdatasync

fs/buffer.c

unsigned int

-

-

-

-

149

sys_sysctl

kernel/sysctl.c

struct __sysctl_args *

-

-

-

-

150

sys_mlock

mm/mlock.c

unsigned long

size_t

-

-

-

151

sys_munlock

mm/mlock.c

unsigned long

size_t

-

-

-

152

sys_mlockall

mm/mlock.c

int

-

-

-

-

153

sys_munlockall

mm/mlock.c

-

-

-

-

-

154

sys_sched_setparam

kernel/sched.c

pid_t

struct sched_param *

-

-

-

155

sys_sched_getparam

kernel/sched.c

pid_t

struct sched_param *

-

-

-

156

sys_sched_setscheduler

kernel/sched.c

pid_t

int

struct sched_param *

-

-

157

sys_sched_getscheduler

kernel/sched.c

pid_t

-

-

-

-

158

sys_sched_yield

kernel/sched.c

-

-

-

-

-

159

sys_sched_get_priority_max

kernel/sched.c

int

-

-

-

-

160

sys_sched_get_priority_min

kernel/sched.c

int

-

-

-

-

161

sys_sched_rr_get_interval

kernel/sched.c

pid_t

struct timespec *

-

-

-

162

sys_nanosleep

kernel/sched.c

struct timespec *

struct timespec *

-

-

-

163

sys_mremap

mm/mremap.c

unsigned long

unsigned long

unsigned long

unsigned long

-

164

sys_setresuid

kernel/sys.c

uid_t

uid_t

uid_t

-

-

165

sys_getresuid

kernel/sys.c

uid_t *

uid_t *

uid_t *

-

-

166

sys_vm86

arch/i386/kernel/vm86.c

struct vm86_struct *

-

-

-

-

167

sys_query_module

kernel/module.c

const char *

int

char *

size_t

size_t *

168

sys_poll

fs/select.c

struct pollfd *

unsigned int

long

-

-

169

sys_nfsservctl

fs/filesystems.c

int

void *

void *

-

-

170

sys_setresgid

kernel/sys.c

gid_t

gid_t

gid_t

-

-

171

sys_getresgid

kernel/sys.c

gid_t *

gid_t *

gid_t *

-

-

172

sys_prctl

kernel/sys.c

int

unsigned long

unsigned long

unsigned long

unsigned long

173

sys_rt_sigreturn

arch/i386/kernel/signal.c

unsigned long

-

-

-

-

174

sys_rt_sigaction

kernel/signal.c

int

const struct sigaction *

struct sigaction *

size_t

-

175

sys_rt_sigprocmask

kernel/signal.c

int

sigset_t *

sigset_t *

size_t

-

176

sys_rt_sigpending

kernel/signal.c

sigset_t *

size_t

-

-

-

177

sys_rt_sigtimedwait

kernel/signal.c

const sigset_t *

siginfo_t *

const struct timespec *

size_t

-

178

sys_rt_sigqueueinfo

kernel/signal.c

int

int

siginfo_t *

-

-

179

sys_rt_sigsuspend

arch/i386/kernel/signal.c

sigset_t *

size_t

-

-

-

180

sys_pread

fs/read_write.c

unsigned int

char *

size_t

loff_t

-

181

sys_pwrite

fs/read_write.c

unsigned int

const char *

size_t

loff_t

-

182

sys_chown

fs/open.c

const char *

uid_t

gid_t

-

-

183

sys_getcwd

fs/dcache.c

char *

unsigned long

-

-

-

184

sys_capget

kernel/capability.c

cap_user_header_t

cap_user_data_t

-

-

-

185

sys_capset

kernel/capability.c

cap_user_header_t

const cap_user_data_t

-

-

-

186

sys_sigaltstack

arch/i386/kernel/signal.c

const stack_t *

stack_t *

-

-

-

187

sys_sendfile

mm/filemap.c

int

int

off_t *

size_t

-

190

sys_vfork

arch/i386/kernel/process.c

struct pt_regs

-

-

-

-

 



你可能感兴趣的:(自己动手写操作系统之旅)