From 339665358932e8e5f918ed528b86f13bd09f5fe2 Mon Sep 17 00:00:00 2001 From: pablusha Date: Sun, 10 May 2026 14:24:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B1=D0=BB=D1=8F=20=D0=BB=D0=B0=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D0=BE=D0=BC=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF?= =?UTF-8?q?=D0=B8=D1=88=D1=83=20=D1=8D=D1=82=D1=83=20=D1=88=D1=82=D1=83?= =?UTF-8?q?=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/txt/txt.asm | 215 ------------------------------------------------ 1 file changed, 215 deletions(-) delete mode 100644 src/txt/txt.asm diff --git a/src/txt/txt.asm b/src/txt/txt.asm deleted file mode 100644 index 9f9f6c0..0000000 --- a/src/txt/txt.asm +++ /dev/null @@ -1,215 +0,0 @@ -%define STDIN 0 -%define STDOUT 1 -%define STDERR 2 - -%define SYS_READ 0 -%define SYS_WRITE 1 -%define SYS_OPEN 2 -%define SYS_LSEEK 8 -%define SYS_MMAP 9 -%define SYS_IOCTL 16 -%define SYS_MREMAP 25 -%define SYS_EXIT 60 - -%define TCGETS 0x5401 -%define TCSETS 0x5402 - -%define CTRL_S 0x13 -%define CTRL_X 0x18 - -%define O_RDWR 2 -%define O_CREAT 0x40 - -%define SEEK_END 2 - -%DEFINE FREAD_BUF 4096 - -section .data - ioctl_err_m db "ioctl error", 10, 0 - args_err_m db "args error", 10, 0 - fopen_err_m db "file open error", 10, 0 - -section .bss - orig_termios resb 60 - raw_termios resb 60 - cbuf resb 4 - rbuf resb FREAD_BUF - - fd resd 1 ; файловый дескриптор - size resq 1 ; размер исходного файла - cur_size resq 1 ; текущий размер файла - bsize resq 1 ; размер выделяемой области - pos resq 1 ; позиция в файле - - buf resq 1 ; указатель на выделяемую память - -section .text - global _start - -_start: - ; сохраняем изначальное состояние терминала - mov rax, SYS_IOCTL - mov rdi, STDIN - mov rsi, TCGETS - mov rdx, orig_termios - syscall - - test rax, rax - js ioctl_err - - mov rcx, 15 - mov rsi, orig_termios - mov rdi, raw_termios - rep movsd - - ; неебические костыли - mov eax, [raw_termios + 0] - and eax, ~0x400 ; IXON - mov [raw_termios + 0], eax - - mov eax, [raw_termios + 12] - and eax, ~(2 | 8 | 1) ; ICANON | ECHO | ISIG - mov [raw_termios + 12], eax - - ; переходим в raw mode - mov rax, SYS_IOCTL - mov rdi, STDIN - mov rsi, TCSETS - mov rdx, raw_termios - syscall - - ; ищем название файла в аргументах - mov rbx, [rsp] - cmp rbx, 2 - jne args_err - - mov rax, SYS_OPEN - mov rdi, [rsp + 16] - mov rsi, O_RDWR | O_CREAT - mov rdx, 0q0700 - syscall - - test rax, rax - js fopen_err - mov qword [rel fd], rax ; в идеале кншн файловый дескриптор сделать 32 битным но эээ лень - - mov rax, SYS_LSEEK - mov rdi, qword [rel fd] - mov rsi, 0 - mov rdx, SEEK_END ; меня так прикалывает тот факт, что этот код будут читать ток под пивом (и то если будут) - syscall ; а еще просто прекрасно кодить это под pastel ghost - - mov qword [rel bsize], rax - shl qword [rel bsize], 1 - mov qword [rel size], rax - mov qword [rel pos], rax - cmp rax, 0 - je .read_loop - - mov rax, SYS_LSEEK - mov rdi, qword [rel fd] - mov rsi, 0 - mov rdx, 0 - syscall - - mov rax, SYS_MMAP - xor rdi, rdi - mov rsi, qword [rel bsize] - mov rdx, 0x3 ; PROT_READ|PROT_WRITE - mov r10, 0x22 ; MAP_PRIVATE | MAP_ANONYMOUS - mov r8, -1 - mov r9, 0 - syscall - mov [buf], rax - -.fread_loop: ; спиздил с rd но кому не похуй - mov rax, SYS_READ - mov rdi, qword [fd] - mov rsi, rbuf - mov rdx, FREAD_BUF - syscall - - test rax, rax - jz .read_loop - - mov r8, rax - mov rdx, r8 - mov rax, SYS_WRITE - mov rsi, rbuf - mov rdi, [buf] - syscall - - jmp .fread_loop -.read_loop: - mov rax, SYS_READ - mov rdi, STDIN - mov rsi, cbuf - mov rdx, 4 - syscall - - mov rdx, rax - mov rax, SYS_WRITE - mov rdi, STDOUT - mov rsi, cbuf - syscall - - cmp byte [rel cbuf], CTRL_X - je .done - - cmp byte [rel cbuf], CTRL_S - je .save - - jmp .read_loop -.save: - -.done: - jmp exit - -args_err: - mov rax, SYS_WRITE - mov rdi, STDERR - mov rsi, args_err_m - mov edx, 12 - syscall - - jmp exit_err - -fopen_err: - mov rax, SYS_WRITE - mov rdi, STDERR - mov rsi, fopen_err_m - mov edx, 17 - syscall - - jmp exit_err - -ioctl_err: - mov rax, SYS_WRITE - mov rdi, STDERR - mov rsi, ioctl_err_m - mov edx, 13 - syscall - - jmp exit_err - -exit_err: - mov rax, SYS_IOCTL - mov rdi, STDIN - mov rsi, TCSETS - mov rdx, orig_termios - syscall - - mov rax, SYS_EXIT - mov rdi, 1 - syscall - -exit: - mov rax, SYS_IOCTL - mov rdi, STDIN - mov rsi, TCSETS - mov rdx, orig_termios - syscall - - mov rax, SYS_EXIT - mov rdi, 0 - syscall \ No newline at end of file