50 lines
813 B
NASM
50 lines
813 B
NASM
format ELF64 executable
|
|
|
|
STDOUT = 1
|
|
HAPPY_EXIT_CODE = 0
|
|
SYSCALL_EXIT = 60
|
|
SYSCALL_WRITE = 1
|
|
SYSCALL_SOCKET = 41
|
|
AF_INET = 2
|
|
SOCK_STREAM = 1
|
|
|
|
macro print buf, len
|
|
{
|
|
mov rax, SYSCALL_WRITE ; 1 -> write, which takes three arguments (below)
|
|
mov rdi, STDOUT
|
|
mov rsi, buf
|
|
mov rdx, len
|
|
syscall
|
|
}
|
|
|
|
macro exit code
|
|
{
|
|
mov rax, SYSCALL_EXIT
|
|
mov rdi, code
|
|
syscall
|
|
}
|
|
|
|
macro socket domain, type, protocol
|
|
{
|
|
mov rax, SYSCALL_SOCKET
|
|
mov rdi, domain
|
|
mov rsi, type
|
|
mov rdx, protocol
|
|
syscall
|
|
}
|
|
|
|
segment readable executable
|
|
entry main
|
|
main:
|
|
print msg, msg_len
|
|
socket AF_INET, SOCK_STREAM, 0
|
|
mov dword [socket_fd], eax
|
|
print [socket_fd], 32
|
|
exit HAPPY_EXIT_CODE
|
|
|
|
|
|
segment readable writeable
|
|
msg db "Starting web server!", 10
|
|
msg_len db $ - msg
|
|
socket_fd dd 0
|