format ELF64 executable STDERR = 2 STDOUT = 1 macro socket domain, type, protocol { mov rax, 41 mov rdi, domain mov rsi, type mov rdx, protocol syscall } macro bind sockfd, addr, addrlen { mov rax, 49 mov rdi, sockfd mov rsi, addr mov rdx, addrlen syscall } macro listen sockfd, bcklog { mov rax, 50 mov rdi, sockfd mov rsi, bcklog syscall } macro accept sockfd, addr, addrlen { mov rax, 43 mov rdi, addr mov rsi, addrlen syscall } macro write fd, buf, count { mov rax, 1 mov rdi, fd mov rsi, buf mov rdx, count syscall } macro exit ecode { mov rax, 60 mov rdi, ecode syscall } segment readable executable entry main main: write 1, msg, mlen socket 2, 1, 0 ; socket(domain, type, protocol) write 1, scm, scml cmp rax, 0 jl error write 1, ssm, ssmlen ; write(fd, buf, count) mov qword [sockfd], rax mov word [servaddr.sin_family], 2 ; AF_INET = 2 mov dword [servaddr.sin_addr], 0 ; INADDR_ANY = 0 mov word [servaddr.sin_port], 34865 ;int bind(int sockfd, const struct sockaddr *addr, ;socklen_t addrlen); bind [sockfd], servaddr.sin_family, sizeof_servaddr write STDOUT, bmsg, bmlen cmp rax, 0 jl error write STDOUT, sbm, sbmlen listen [sockfd], 5 write STDOUT, lmsg, lmlen ;int accept(int sockfd, struct sockaddr *_Nullable restrict addr, ;socklen_t *_Nullable restrict addrlen); accept [sockfd], cliaddr.sin_family, cliaddr_len cmp rax, 0 jl error write STDOUT, acm, acmlen exit 0 error: write STDERR, emsg, emlen exit 1 ; exit(error_code) segment readable writeable struc servaddr_in { .sin_family dw 0 .sin_port dw 0 .sin_addr dd 0 .sin_zero dq 0 } sockfd dq 0 servaddr servaddr_in sizeof_servaddr = $-servaddr.sin_family cliaddr servaddr_in cliaddr_len dd sizeof_servaddr msg db "INFO: Starting the Web Server...", 10 mlen = $-msg scm db "INFO: Creating a socket...", 10 scml = $-scm emsg db "ERROR: something went wrong", 10 emlen = $-emsg ssm db "INFO: socket creation successful!!", 10 ssmlen = $-ssm bmsg db "INFO: Binding the socket...", 10 bmlen = $-bmsg sbm db "INFO: Successfully bound up the socket!!", 10 sbmlen = $-sbm lmsg db "INFO: Listening to the socket...", 10 lmlen = $-lmsg acm db "INFO: Accepting the connection...", 10 acmlen = $-acm