Menu
Coddy logo textTech

Дескриптор файла (rdi)

Часть раздела Основы путешествия по Assembly на Coddy — урок 36 из 45.

В предыдущем уроке вы использовали mov rdi, 1 как часть системного вызова write. Это число 1 называется файловым дескриптором.

Файловый дескриптор — это число, которое сообщает операционной системе, куда отправлять данные.

Три стандартных файловых дескриптора в Linux:

Файловый дескрипторИмяКуда направляются данные
0stdinВвод с клавиатуры (чтение данных от пользователя)
1stdoutВывод на экран (обычный вывод программы)
2stderrВывод на экран (сообщения об ошибках)

Зачем нужны два вывода на экран?

Стандартный вывод (stdout) и вывод ошибок (stderr) направляются на один и тот же экран, но обрабатываются раздельно. Это позволяет вам:

  • Перенаправлять стандартный вывод в файл, по-прежнему видя ошибки на экране
  • Показывать ошибки, даже когда стандартный вывод скрыт

Для вывода в этом курсе:

Вы всегда будете использовать файловый дескриптор 1 (stdout) для вывода сообщений. Вам пока не нужен stderr.

Пример:

mov rdi, 1      ; отправить вывод в stdout (на экран)

Что произойдет, если использовать неправильный файловый дескриптор?

Если вы используетеРезультат
0 (stdin)Системный вызов write ожидает ввод, а не вывод — завершится ошибкой или ничего не сделает
2 (stderr)Работает как stdout (выводит на экран), но предназначен для ошибок
Любое другое числоЯдро не распознает его — системный вызов завершается ошибкой
challenge icon

Задание

Вам дана строка с именем message со значением 'OK', за которым следует символ новой строки. Напишите строку кода, которая устанавливает файловый дескриптор для вывода на экран (stdout). Напишите только инструкцию mov для rdi.

Попробуйте сами

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Проверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы