Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 61f9c42eec | |||
| 5fe61abedd | |||
| f0cab2dca6 |
@@ -0,0 +1,2 @@
|
|||||||
|
bin/*
|
||||||
|
tmp/*
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
set -ex
|
||||||
|
|
||||||
|
echo "compiling true"
|
||||||
|
nasm -f elf64 -o tmp/true.o src/true/true.asm
|
||||||
|
ld -s --nmagic -o bin/true tmp/true.o
|
||||||
|
ls -l bin/true
|
||||||
|
|
||||||
|
echo "compiling false"
|
||||||
|
nasm -f elf64 -o tmp/false.o src/false/false.asm
|
||||||
|
ld -s --nmagic -o bin/false tmp/false.o
|
||||||
|
ls -l bin/false
|
||||||
|
|
||||||
|
echo "compiling cat"
|
||||||
|
nasm -f elf64 -o tmp/cat.o src/cat/cat.asm
|
||||||
|
ld -s -o bin/cat tmp/cat.o
|
||||||
|
ls -l bin/cat
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
%define STDOUT 1
|
||||||
|
%define STDERR 2
|
||||||
|
|
||||||
|
%define SYS_READ 0
|
||||||
|
%define SYS_WRITE 1
|
||||||
|
%define SYS_OPEN 2
|
||||||
|
%define SYS_CLOSE 3
|
||||||
|
%define SYS_EXIT 60
|
||||||
|
|
||||||
|
%define O_RDONLY 0
|
||||||
|
|
||||||
|
section .bss
|
||||||
|
buf resb 4096
|
||||||
|
|
||||||
|
section .data
|
||||||
|
file_err_m db "file error", 10, 0
|
||||||
|
args_err_m db "args error", 10, 0
|
||||||
|
|
||||||
|
section .text
|
||||||
|
global _start
|
||||||
|
|
||||||
|
_start:
|
||||||
|
; так ну для начала надо бы понять сколько у нас аргументов
|
||||||
|
mov rbx, [rsp]
|
||||||
|
cmp rbx, 1
|
||||||
|
je .prep_narg
|
||||||
|
cmp rbx, 2
|
||||||
|
jne args_err
|
||||||
|
jmp .prep
|
||||||
|
.prep_narg:
|
||||||
|
xor r12, r12
|
||||||
|
jmp .loop
|
||||||
|
.prep:
|
||||||
|
mov rax, SYS_OPEN
|
||||||
|
mov rdi, [rsp + 16]; argv[1]
|
||||||
|
mov rsi, O_RDONLY
|
||||||
|
xor rdx, rdx
|
||||||
|
syscall
|
||||||
|
js file_err
|
||||||
|
|
||||||
|
mov r12, rax
|
||||||
|
.loop:
|
||||||
|
mov rax, SYS_READ
|
||||||
|
mov rdi, r12
|
||||||
|
mov rsi, buf
|
||||||
|
mov rdx, 4096
|
||||||
|
syscall
|
||||||
|
|
||||||
|
test rax, rax
|
||||||
|
jz .done
|
||||||
|
|
||||||
|
mov rdx, rax
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
mov rdi, STDOUT
|
||||||
|
mov rsi, buf
|
||||||
|
syscall
|
||||||
|
jmp .loop
|
||||||
|
.done:
|
||||||
|
mov rax, SYS_CLOSE
|
||||||
|
mov rdi, r12
|
||||||
|
syscall
|
||||||
|
jmp exit
|
||||||
|
|
||||||
|
file_err:
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
mov rdi, STDERR
|
||||||
|
mov rsi, file_err_m
|
||||||
|
mov rdx, 12
|
||||||
|
syscall
|
||||||
|
|
||||||
|
jmp exit_err
|
||||||
|
|
||||||
|
args_err:
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
mov rdi, STDERR
|
||||||
|
mov rsi, args_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
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
section .text
|
||||||
|
global _start
|
||||||
|
|
||||||
|
_start:
|
||||||
|
mov rax, 60
|
||||||
|
mov rdi, 1
|
||||||
|
syscall
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
section .text
|
||||||
|
global _start
|
||||||
|
|
||||||
|
_start:
|
||||||
|
mov rax, 60
|
||||||
|
xor rdi, rsi
|
||||||
|
syscall
|
||||||
Reference in New Issue
Block a user