System Call에 대해서 알아보자

이정빈·2023년 7월 24일
0

시스템해킹

목록 보기
2/2

System call 이란?

  • System call 이란 사용자 프로세서가 소프트웨어 인터럽트를 통해 커널의 기능을 이용하기 위한 서비스를 요청하는 하나의 방법입니다.
  • 응용프로그램에서 운영체제에게 어떠한 기능(시스템 자원)을 수행해 달라고 하는 하나의 수단입니다.
  • 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근 하기 위한 인터페이스입니다.

System Call 호출 방법

  • 매개변수를 전달할 때 대부분의 환경에서 매개변수를 CPU 레지스터를 통해 전달합니다.
  • 레지스터를 이용해서 인자를 설정하고 시스템 콜 함수를 호출합니다.

32bit system call table 확인
https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86-32_bit

64bit system call table 확인
https://chromium.googlesource.com/chromiumos/docs/+/master/constants/syscalls.md#x86_64-64_bit

System call 호출 - 32bit

  • 32bit 환경에서는 int 0x80 이라는 어셈블리 명령어를 통해 시스템 콜 호출이 가능합니다

  • $eax는 시스템 콜 Number를 뜻합니다.

  • ex) write 를 syscall 하고 싶다면,

    $eax = 0x04
    $ebx = 1번째 인자 (unsigned int fd)
    $ecx = 2번째 인자 (const char *buf)
    $edx = 3번째 인자 (size_t count)
    위와 같이 레지스터를 세팅해주고 int 0x80으로 시스템 콜을 호출해주면 됩니다.

    System call 호출 - 64bit

  • 64bit 환경에서는 syscall 이라는 어셈블리 명령어를 통해 시스템 콜 호출이 가능합니다.

  • $rax는 시스템 콜 Number를 뜻합니다.

  • ex) write 를 syscall 하고 싶다면,

    $rax = 0x01
    $ebx = 1번째 인자 (unsigned int fd)
    $ecx = 2번째 인자 (const char *buf)
    $edx = 3번째 인자 (size_t count)
    위와 같이 레지스터를 세팅해주고 syscall으로 시스템 콜을 호출해주면 됩니다.

System Call(syscall) 정리

  • 운영체제는 User, Kernel Mode로 나뉘어 구동합니다.
  • 운영체제에서 프로그램이 실행 중에 파일을 읽어오거나, 쓰거나, 화면에 메시지를 출력하는 등 많은 부분에서 커널 모드를 사용합니다.
  • System Call 을 통해 커널 영역의 기능을 User Mode에서 사용 가능하게 해줍니다.
profile
안녕하세요

0개의 댓글