From f0cab2dca67c361919f73b751c9db2a79e55d1db Mon Sep 17 00:00:00 2001 From: pablusha Date: Tue, 5 May 2026 16:18:10 +0300 Subject: [PATCH] added basic shit --- .gitignore | 1 + build.sh | 16 ++++++++ src/cat/cat.asm | 90 ++++++++++++++++++++++++++++++++++++++++++++ src/false/false.asm | 7 ++++ src/true/true.asm | 7 ++++ tmp/cat.o | Bin 0 -> 1536 bytes tmp/false.o | Bin 0 -> 576 bytes tmp/true.o | Bin 0 -> 576 bytes 8 files changed, 121 insertions(+) create mode 100644 .gitignore create mode 100755 build.sh create mode 100644 src/cat/cat.asm create mode 100644 src/false/false.asm create mode 100644 src/true/true.asm create mode 100644 tmp/cat.o create mode 100644 tmp/false.o create mode 100644 tmp/true.o diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36f971e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +bin/* diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..7556750 --- /dev/null +++ b/build.sh @@ -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 diff --git a/src/cat/cat.asm b/src/cat/cat.asm new file mode 100644 index 0000000..71b9d30 --- /dev/null +++ b/src/cat/cat.asm @@ -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 diff --git a/src/false/false.asm b/src/false/false.asm new file mode 100644 index 0000000..9a63501 --- /dev/null +++ b/src/false/false.asm @@ -0,0 +1,7 @@ +section .text +global _start + +_start: + mov rax, 60 + mov rdi, 1 + syscall diff --git a/src/true/true.asm b/src/true/true.asm new file mode 100644 index 0000000..a6bfb62 --- /dev/null +++ b/src/true/true.asm @@ -0,0 +1,7 @@ +section .text +global _start + +_start: + mov rax, 60 + xor rdi, rsi + syscall diff --git a/tmp/cat.o b/tmp/cat.o new file mode 100644 index 0000000000000000000000000000000000000000..b68b9a7f0717e450c176b142cece9ace396af069 GIT binary patch literal 1536 zcmbW1PiqrF6u@7Su9Q;PC@7Y;&_iy@YDMrO5|EY^D*XT+(n-6mg``<#M@T^sDnUZ; z(qr)}cv*U|B0>+n`56QcIeGTbzBlt`Go5UE@WIZ$_nY@;{=D4}D{HION(HP`;025= zO97f=mGve}!<0k+Po-MZ_|&}cW|cwx>V#kM7EV)+>*DWU4WC%?EXPwGS2no*xeHPE zmIHT?`L!wJF~etMIO3n}0?yg3I&P41{1FGx`lvRY6^Y$f1NE}{^+3D9C-W*szy3p< z@z0c;k2!vW3=}e{j$eO!x05U-QugEw2)UD4onlDh!-Yot@n1#F;#ds_2gpXj>*e30 zxt#VLAHHwYziH3qUt!RXUk!ieWUdYW#F~?FLVFK`c<^1#$HN~v?c$V%u}c_?&T?8I z2BN-dd~}I%8oF(qT)b%#^5-^t7#JOG45JYsYG)ZlTS5tlRMJ-vWp6Vjm1v{3-!*Tx zWzrGG$;93;(q^XM??stQt@Mke`zY%i;*%Y5TPOB!AKo1@=R(w9 zGN1SOI`gLwTu>YyYAD~??IiJEUlbeq=g`y`CSr^*x zwtKRY|Nq{vw0gQUN!D6v+G)!^UQ V2;H1}OX3JfjWMqH=Mg}_u1P><4z~F#jLfH-stPD&@qU13_c7ZS(n)U{$BY4on1GLos$UUJ4k`>66$G-d`QiXnVFFYo3y=oc!vW<>Kxs*+IFt*g6rhI6z(pVo zbo+PM0LAx%MEP04D)dTHD@qvjiZhB!ib@ibfUL?~2o2#wj3G#ZOk`pB_#c}>W-Ku* j3REb7MVz6yC|N%(F{d~cLh2mn0UIfQ<$K*jFAQ literal 0 HcmV?d00001 diff --git a/tmp/true.o b/tmp/true.o new file mode 100644 index 0000000000000000000000000000000000000000..945e55d01e8f995fac19d27257a9ab6c89f02da2 GIT binary patch literal 576 zcmb<-^>JfjWMqH=Mg}_u1P><4z~F#jLfH-stPD&@qU13_c7ZS(n)U{$Be>AS1GLos$UUJ4k`>66$G-d`QiXnVFFYo3y=oc!vW<>Kxs*+IFt*g6rhGm!9^ep zbo+PM0L48Fzw@&~73!6wR+KR46=xKe6qO_<0a=x~5E{ZqGY=ORWDg6&$N$*mnX$yM iFi@cY7IB8+qGbJ&qS90_p_f>k%Mf2&l2}v%H5dR;ogOs+ literal 0 HcmV?d00001