Menu
Coddy logo textTech

File Descriptor (rdi)

Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 36번째.

이전 레슨에서는 write syscall의 일부로 mov rdi, 1을 사용했습니다. 이 숫자 1file descriptor라고 합니다.

file descriptor는 운영 체제에 데이터를 어디로 보낼지 알려 주는 숫자입니다.

Linux의 세 가지 표준 파일 디스크립터:

파일 디스크립터이름데이터가 전달되는 곳
0stdin키보드 입력 (사용자로부터 데이터 읽기)
1stdout화면 출력 (일반 프로그램 출력)
2stderr화면 출력 (오류 메시지)

화면에 두 개의 출력이 있는 이유는 무엇인가요?

일반 출력(stdout)과 오류 출력(stderr)은 같은 화면으로 전송되지만, 별도로 처리됩니다. 이를 통해 다음을 수행할 수 있습니다.

  • 화면에서 오류를 계속 확인하면서 일반 출력을 파일로 리디렉션
  • 일반 출력이 숨겨져 있어도 오류 표시

이 과정에서 출력할 때:

메시지를 출력할 때는 항상 파일 디스크립터 1(stdout)을 사용합니다. 아직은 stderr가 필요하지 않습니다.

예시:

mov rdi, 1      ; 출력을 stdout(화면)으로 보냄

잘못된 파일 디스크립터를 사용하면 어떻게 될까요?

사용하는 값결과
0 (stdin)write syscall은 출력이 아니라 입력을 예상합니다. 실패하거나 아무 작업도 하지 않습니다
2 (stderr)stdout처럼 작동하여 화면에 출력되지만, 오류를 위한 것입니다
그 외의 숫자커널이 이를 인식하지 못하므로 syscall이 실패합니다
challenge icon

챌린지

줄바꿈이 뒤따르는 'OK' 값을 가진 message라는 문자열이 주어집니다. 화면(stdout)에 출력하도록 파일 디스크립터를 설정하는 코드 한 줄을 작성하세요. rdi에 대한 mov 명령어만 작성하세요.

직접 해보기

section .data
    message db 'OK', 0x0a
    msgLen equ $ - message

section .text
    global _start

_start:
    ; 학생이 여기에 파일 디스크립터를 설정합니다
    %include "solution.asm"
    
    mov rax, 1
    ; rdi는 이미 학생이 설정해 두어야 합니다
    mov rsi, message
    mov rdx, msgLen
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: Assembly 플레이그라운드