ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시스템 호출(System Call)
    Basic knowledge/시스템(Pwn) 2018. 11. 26. 16:51

    시스템 호출 이란?


    - 시스템 호출은 대부분 시스템 콜이라고 자주 쓰임

    - 시스템 콜은 응용프로그램에서 운영체제에게 어떠한 기능을 수행해 달라고 하는 하나의 수단

    - 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근 하기 위한 인터페이스



    시스템 호출의 기능


    1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.

    2. 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다,

    3. 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.



    시스템 호출의 유형


    1. 프로세서 제어(process Control)

    2. 파일 조작(file manipulation)

    3. 장치 관리(Device Management)

    4. 정보 유지(Information maintenance)

    5. 통신 (Communication)



    시스템 호출 종류


    ⊙ 프로세스 와 관련된 시스템 호출

    - 프로세스 제어용

    ⊙ exec : 자신을 수행 가능한 다른 프로세스로 대치 수행

    ⊙ fork : 현재의 프로세스 이미지를 복사하고 child 프로세스를 만듬

    ⊙ wait

    - pipe : 파이프

    - signal : 소프트웨어 인터럽트 또는 시그널

    - exit : 프로세스 종료

    - getuid, setuid ... : 사용자 및 그룹 id 접근


    ⊙ 표준 화일 (장치)에 대한 입출력 시스템 호출

    - open( ), create( ), close( ), read( ), write( ), lseek( ), ...


    ⊙ 소켓 기반의 입출력 시스템 호출

    - socket( ), bind( ), listen( ), accept( ), connect( ), ...



    시스템 호출(System Call) 레퍼런스


    번호함수 이름설명소스
    1exit( )현재 프로세스의 종료kernel/exit.c
    2fork( )자식 프로세스의 생성arch/i385/kernel/process.c
    3read( )파일 지정자로 부터 읽기fs/read_write.c
    4write( )파일 지정자로 쓰기fs/read_write.c
    5open( )파일이나 장치열기fs/open
    6close( )파일 지정자 닫기fs/open.c
    7waitpid( )프로세스의 종료를 기다린다kernel/exit.c
    8creat( )파일이나 장치의 생성fs/open.c
    9link( )파일을 위한 새로운 이름 만들기fs/namei.c
    10unlink( )파일 혹은 참조된 이름을 삭제한다fs/namei.c
    11

    execv( )

    프로그램의 실행arch/i386/kernel/process.c
    12chdir( )작업디렉토리의 변경fs/open.c
    13time( )초단위의 시간 얻기kernel/time.h
    14mknod( )일반 혹은 특수파일의 생성fs/namei.c
    15chmod( )파일의 권한 바구기fs/open.c
    16chown( )파일의 소유자 변경fs/open.c
    18stat( )파일의 상태 얻기fs/stat.c
    19lseek( )파일에서의 위치 변경fs/read_write.c
    20getpid( )프로세스의 ID를 얻어온다kernel/sched.c
    21mount( )파일 시스템의 마운트fs/super.c
    22

    umount( )

    파일 시스템 마운트 해제fs/super.c
    23setuid( )실제 유저 아이디 설정kernel/sys.c
    24

    getuid( )

    실제 유저 아이디 얻어오기kernel/sched.c
    25stime( )시스템의 시간과 날짜 설정kernel/time.c
    26ptrace( )부모프로세스가 자식프로세스의 실행을 제어하도록 허가arch/i386/kernel/ptrace.c
    27alarm( )실정시간후 alarm시그널이 전달되도록 한다.kernel/sched.c
    28fstat( )파일 상태 얻기fs/stat.c
    29pause( )시그널이 전달될때까지 대기한다.arch/i386/kernel/sys_i386.c
    30

    utime( )

    파일의 엑세스시간과 수정시간을 수정한다.fs/open.c
    33

    access( )

    파일의 권한을 검사한다.fs/open.c
    34nice( )프로세스의 우선순위를 번경한다.kernel/sched.c
    36sync( )슈퍼블럭을 업데이트 한다.fs/buffer.c
    37kill( )프로세스에 시그널을 전송한다.kernel/signal.h
    38rename( )파일의 이름과 위치를 변경한다.fs/namei.c
    39mkdir( )디렉토리를 생성한다.fs/namei.c
    40rmdir( )디렉토리를 제거한다.fs/namei.c
    41dup( )열린 파일 지정자를 복사한다.fs/fcntl.c
    42pipe( )내부통신을 위한 채널을 생성한다.arch/i386/kernel/sys_i386.c
    43times( )프로세스 시간을 얻는다.kernel/sys.c
    45brk( )프로세스의 데이터 세그먼트 크기를 변경한다.mm/mmap.c
    46setgid( )real 그룹 아이디를 설정한다.kernel/sys.c
    47getgid( )real 그룹 아이디를 얻어온다.kernel/sched.c
    48sys_signal( )ANSI C 시그널 제어kernel/signal.c
    49geteuid( )effective 유저 아이디 가져오기kernel/sched.c
    50getegid( )effective 그룹 아이디 가져오기kernel/sched.c
    51acct( )프로세스 측정을 켜거나 끈다.kernel/acct.c
    52umount2( )파일시스템 unmountfs/super.c
    54ioctl( )장치 제어fs/ioctl.c
    55fcntl( )파일 제어fs/fcntl.c
    56mpx사용되지 않음
    57setpgid( )프로세스의 그룹 아이디 설정kernel/sys.c
    58ulimit( )사용되지 않음
    59olduname구식의 uname 시스템콜arch/i386/kernel/sys_i386.c
    60umaks( )파일 마스크의 생성kernel/sys.c
    61chroot( )루트디렉토리의 변경fs/open.c
    62ustat( )파일시스템의 통계 얻기fs/super.c
    63dup2( )파일 지정자 복사fs/fcntl.c
    64getppid( )부모 프로세스의 PID 얻기kernel/sched.c
    65getpgrp( )프로세스의 그룹 아이디 얻기kernel/sys.c
    66setsid( )세션과 프로세스 그룹 아이디 설정kernel/sys.c
    67sigaction( )POSIX 시그널 제어 함수arch/i386/kernel/signal.c
    68sigmask( )ANSI C 시그널 제어kernel/signal.c
    69ssetmask( )ANSI C 시그널 제어kernel/signal.c
    70setreuid( )실제 혹은 유효사용자 아이디의 설정kernel/sys.c
    71setregid( )실제 혹은 유효그룹 아이디의 설정kernel/sys.c
    72sigsuspend( )시그널 마스크를 일시적으로 대체한후 시그널을 기다린다.arch/i386/kernel/signal.c
    73sigpending( )시그널을 블럭하고 검사를 수행한다.kernel/signal.c
    74sethostname( )호스트이름 설정kernel/sys.c
    75setrlimit( )자원의 제한값을 설정한다.kernel/sys.c
    76getrlimit( )자원의 제한값을 얻어온다.kernel/sys.c
    77getrusage( )자원의 제한값을 얻어온다.kernel/sys.c
    78gettimeofday( )날짜와 시간을 얻는다.kernel/time.c
    79settimeofday( )날짜와 시간을 설정한다.kernel/time.c
    80getgroups( )포함된 그룹아이디의 목록을 얻는다.kernel/sys.c
    81setgroups( )포함될 르룹아이디의 목록을 설정한다.kernel/sys.c
    82

    old_select( )

    오래된 버젼의 입출력다중화arch/i386/kernel/sys_i386.c
    83symlink( )파일에 대한 심볼릭링크 생성fs/namei.c
    84

    lstat( )

    파일의 상태 얻기fs/stat.c
    85readlink( )심볼릭 링크의 연결된 파일 이름을 읽는다.fs/stat.c
    86

    uselib( )

    공유라이브를 선택한다.fs/exec.c
    87swapon( )파일과 장치의 스와핑을 시작한다.mm/swapfile.c
    88reboot( )리붓 시키거나 Ctrl-Alt-Del을 활성화/비활성화 시킨다.kernel/sys.c
    89old_readdir( )오래된 버젼의 디렉토리 내용읽기fs/readdir.c
    90old_mmap( )오래된 버젼의 메모리 파일 대응arch/i386/kernel/sys/i386.c
    91mnunmap( )메모리 페이지 해제mm/mmap.c
    92truncate( )파일의 길이 결정fs/open.c
    93ftruncate( ) 파일의 길이 결정fs/open.c
    94fchmod( )파일의 권한 변경fs/open.c
    95fchown( )파일의 그룹및 소유자 변경fs/open.c
    96getpriority( )프로그램의 우선순위 얻어오기kernel/sys.c
    97setpriority( )프로그램의 우선순위 설정kernel/sys.c
    98profile( )execution time profile
    99statfs( )파일시스템 정보 얻기fs/open.c
    100fstatfs( )파일시스템 정보 얻기fs/open.c
    101ioperm( )set port input/output permissionsarch/i386/kernel/ioport.c
    102socketcall( )소켓 시스템콜net/socket.c
    103syslog( )커널 메시지 버퍼의 내용을 읽거나 클리어한다.kerne/printk.c
    104setitimer( )내부 타이머 설정kernel/itimer.c
    105

    getitimer(  )

    내부 타이머 값 가져오기kernel/itimer.c
    106sys_newstat( )파일의 상태 얻기fs/stat.c
    107sys_newlstat( )파일의 상태 얻기fs/stat.c
    108sys_newfstat( )파일의 상태 얻기fs/stat.c
    109olduname( )최근 커널의 정보얻기arch/i386/kernel/sys_i386.c
    110iopl( )I/O privilege 레벨 변경arch/i386/kernel/ioport.c
    111

    vhangup( )

    가상으로 현재 tty를 중지시킨다.fs/open.c
    112idle( )0번 프로세스를 idel상태로 한다.arch/i386/kernel/process.c
    113vm86old( )가상 8086모드로 들어가기arch/i386/kernel/vm86.c
    114

    wait4( )

    프로세스의 종료를 기다린다. BSD 스타일kernelk/exit.c
    115swapoff( )파일/장치의 스와핑 끝내기mm/swapfile.c
    116sysinfo( )시스템의 정보 얻어오기kernel/info.c
    117ipc( )System V IPC 시스템 콜arch/i386/kernelk/sys_i386.c
    118fsync( )파일의 내부상태와 디스크상의 상태를 동기화 한다.fs/buffer.c
    119sigreturn( )시그널 핸들러와 클린업 스택 프레임으로 부터 반환arch/i386/kernel/signal.c
    120clone( )자식 프로세스의 생성arch/i386/kernel/process.c
    121setdomainname( )도메인 이름 설정kernel/sys.c
    122uname( )최근 커널의 정보 얻어오기kernel/sys.c
    123modify_ldt( )ldt를 가져오거나 설정한다.arch/i386/kernel/ldt.c
    124adjtmex( )커널 클럭을 조율한다.kernel/time.c
    125mprotect( )메모리 영역에 대한 접근을 제어한다.mm/mprotect.c
    126sigprocmask( )POSIX 시그널 제어 관련 함수kernel/signal.c
    127create_module( )적재가능한 모듈엔트리 생성kernel/module.c
    128init_module( )적재가능한 모듈 엔트리 초기화kernelk/module.c
    129delete_module( )적재 모듈의 삭제kernel/module.c
    130get_kernel_syms( )retrieve exported kernel and module symbolskernel/module.c
    131quotactl( )디스크 쿼터 수정fs/dquot.c
    132getpgid( )프로세스 그룹아이디 가져오기kernel/sys.c
    133fchdir( )작업 디렉토리 변경fs/open.c
    134bdflush( )start, flush, buffer-dirty-flush 데몬을 조정한다fs/buffer.c
    135sysfs( )파일시스템 타입정보 가져오기fs/super.c
    136personality( )프로세스 실행 도메인 설정kernel/exec_domain.c
    137afs_syscall( )사용하지 않음
    138

    setfsuid( )

    파일 시스템 검사를 위해 사용되는 사용자 실별자를 설정kernel/sys.c
    139setfsgid( )파일 시스템 검사를 위해 사용되는 그룹 식별자를 설정
    140sys_llseek( )읽기/쓰기 파일의 위치 이동fs/read_write.c
    141getdents( )디렉토리 내용을 읽어들인다.fs/readdir.c
    142select( )입출력 다중화fs/select.c
    143flock( )열린파일에 대한 권고잠금 적용및 제거fs/locks.c
    144msync( )메모리 맵과 파일의 동기화mm/filemap.c
    145readv( )벡터를 읽는다fs/read_write.c
    146writev( )벡터를 쓴다fs/read_write.c
    147sys_getsid( )세션리더의 프로세스 아이디를 가져온다kernel/sys.c
    148fdatasync( )파일의 디스크에 있는 in-core 데이터를 동기화fs/buffer.c
    149

    sysctl( )

    시스템 파라메터를 읽고 쓴다
    150mlock( )메모리의 페이지 잠금mm/mlock.c
    151munlock( )메모리의 페이지 잠금 풀기mm/mlock.c
    152mlockall( )호출한 프로세스의 페이징을 금지시킨다mm/mlock.c
    153munlockall( )호출한 프로세스에 대한 페이징을 다시 가능하도록 한다.mm/mlock.c
    154sched_setparam( )스케줄 파라메터 설정kernel/sched.c
    155sched_getparam( ) 스케쥴 파라메터 설정값 가져오기kernel/sched.c
    156sched_setscheduler( )스케쥴 알고리즘 파라메터 설정kernel/sched.c
    157sched_getscheduler( )스케쥴 알고리즘 파라메터 값 가져오기kernel/sched.c
    158sched_yield( )kernel/sched.c
    159sched_get_priority_max( )정적 선행 범위를 가진다kernel/sched.c
    160sched_get_priority_mix( )kernel/sched.c
    161sched_rr_get_interval( )프로세스의 SCHED_RR간격을 가져온다.kernel/sched.c
    162nanosleep( )지정한 시간에 실행을 잠시 멈춘다kernel/sched.c
    163mremap( )가상 메모리 주소를 재대응시킨다mm/mremap.c
    164setresuid( )set real, effective and saved user or group IDkernel/sys.c
    165getresuid( )get real, effective and saved user or group IDkernel/sys.c
    166vm86( )8086가상 모드로 진입arch/i386/kernel/vm86.c
    167query_module( )query the kernel for various bits pertaining to moduleskernel/module.c
    168poll( )파일 지정자로 부터 이벤트를 기다린다fs/select.c
    169nfsservctl( )커널 nfs 데몬을 위한 인터페이스fs/filesystems.c
    170

    setresgid( )

    set real, effective and saved user or group IDkernel/sys.c
    171getresgid( )get real, effective and saved user or group IDkernel/sys.c
    172prctl( )프로세스상에서의 실행kernel/sys.c
    173rt_sigreturnarch/i386/kernel/signal.c
    174rt_sigactionkernel/signal.c
    175rt_sigprocmaskkernel/signal.c
    176rt_sigpendingkernel/signal.c
    177rt_sigtimedwaitkernel/signal.c
    178rt_sigqueueinfokernel/signal.c
    179rt_sigsuspendarch/i386/kernel/signal.c
    180pread( )파일 지정자로 부터 위치를 가져오거나 읽는다fs/read_write.c
    181sys_pwrite( )파일 지정자로 부터 위치를 가져오거나 쓴다fs/read_write.c
    182chown( )파일 소유자 변경fs/open.c
    183getcwd( )최근 작업 디렉토리 가져오기fs/dcache.c
    184capget( )프로세스 기능의 설정값 가져오기kernel/capability.c
    185capset프로세스 기능 설정하기kernle/capability.c
    186sigaltstack( )시그널 스택 문맥을 가져오가나 설정arch/i386/kernel/signal.c
    187sendfile( )파일 지정자 사이의 데이터 교환mm/filemap.c
    188getpmsg( )사용하지 않음
    189putpmsg( )사용하지 않음
    190vfork( )자식 프로세스 생성과 부모 프로세스 블럭arch/i386/kernel/process.c


    댓글

Designed by Tistory.