separate into files
This commit is contained in:
parent
0038b22aca
commit
9f3d59cf15
3 changed files with 68 additions and 75 deletions
|
@ -25,10 +25,8 @@ pollfd_size equ 4 + 2 + 2 ; $ man 2 poll
|
||||||
pollfds_capacity equ 100
|
pollfds_capacity equ 100
|
||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
hello db "Hello world!", 0x0a
|
|
||||||
hello_len equ $ - hello
|
|
||||||
server_path db "server.sock", 0x00
|
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
|
sockaddr_size equ 2 + 108 ; $ man 7 unix
|
||||||
|
|
||||||
SECTION .bss
|
SECTION .bss
|
||||||
|
@ -37,13 +35,9 @@ pollfds resb pollfd_size * pollfds_capacity
|
||||||
|
|
||||||
SECTION .text
|
SECTION .text
|
||||||
|
|
||||||
_start:
|
%include "server.s"
|
||||||
mov rax, SYS_WRITE
|
|
||||||
mov rdi, STDOUT
|
|
||||||
mov rsi, hello
|
|
||||||
mov rdx, hello_len
|
|
||||||
syscall
|
|
||||||
|
|
||||||
|
_start:
|
||||||
call make_server
|
call make_server
|
||||||
mov rbx, 0 ; pollfd array length
|
mov rbx, 0 ; pollfd array length
|
||||||
mov ebp, eax ; server fd
|
mov ebp, eax ; server fd
|
||||||
|
@ -61,8 +55,8 @@ poll:
|
||||||
mov rdx, 5000
|
mov rdx, 5000
|
||||||
syscall
|
syscall
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
jeq poll
|
je poll
|
||||||
jlt exit
|
jl exit
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mov rax, SYS_EXIT
|
mov rax, SYS_EXIT
|
||||||
|
@ -125,67 +119,5 @@ pollfds__clear:
|
||||||
mov rax, 0
|
mov rax, 0
|
||||||
ret
|
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:
|
return:
|
||||||
ret
|
ret
|
4
makefile
4
makefile
|
@ -1,3 +1,3 @@
|
||||||
main:
|
main:
|
||||||
nasm -g -f elf64 -o hello.o hello.s
|
nasm -g -f elf64 -o main.o main.s
|
||||||
ld -o hello hello.o
|
ld -o main main.o
|
||||||
|
|
61
server.s
Normal file
61
server.s
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue