운영체제 | Rax Register

성수당·2025년 9월 12일

운영체제

목록 보기
17/31
post-thumbnail

🥔 RAX 레지스터와 시스템 콜(System Call)

운영체제에서 사용자 프로그램은 직접 커널에 접근할 수 없다. 그래서 사용자 모드(User Mode)에서 커널 모드(Kernel Mode)로 전환하여 커널의 기능을 사용하는 방법으로 시스템 콜(System Call) 이 존재한다.

이때 시스템 콜을 호출할 때 가장 핵심적인 역할을 하는 레지스터가 바로 RAX 다.

🥔 시스템 콜이란?

시스템 콜은 사용자 프로그램이 커널 기능을 요청하는 인터페이스다.

예를 들어 다음과 같은 작업이 모두 시스템 콜을 통해 이루어진다:

  • 파일 열기 (open)
  • 파일 읽기 (read)
  • 프로세스 생성 (fork)
  • 종료 (exit)
  • 메모리 할당 (mmap)

🥔 x86-64 시스템 콜 호출 방식

리눅스에서 64비트 시스템 콜은 syscall 어셈블리 명령어로 수행한다.
이때 각 레지스터에 정해진 규약(Calling Convention) 을 따라 값을 설정해야 한다.

역할레지스터
시스템 콜 번호RAX
첫 번째 인자RDI
두 번째 인자RSI
세 번째 인자RDX
네 번째 인자R10
다섯 번째 인자R8
여섯 번째 인자R9
반환값RAX

RAX는 시스템 콜 번호 전달반환값 수신을 모두 담당하는 핵심 레지스터다.

🥔 시스템 콜 호출 예시

다음은 리눅스에서 exit(0) 시스템 콜을 호출하는 어셈블리 예제다:

mov rax, 60     ; syscall 번호 60번 = exit
mov rdi, 0      ; 첫 번째 인자 = 종료 코드 0
syscall         ; 커널에 요청
  • mov rax, 60 → 시스템 콜 번호
  • mov rdi, 0 → 인자 설정
  • syscall → 호출

🥔 시스템 콜 번호 예시 (x86-64 리눅스 기준)

시스템 콜 이름번호 (RAX에 설정)설명
read0파일 읽기
write1파일 쓰기
open2파일 열기
close3파일 닫기
exit60프로세스 종료
getpid39현재 프로세스 PID 가져오기

/usr/include/x86_64-linux-gnu/asm/unistd_64.h 파일에서 syscall 번호 확인 가능

🥔 반환값 또한 RAX에 저장됨

시스템 콜 수행 결과는 커널이 RAX에 반환값을 담아 다시 사용자 영역으로 복귀한다.

예를 들어, open() 시스템 콜의 반환값은 파일 디스크립터 번호고, 이는 RAX에 저장된다.

mov rax, 2        ; syscall: open
mov rdi, filename ; 파일 이름 포인터
mov rsi, 0        ; 읽기 모드
syscall
; RAX에 파일 디스크립터 결과가 저장됨

🥔 요약: RAX는 시스템 콜의 핵심

역할설명
시스템 콜 번호 전달커널에 어떤 기능을 요청할지 지정 (필수)
반환값 수신커널이 처리 후 결과를 반환하는 위치
필수 순서mov rax, <syscall번호> → syscall

🥔 마무리

시스템 콜을 이해하려면 RAX의 역할을 명확히 알아야 한다.
RAX는 단순한 산술 레지스터가 아니라 커널과 사용자 공간을 연결하는 관문이다.

실제로 커널 개발, 시스템 프로그래밍, 보안 분석 등 저수준 작업을 하게 될 경우,
RAX와 시스템 콜 인터페이스의 이해는 매우 중요한 기초가 된다.

profile
말하는 감자🥔

0개의 댓글