Assembler #10 Чтение файлов

Assembler #10 Чтение файлов

@Torchik_Ru

Доброго времени суток, Господа. Сегодня мы будем изучать чтение файлов в языке ASM.

sys_open

Для старта нам надо использовать системный вызов sys_open для открытия файла. Первым аргументом он получает указатель на zero-terminated строку - имя файла.
Вторым аргументом - флаги.
Третий аргумент - режим открытия файла, 4-числовое восьмеричное число, про которое мы говорили ранее.

Очень больших различий на этом этапе с записью в файлы нету. Ниже я привел небольшой код, который открывает файл с флагом "только чтение".

mov rax, SYS_OPEN
mov rdi, filename
mov rsi, O_RDONLY
mov rdx, 0644o
syscall

Как Вы можете видеть, тут всё работает по аналогии с записью.

sys_read

Этот системный вызов может использоваться для чтения информации из файлов. Это работает точно так-же, как и получение ввода от юзера, только первый аргумент меняется на файловый дескриптор, что мы получаем из sys_open.

Часть кода, которая прозводит чтение из файла:

mov rdi, rax
mov rax, SYS_READ
mov rsi, text
mov rdx, 17
syscall

sys_close

Этот системный вызов, как Вы уже знаете принимает только один аргумент - файловый дескриптор.

Вот код, который закрывает файл:

mov rax, SYS_CLOSE
pop rdi
syscall

Пример работы

%include "linux64.inc"
 
section .data
  filename db "myfile.txt",0
 
section .bss
  text resb 18
 
section .text
  global _start
_start:
  ;открытие файла
  mov rax, SYS_OPEN
  mov rdi, filename
  mov rsi, O_RDONLY
  mov rdx, 0
  syscall
  
  ;чтение из файла
  push rax
  mov rdi, rax
  mov rax, SYS_READ
  mov rsi, text
  mov rdx, 17
  syscall
 
  ;закрытие файла
  mov rax, SYS_CLOSE
  pop rdi
  syscall
 
  print text
  exit

Скачать linux64.inc

Report Page