From e3ab67013e6e086a3b871a50e9a14ae5937c3b4e Mon Sep 17 00:00:00 2001 From: root <> Date: Sun, 4 May 2025 14:42:56 +0000 Subject: [PATCH] bind to unix socket --- hello.s | 84 +++++++++++++++++++++++++++++++++++++++++++++---------- readme.md | 2 ++ 2 files changed, 72 insertions(+), 14 deletions(-) diff --git a/hello.s b/hello.s index 35dd483..3d8622c 100644 --- a/hello.s +++ b/hello.s @@ -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, - 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 diff --git a/readme.md b/readme.md index d88bd5c..64a06fc 100644 --- a/readme.md +++ b/readme.md @@ -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