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