separate into files

This commit is contained in:
root 2025-05-07 11:38:19 +00:00
parent 0038b22aca
commit 9f3d59cf15
3 changed files with 68 additions and 75 deletions

View file

@ -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

View file

@ -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

61
server.s Normal file
View file

@ -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