Linux Syste m Call Table
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux Syste m Call Table相关的知识,希望对你有一定的参考价值。
Linux System Call Table(2.2)
Note for sys_ipc (117): this syscall takes six arguments, so it can‘t fit into the five registers %ebx - %edi; the last parameter (not shown) is of type ‘long‘. This syscall requires a special call method where a pointer is put in %ebx which points to an array containing the six arguments.
System Call Numbers
For the numbers of the syscalls, look in arch/i386/kernel/entry.S for sys_call_table. The syscall numbers are offsets into that table. Several spots in the table are occupied by the syscallsys_ni_syscall. This is a placeholder that either replaces an obsolete syscall or reserves a spot for future syscalls.
Incidentally, the system calls are called from the function system_call in the same file; in particular, they are called with the assembly instruction ‘call *SYMBOL_NAME(sys_call_table)(,%eax,4)‘. The part ‘*SYMBOL_NAME(sys_call_table)‘ just gets replaced by a symbol name in sys_call_table. SYMBOL_NAME is a macro defined in include/linux/linkage.h, and it just replaces itself with its argument.
Typedefs
Here are the typedef declarations in the prototypes above:
atomic_t | include/asm/atomic.h: #ifdef __SMP__ typedef struct { volatile int counter; } atomic_t; #else typedef struct { int counter; } atomic_t; #endif |
---|---|
caddr_t | include/asm/posix_types.h:typedef char * __kernel_caddr_t; include/linux/types.h:typedef __kernel_caddr_t caddr_t; |
cap_user_header_t | include/linux/capability.h: typedef struct __user_cap_header_struct { __u32 version; int pid; } *cap_user_header_t; |
cap_user_data_t | include/linux/capability.h: typedef struct __user_cap_data_struct { __u32 effective; __u32 permitted; __u32 inheritable; } *cap_user_data_t; |
clock_t | include/asm/posix_types.h:typedef long __kernel_clock_t; include/linux/types.h:typedef __kernel_clock_t clock_t; |
dev_t | include/asm/posix_types.h:typedef unsigned short __kernel_dev_t; include/linux/types.h:typedef __kernel_dev_t dev_t; |
fd_set | include/linux/posix_types.h #define __FD_SETSIZE 1024 #define __NFDBITS (8 * sizeof(unsigned long)) #define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS) (==> __FDSET_LONGS == 32) typedef struct { unsigned long fds_bits [__FDSET_LONGS]; } __kernel_fd_set; include/linux/types.h:typedef __kernel_fd_set fd_set; |
gid_t | include/asm/posix_types.h:typedef unsigned short __kernel_gid_t; include/linux/types.h:typedef __kernel_gid_t gid_t; |
__kernel_daddr_t | include/asm/posix_types.h:typedef int __kernel_daddr_t; |
__kernel_fsid_t | include/asm/posix_types.h: typedef struct { int __val[2]; } __kernel_fsid_t; |
__kernel_ino_t | include/asm/posix_types.h:typedef unsigned long __kernel_ino_t; |
__kernel_size_t | include/asm/posix_types.h:typedef unsigned int __kernel_size_t; |
loff_t | include/asm/posix_types.h:typedef long long __kernel_loff_t; include/linux/types.h:typedef __kernel_loff_t loff_t; |
mode_t | include/asm/posix_types.h:typedef unsigned short __kernel_mode_t; include/linux/types.h:typedef __kernel_mode_t mode_t; |
off_t | include/asm/posix_types.h:typedef long __kernel_off_t; include/linux/types.h:typedef __kernel_off_t off_t; |
old_sigset_t | include/asm/signal.h:typedef unsigned long old_sigset_t; |
pid_t | include/asm/posix_types.h:typedef int __kernel_pid_t; include/linux/types.h:typedef __kernel_pid_t pid_t; |
__sighandler_t | include/asm/signal.h:typedef void (*__sighandler_t)(int); |
siginfo_t | include/asm/siginfo.h: #define SI_MAX_SIZE 128 #define SI_PAD_SIZE ((SI_MAX_SIZE/sizeof(int)) - 3) (==> SI_PAD_SIZE == 29) typedef struct siginfo { int si_signo; int si_errno; int si_code; union { int _pad[SI_PAD_SIZE]; /* kill() */ struct { pid_t _pid; /* sender‘s pid */ uid_t _uid; /* sender‘s uid */ } _kill; /* POSIX.1b timers */ struct { unsigned int _timer1; unsigned int _timer2; } _timer; /* POSIX.1b signals */ struct { pid_t _pid; /* sender‘s pid */ uid_t _uid; /* sender‘s uid */ sigval_t _sigval; } _rt; /* SIGCHLD */ struct { pid_t _pid; /* which child */ uid_t _uid; /* sender‘s uid */ int _status; /* exit code */ clock_t _utime; clock_t _stime; } _sigchld; /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ struct { void *_addr; /* faulting insn/memory ref. */ } _sigfault; /* SIGPOLL */ struct { int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ int _fd; } _sigpoll; } _sifields; } siginfo_t; |
sigset_t | include/asm/signal.h:typedef unsigned long sigset_t; |
size_t | include/asm/posix_types.h:typedef unsigned int __kernel_size_t; include/linux/types.h:typedef __kernel_size_t size_t; |
ssize_t | include/asm/posix_types.h:typedef int __kernel_ssize_t; include/linux/types.h:typedef __kernel_ssize_t ssize_t; |
stack_t | include/asm/signal.h: typedef struct sigaltstack { void *ss_sp; int ss_flags; size_t ss_size; } stack_t; |
suseconds_t | include/asm/posix_types.h:typedef long __kernel_suseconds_t; include/linux/types.h:typedef __kernel_suseconds_t suseconds_t; |
time_t | include/asm/posix_types.h:typedef long __kernel_time_t; include/linux/types.h:typedef __kernel_time_t time_t; |
uid_t | include/asm/posix_types.h:typedef unsigned short __kernel_uid_t; include/linux/types.h:typedef __kernel_uid_t uid_t; |
uint | include/linux/types.h:typedef unsigned int uint; |
__u32 | include/asm/types.h:typedef unsigned int __u32; |
Structs
Here are the struct declarations for the table at the top:
exception_table_entry | include/linux/module.h: struct exception_table_entry { unsigned long insn, fixup; }; |
---|---|
iovec | include/linux/uio.h: struct iovec { void *iov_base; __kernel_size_t iov_len; }; |
itimerval | include/linux/time.h: struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; |
kernel_sym | include/linux/module.h: struct kernel_sym { unsigned long value; char name[60]; }; |
mmap_arg_struct | arch/i386/kernel/sys_i386.c: struct mmap_arg_struct { unsigned long addr; unsigned long len; unsigned long prot; unsigned long flags; unsigned long fd; unsigned long offset; }; |
module | include/linux/module.h: struct module { unsigned long size_of_struct; /* sizeof(module) */ struct module *next; const char *name; unsigned long size; union { atomic_t usecount; long pad; } uc; unsigned long flags; /* AUTOCLEAN et al */ unsigned nsyms; unsigned ndeps; struct module_symbol *syms; struct module_ref *deps; struct module_ref *refs; int (*init)(void); void (*cleanup)(void); const struct exception_table_entry *ex_table_start; const struct exception_table_entry *ex_table_end; /* Members past this point are extensions to the basic module support and are optional. Use mod_opt_member() to examine them. */ const struct module_persist *persist_start; const struct module_persist *persist_end; int (*can_unload)(void); }; |
module_persist | include/linux/module.h: struct module_persist; /* yes, it‘s empty */ |
module_ref | include/linux/module.h: struct module_ref { struct module *dep; /* "parent" pointer */ struct module *ref; /* "child" pointer */ struct module_ref *next_ref; }; |
module_symbol | include/linux/module.h: struct module_symbol { unsigned long value; const char *name; }; |
new_utsname | include/linux/utsname.h: struct new_utsname { char sysname[65]; char nodename[65]; char release[65]; char version[65]; char machine[65]; char domainname[65]; }; |
__old_kernel_stat | include/asm/stat.h: struct __old_kernel_stat { unsigned short st_dev; unsigned short st_ino; unsigned short st_mode; unsigned short st_nlink; unsigned short st_uid; unsigned short st_gid; unsigned short st_rdev; unsigned long st_size; unsigned long st_atime; unsigned long st_mtime; unsigned long st_ctime; }; |
oldold_utsname | include/linux/utsname.h: struct oldold_utsname { char sysname[9]; char nodename[9]; char release[9]; char version[9]; char machine[9]; }; |
old_sigaction | include/asm/signal.h: struct old_sigaction { __sighandler_t sa_handler; old_sigset_t sa_mask; unsigned long sa_flags; void (*sa_restorer)(void); }; |
old_utsname | include/linux/utsname.h: struct old_utsname { char sysname[65]; char nodename[65]; char release[65]; char version[65]; char machine[65]; }; |
pollfd | include/asm/poll.h: struct pollfd { int fd; short events; short revents; }; |
pt_regs | include/asm/ptrace.h: struct pt_regs { long ebx; long ecx; long edx; long esi; long edi; long ebp; long eax; int xds; int xes; long orig_eax; long eip; int xcs; long eflags; long esp; int xss; }; |
revectored_struct | include/asm/vm86.h: struct revectored_struct { unsigned long __map[8]; }; |
rlimit | include/linux/resource.h: struct rlimit { long rlim_cur; long rlim_max; }; |
rusage | include/linux/resource.h: struct rusage { struct timeval ru_utime; /* user time used */ struct timeval ru_stime; /* system time used */ long ru_maxrss; /* maximum resident set size */ long ru_ixrss; /* integral shared memory size */ long ru_idrss; /* integral unshared data size */ long ru_isrss; /* integral unshared stack size */ long ru_minflt; /* page reclaims */ long ru_majflt; /* page faults */ long ru_nswap; /* swaps */ long ru_inblock; /* block input operations */ long ru_oublock; /* block output operations */ long ru_msgsnd; /* messages sent */ long ru_msgrcv; /* messages received */ long ru_nsignals; /* signals received */ long ru_nvcsw; /* voluntary context switches */ long ru_nivcsw; /* involuntary ‘‘ */ }; |
sched_param | include/linux/sched.h: struct sched_param { int sched_priority; }; |
sel_arg_struct | arch/i386/kernel/sys_i386.c: struct sel_arg_struct { unsigned long n; fd_set *inp, *outp, *exp; struct timeval *tvp; }; |
sigaction | include/asm/signal.h: struct sigaction { __sighandler_t sa_handler; unsigned long sa_flags; void (*sa_restorer)(void); sigset_t sa_mask; /* mask last for extensibility */ }; |
stat | include/asm/stat.h: struct stat { unsigned short st_dev; unsigned short __pad1; unsigned long st_ino; unsigned short st_mode; unsigned short st_nlink; unsigned short st_uid; unsigned short st_gid; unsigned short st_rdev; unsigned short __pad2; unsigned long st_size; unsigned long st_blksize; unsigned long st_blocks; unsigned long st_atime; unsigned long __unused1; unsigned long st_mtime; unsigned long __unused2; unsigned long st_ctime; unsigned long __unused3; unsigned long __unused4; unsigned long __unused5; |
statfs | include/asm/statfs.h: struct statfs { long f_type; long f_bsize; long f_blocks; long f_bfree; long f_bavail; long f_files; long f_ffree; __kernel_fsid_t f_fsid; long f_namelen; long f_spare[6]; }; |
__sysctl_args | include/linux/sysctl.h struct __sysctl_args { int *name; int nlen; void *oldval; size_t *oldlenp; void *newval; size_t newlen; unsigned long __unused[4]; }; |
sysinfo | include/linux/kernel.h: struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ char _f[22]; /* Pads structure to 64 bytes */ }; |
timex | include/linux/timex.h: struct timex { unsigned int modes; /* mode selector */ long offset; /* time offset (usec) */ long freq; /* frequency offset (scaled ppm) */ long maxerror; /* maximum error (usec) */ long esterror; /* estimated error (usec) */ int status; /* clock command/status */ long constant; /* pll time constant */ long precision; /* clock precision (usec) (read only) */ long tolerance; /* clock frequency tolerance (ppm) * (read only) */ struct timeval time; /* (read only) */ long tick; /* (modified) usecs between clock ticks */ long ppsfreq; /* pps frequency (scaled ppm) (ro) */ long jitter; /* pps jitter (us) (ro) */ int shift; /* interval duration (s) (shift) (ro) */ long stabil; /* pps stability (scaled ppm) (ro) */ long jitcnt; /* jitter limit exceeded (ro) */ long calcnt; /* calibration intervals (ro) */ long errcnt; /* calibration errors (ro) */ long stbcnt; /* stability limit exceeded (ro) */ int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; }; |
timespec | include/linux/time.h: struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ }; |
timeval | include/linux/time.h: struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; |
timezone | include/linux/time.h: struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of dst correction */ }; |
tms | include/linux/times.h struct tms { clock_t tms_utime; clock_t tms_stime; clock_t tms_cutime; clock_t tms_cstime; }; |
ustat | include/linux/types.h: struct ustat { __kernel_daddr_t f_tfree; __kernel_ino_t f_tinode; char f_fname[6]; char f_fpack[6]; }; |
utimbuf | include/linux/utime.h: struct utimbuf { time_t actime; time_t modtime; }; |
vm86plus_info_struct | include/asm/vm86.h: struct vm86plus_info_struct { unsigned long force_return_for_pic:1; unsigned long vm86dbg_active:1; unsigned long vm86dbg_TFpendig:1; unsigned long unused:28; unsigned long is_vm86pus:1; unsigned char vm86dbg_intxxtab[32]; }; |
vm86plus_struct | include/asm/vm86.h: struct vm86plus_struct { struct vm86_regs regs; unsigned long flags; unsigned long screen_bitmap; unsigned long cpu_type; struct revectored_struct int_revectored; struct revectored_struct int21_revectored; struct vm86plus_info_struct vm86plus; }; |
vm86_regs | include/asm/vm86.h: struct vm86_regs { /* normal regs, with special meaning for the segment descriptors.. */ long ebx; long ecx; long edx; long esi; long edi; long ebp; long eax; long __null_ds; long __null_es; long __null_fs; long __null_gs; long orig_eax; long eip; unsigned short cs, __csh; long eflags; long esp; unsigned short ss, __ssh; /* these are specific to v86 mode: */ unsigned short es, __esh; unsigned short ds, __dsh; unsigned short fs, __fsh; unsigned short gs, __gsh; }; |
vm86_struct | include/asm/vm86.h: struct vm86_struct { struct vm86_regs regs; unsigned long flags; unsigned long screen_bitmap; unsigned long cpu_type; struct revectored_struct int_revectored; struct revectored_struct int21_revectored; }; |
以上是关于Linux Syste m Call Table的主要内容,如果未能解决你的问题,请参考以下文章
php在linux下call to undefined function imagettftext()
python @ http://alvinalexander.com/python/python-feedparser-script-linux-screensaver-time-exec-syste
启动Sonar报错,ERROR: [1] bootstrap checks failed [1]: system call filters failed to install