From 9f3d59cf15265d7e514f02e51185b03e7aceccd8 Mon Sep 17 00:00:00 2001 From: root <> Date: Wed, 7 May 2025 11:38:19 +0000 Subject: [PATCH] separate into files --- hello.s => main.s | 78 +++-------------------------------------------- makefile | 4 +-- server.s | 61 ++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 75 deletions(-) rename hello.s => main.s (63%) create mode 100644 server.s diff --git a/hello.s b/main.s similarity index 63% rename from hello.s rename to main.s index 98d98d2..e42255e 100644 --- a/hello.s +++ b/main.s @@ -25,10 +25,8 @@ pollfd_size equ 4 + 2 + 2 ; $ man 2 poll pollfds_capacity equ 100 SECTION .data -hello db "Hello world!", 0x0a -hello_len equ $ - hello server_path db "server.sock", 0x00 -server_path_len equ $ - hello +server_path_len equ $ - server_path sockaddr_size equ 2 + 108 ; $ man 7 unix SECTION .bss @@ -37,13 +35,9 @@ pollfds resb pollfd_size * pollfds_capacity SECTION .text -_start: - mov rax, SYS_WRITE - mov rdi, STDOUT - mov rsi, hello - mov rdx, hello_len - syscall +%include "server.s" +_start: call make_server mov rbx, 0 ; pollfd array length mov ebp, eax ; server fd @@ -61,8 +55,8 @@ poll: mov rdx, 5000 syscall cmp rax, 0 - jeq poll - jlt exit + je poll + jl exit exit: mov rax, SYS_EXIT @@ -125,67 +119,5 @@ pollfds__clear: mov rax, 0 ret -; Returns (in rax) the server's file descriptor -make_server: - mov rax, SYS_UNLINK - mov rdi, server_path - syscall - - mov rax, SYS_SOCKET - mov rdi, AF_UNIX - mov rsi, SOCK_STREAM - mov rdx, 0 - syscall - push rax - - call nonblocking - call make_sockaddr - pop r10 - - mov rax, SYS_BIND - mov rdi, r10 - mov rsi, sockaddr - mov rdx, sockaddr_size - syscall - - mov rax, SYS_LISTEN - mov rdi, r10 - mov rsi, 100 - syscall - - mov rax, r10 - ret - -nonblocking: - mov r10, rax - - mov rax, SYS_FCNTL - mov rdi, r10 - mov rsi, F_GETFL - syscall - - mov r11, rax - xor r11, O_NONBLOCK - - mov rax, SYS_FCNTL - mov rdi, r10 - mov rsi, F_SETFL - mov rdx, r11 - syscall - - ret - -make_sockaddr: - mov word [sockaddr], AF_UNIX - mov rax, 0 - -make_sockaddr__copy_server_path: - cmp rax, server_path_len - jge return - mov r10, [server_path + rax] - mov [sockaddr + rax + 2], r10 - add rax, 8 - jmp make_sockaddr__copy_server_path - return: ret diff --git a/makefile b/makefile index d03c95d..054cc15 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,3 @@ main: - nasm -g -f elf64 -o hello.o hello.s - ld -o hello hello.o + nasm -g -f elf64 -o main.o main.s + ld -o main main.o diff --git a/server.s b/server.s new file mode 100644 index 0000000..baea35b --- /dev/null +++ b/server.s @@ -0,0 +1,61 @@ +; Returns (in rax) the server's file descriptor +make_server: + mov rax, SYS_UNLINK + mov rdi, server_path + syscall + + mov rax, SYS_SOCKET + mov rdi, AF_UNIX + mov rsi, SOCK_STREAM + mov rdx, 0 + syscall + push rax + + call nonblocking + call make_sockaddr + pop r10 + + mov rax, SYS_BIND + mov rdi, r10 + mov rsi, sockaddr + mov rdx, sockaddr_size + syscall + + mov rax, SYS_LISTEN + mov rdi, r10 + mov rsi, 100 + syscall + + mov rax, r10 + ret + +nonblocking: + mov r10, rax + + mov rax, SYS_FCNTL + mov rdi, r10 + mov rsi, F_GETFL + syscall + + mov r11, rax + xor r11, O_NONBLOCK + + mov rax, SYS_FCNTL + mov rdi, r10 + mov rsi, F_SETFL + mov rdx, r11 + syscall + + ret + +make_sockaddr: + mov word [sockaddr], AF_UNIX + mov rax, 0 + +make_sockaddr__copy_server_path: + cmp rax, server_path_len + jge return + mov r10, [server_path + rax] + mov [sockaddr + rax + 2], r10 + add rax, 8 + jmp make_sockaddr__copy_server_path