Last active
June 4, 2019 20:40
-
-
Save ncfavier/888337c8e2dc220c81fda7c1d37fa06a to your computer and use it in GitHub Desktop.
GASton serves index.html on port 8080.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# to compile: | |
# gcc gaston.S -nostdlib -no-pie | |
#define SYS_WRITE 1 | |
#define SYS_OPEN 2 | |
#define SYS_CLOSE 3 | |
#define SYS_LSEEK 8 | |
#define SYS_SENDFILE 40 | |
#define SYS_SOCKET 41 | |
#define SYS_ACCEPT 43 | |
#define SYS_SENDTO 44 | |
#define SYS_RECVFROM 45 | |
#define SYS_BIND 49 | |
#define SYS_LISTEN 50 | |
#define SYS_SETSOCKOPT 54 | |
#define SYS_EXIT 60 | |
#define AF_INET 2 | |
#define SOCK_STREAM 1 | |
#define PROTO_TCP 6 | |
#define SOL_SOCKET 1 | |
#define SOL_TCP 6 | |
#define SO_REUSEADDR 2 | |
#define TCP_CORK 3 | |
#define O_RDONLY 0 | |
#define SEEK_SET 0 | |
#define SEEK_END 2 | |
#define MAX_QUEUE 10 | |
.global _start | |
_start: | |
mov $SYS_SOCKET, %rax | |
mov $AF_INET, %rdi | |
mov $SOCK_STREAM, %rsi | |
mov $0, %rdx | |
syscall | |
mov %rax, serverSocket | |
mov $SYS_SETSOCKOPT, %rax | |
mov serverSocket, %rdi | |
mov $SOL_SOCKET, %rsi | |
mov $SO_REUSEADDR, %rdx | |
mov $one, %r10 | |
mov $one_len, %r8 | |
syscall | |
mov $SYS_SETSOCKOPT, %rax | |
mov serverSocket, %rdi | |
mov $SOL_TCP, %rsi | |
mov $TCP_CORK, %rdx | |
mov $one, %r10 | |
mov $one_len, %r8 | |
syscall | |
mov $SYS_BIND, %rax | |
mov serverSocket, %rdi | |
mov $serverAddress, %rsi | |
mov $serverAddress_len, %rdx | |
syscall | |
mov $SYS_LISTEN, %rax | |
mov serverSocket, %rdi | |
mov $MAX_QUEUE, %rsi | |
syscall | |
loop: | |
mov $SYS_ACCEPT, %rax | |
mov serverSocket, %rdi | |
mov $0, %rsi | |
mov $0, %rdx | |
syscall | |
mov %rax, clientSocket | |
mov $SYS_RECVFROM, %rax | |
mov clientSocket, %rdi | |
mov $requestBuffer, %rsi | |
mov $requestBuffer_len, %rdx | |
mov $0, %r10 | |
mov $0, %r8 | |
mov $0, %r9 | |
syscall | |
mov $SYS_SENDTO, %rax | |
mov clientSocket, %rdi | |
mov $headers, %rsi | |
mov $headers_len, %rdx | |
mov $0, %r10 | |
mov $0, %r8 | |
mov $0, %r9 | |
syscall | |
mov $SYS_OPEN, %rax | |
mov $filename, %rdi | |
mov $O_RDONLY, %rsi | |
mov $0, %rdx | |
syscall | |
mov %rax, fileDescriptor | |
mov $SYS_LSEEK, %rax | |
mov fileDescriptor, %rdi | |
mov $0, %rsi | |
mov $SEEK_END, %rdx | |
syscall | |
mov %rax, fileSize | |
mov $SYS_LSEEK, %rax | |
mov fileDescriptor, %rdi | |
mov $0, %rsi | |
mov $SEEK_SET, %rdx | |
syscall | |
mov $SYS_SENDFILE, %rax | |
mov clientSocket, %rdi | |
mov fileDescriptor, %rsi | |
mov $0, %rdx | |
mov fileSize, %r10 | |
syscall | |
mov $SYS_CLOSE, %rax | |
mov fileDescriptor, %rdi | |
syscall | |
mov $SYS_CLOSE, %rax | |
mov clientSocket, %rdi | |
syscall | |
jmp loop | |
mov $SYS_CLOSE, %rax | |
mov serverSocket, %rdi | |
syscall | |
mov $SYS_EXIT, %rax | |
mov $0, %rdi | |
syscall | |
.data | |
serverAddress: | |
.word AF_INET | |
.word 0x901f | |
.int 0 | |
.zero 8 | |
serverAddress_len = . - serverAddress | |
headers: | |
.ascii "HTTP/1.1 200 OK\nServer: gaston\nContent-Type: text/html\n\n" | |
headers_len = . - headers | |
filename: | |
.asciz "index.html" | |
one: | |
.int 1 | |
one_len = . - one | |
.bss | |
serverSocket: | |
.quad 0 | |
clientSocket: | |
.quad 0 | |
fileDescriptor: | |
.quad 0 | |
fileSize: | |
.quad 0 | |
requestBuffer: | |
.zero 8192 | |
requestBuffer_len = . - requestBuffer |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment