bind to unix socket

This commit is contained in:
root 2025-05-04 14:42:56 +00:00
parent e855248606
commit e3ab67013e
2 changed files with 72 additions and 14 deletions

84
hello.s
View file

@ -1,27 +1,83 @@
global _start
; constants
SYS_WRITE equ 1
SYS_EXIT equ 60
STDOUT equ 1
SYS_READ equ 0
SYS_WRITE equ 1
SYS_SENDFILE equ 40
SYS_SOCKET equ 41
SYS_ACCEPT equ 43
SYS_BIND equ 49
SYS_LISTEN equ 50
SYS_EXIT equ 60
STDOUT equ 1
AF_UNIX equ 1
SOCK_STREAM equ 1
SECTION .data
hello db "Hello world!", 0x0a
hello db "Hello world!", 0x0a
hello_len equ $ - hello
server_path db "server.sock", 0x00
server_path_len equ $ - hello
sockaddr_len equ 110 ; $ man 7 unix
SECTION .bss
sockaddr resb sockaddr_len
SECTION .text
_start:
; syscall(SYS_WRITE, STDOUT, hello, hello_len);
mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, hello
mov rdx, hello_len
mov rax, SYS_WRITE
mov rdi, STDOUT
mov rsi, hello
mov rdx, hello_len
syscall
push rax
; syscall(SYS_EXIT, <sys_write return value> - hello_len);
mov rax, SYS_EXIT
pop rdi
sub rdi, hello_len
make_server:
mov rax, SYS_SOCKET
mov rdi, AF_UNIX
mov rsi, SOCK_STREAM
mov rdx, 0
syscall
push rax
call make_sockaddr
pop r10
mov rax, SYS_BIND
mov rdi, r10
mov rsi, sockaddr
mov rdx, sockaddr_len
syscall
mov rax, SYS_LISTEN
mov rdi, r10
mov rsi, 100
syscall
mov rax, SYS_ACCEPT
mov rdi, r10
mov rsi, 0
mov rdx, 0
syscall
push rax
exit:
mov rax, SYS_EXIT
pop rdi
syscall
make_sockaddr:
mov word [sockaddr], AF_UNIX
mov rax, 0
make_sockaddr__copy_server_path:
cmp rax, server_path_len
jge return
mov r10, [rax+server_path]
add rax, 2
mov [rax+sockaddr], r10
sub rax, 1
jmp make_sockaddr__copy_server_path
return:
ret

View file

@ -6,3 +6,5 @@ https://x64.syscall.sh/
https://web.stanford.edu/class/cs107/resources/x86-64-reference.pdf
https://ggbaker.ca/295/x86.html
https://josemariasola.github.io/reference/assembler/Stanford%20CS107%20Guide%20to%20x86-64.pdf
https://www.bencode.net/blob/nasmcheatsheet.pdf