The most basic HTTP Server written in 64-bit Assembly with NASM Assembler.
Currently it is extremely primitive and is only able to serve a single page, index.html
- Switching from MASM in Windows to NASM in Linux
- Basics of NASM and 64-bit Assembly
- How to use Linux system calls
- How to use Sockets
- Refresh on Assembly in general
- Basics of MakeFiles
- Dependencies
sudo apt-get -y install nasm build-essential
- Assembling+Linking+Running
make build && ./server
or./Run-NASM.sh server.asm
- Listening on http://127.0.0.1:3926
- Refactor duplicate code
- Make Utils.asm and export functions
- Proper 404 message handling
- 404 Error Page
- Multiple file handling for external css,js, more html files, images, etc.
- Proper socket shutdown
- POST method handling
- GNU C Sockets Documentation http://www.delorie.com/gnu/docs/glibc/libc_301.html
- Linux Socket Man Pages http://man7.org/linux/man-pages
- Linux System Calls Reference https://filippo.io/linux-syscall-table/
- Assembly(x86) Cheatsheet https://github.com/cirosantilli/x86-assembly-cheat
- Quick Reference https://www.cs.uaf.edu/2017/fall/cs301/reference/x86_64.html
- Connecting a socket in C http://wiki.linuxquestions.org/wiki/Connecting_a_socket_in_C
- IP to DWORD https://stackoverflow.com/questions/5328070/how-to-convert-string-to-ip-address-and-vice-versa
char strAddr[] = "127.0.0.1"
DWORD ip = inet_addr(strAddr); // ip contains 16777343 [0x0100007f in hex]
struct in_addr paddr;
paddr.S_un.S_addr = ip;
char *strAdd2 = inet_ntoa(paddr); // strAdd2 contains the same string as strAdd
- Converting hex+decimal https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
- System calls for network functionality http://beej.us/net2/html/syscalls.html
- AF_INET https://stackoverflow.com/questions/1593946/what-is-af-inet-and-why-do-i-need-it
- sys_setsockopt() http://pubs.opengroup.org/onlinepubs/009695399/functions/setsockopt.html
- HTTP Messages https://en.wikipedia.org/wiki/HTTP_message_body