wow it now reads one char!!!
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
mkdir -p tmp bin
|
||||||
|
|
||||||
echo "compiling true"
|
echo "compiling true"
|
||||||
nasm -f elf64 -o tmp/true.o src/true/true.asm
|
nasm -f elf64 -o tmp/true.o src/true/true.asm
|
||||||
ld -s --nmagic -o bin/true tmp/true.o
|
ld -s --nmagic -o bin/true tmp/true.o
|
||||||
@@ -10,7 +12,12 @@ nasm -f elf64 -o tmp/false.o src/false/false.asm
|
|||||||
ld -s --nmagic -o bin/false tmp/false.o
|
ld -s --nmagic -o bin/false tmp/false.o
|
||||||
ls -l bin/false
|
ls -l bin/false
|
||||||
|
|
||||||
echo "compiling cat"
|
echo "compiling rd"
|
||||||
nasm -f elf64 -o tmp/cat.o src/cat/cat.asm
|
nasm -f elf64 -o tmp/rd.o src/rd/rd.asm
|
||||||
ld -s -o bin/cat tmp/cat.o
|
ld -s -o bin/rd tmp/rd.o
|
||||||
ls -l bin/cat
|
ls -l bin/rd
|
||||||
|
|
||||||
|
echo "compiling txt"
|
||||||
|
nasm -f elf64 -o tmp/txt.o src/txt/txt.asm
|
||||||
|
ld -s -o bin/txt tmp/txt.o
|
||||||
|
ls -l bin/txt
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
%define STDIN 0
|
||||||
|
%define STDOUT 1
|
||||||
|
%define STDERR 2
|
||||||
|
|
||||||
|
%define SYS_READ 0
|
||||||
|
%define SYS_WRITE 1
|
||||||
|
%define SYS_IOCTL 16
|
||||||
|
%define SYS_EXIT 60
|
||||||
|
|
||||||
|
%define TCGETS 0x5401
|
||||||
|
%define TCSETS 0x5402
|
||||||
|
|
||||||
|
section .data
|
||||||
|
ioctl_err_m db "ioctl error", 10, 0
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
orig_termios resb 60
|
||||||
|
raw_termios resb 60
|
||||||
|
cbuf resb 4
|
||||||
|
|
||||||
|
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 + 12]
|
||||||
|
and eax, ~(2 | 8 | 1)
|
||||||
|
mov [raw_termios + 12], eax
|
||||||
|
|
||||||
|
mov rax, SYS_IOCTL
|
||||||
|
mov rdi, STDIN
|
||||||
|
mov rsi, TCSETS
|
||||||
|
mov rdx, raw_termios
|
||||||
|
syscall
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
mov rax, SYS_IOCTL
|
||||||
|
mov rdi, STDIN
|
||||||
|
mov rsi, TCSETS
|
||||||
|
mov rdx, orig_termios
|
||||||
|
syscall
|
||||||
|
|
||||||
|
jmp exit
|
||||||
|
|
||||||
|
ioctl_err:
|
||||||
|
args_err:
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
mov rdi, STDERR
|
||||||
|
mov rsi, ioctl_err_m
|
||||||
|
mov edx, 12
|
||||||
|
syscall
|
||||||
|
|
||||||
|
jmp exit_err
|
||||||
|
|
||||||
|
exit_err:
|
||||||
|
mov rax, SYS_EXIT
|
||||||
|
mov rdi, 1
|
||||||
|
syscall
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mov rax, SYS_EXIT
|
||||||
|
mov rdi, 0
|
||||||
|
syscall
|
||||||
Reference in New Issue
Block a user