From 2a59922c014b17eb408538fa581430ae8eae54a7 Mon Sep 17 00:00:00 2001 From: root <> Date: Sun, 18 May 2025 13:13:50 +0000 Subject: [PATCH] succeed at finding EAGAIN by experiment: -11 --- eagain.s | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 eagain.s diff --git a/eagain.s b/eagain.s new file mode 100644 index 0000000..07f7311 --- /dev/null +++ b/eagain.s @@ -0,0 +1,92 @@ +global _start + +; constants +SYS_WRITE equ 1 +SYS_SOCKET equ 41 +SYS_CONNECT equ 42 +SYS_SHUTDOWN equ 48 +SYS_FCNTL equ 72 +SYS_EXIT equ 60 +AF_UNIX equ 1 +SOCK_STREAM equ 1 +F_GETFL equ 3 +F_SETFL equ 4 +O_NONBLOCK equ 2048 +SHUT_RDWR equ 2 + +SECTION .data +server_path db "eagain.sock", 0x00 +server_path_len equ $ - server_path +sockaddr_size equ 2 + 108 ; $ man 7 unix + +SECTION .bss +sockaddr resb sockaddr_size +spam resb 0xffff + +SECTION .text + +_start: + mov rax, SYS_SOCKET + mov rdi, AF_UNIX + mov rsi, SOCK_STREAM + mov rdx, 0 + syscall + + mov r15, rax + + call nonblocking + call make_sockaddr + + mov rax, SYS_CONNECT + mov rdi, r15 + mov rsi, sockaddr + mov rdx, sockaddr_size + syscall + +loop: + mov rax, SYS_WRITE + mov rdi, r15 + mov rsi, spam + mov rdx, 0xffff + syscall + + cmp rax, 0 + jge loop + + mov rax, SYS_EXIT + mov rdi, 1 + syscall + +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