This document discusses shellcode and system calls. It provides an overview of protection rings, syscalls, assembler, and other topics related to writing shellcode. It then demonstrates how to write simple shellcode to call the exit syscall using nasm and ld. It discusses replacing instructions to remove null bytes. Finally, it introduces how to go beyond simple exit shellcode to spawn an interactive shell using the fork and execve system calls.