Course Overview
Welcome to Assembly 101! This course will teach you how computers work down to the lowest level and how to write and read the human readable version of the 1s and 0s they speak in - Assembly. The course starts with an introduction on how computers perform computations using transistors, logic gates and machine code (1s and 0s), then moves on to writing your own assembly programs. Students will start writing x86-16 assembly in a beginner-friendly 8086 emulator to learn the fundamentals and then move on to writing modern x86-64 assembly.
Key Topics Covered:
- How computers work at a low level
- Numbering systems: Decimal, Hex and Binary
- Setting up an assembly development environment
- x86 Registers, Flags and Pointers
- x86 Instruction Set
- Learning x86 fundamentals by writing x86-16 assembly programs
- Writing modern x86-64 assembly
- Explore memory safety and learn about writing shellcode and exploiting stack overflows.
Prerequisites
Programming 100: Fundamentals and Linux 100: Fundamentals, or equivalent knowledge!
Students should have a basic understanding and familiarity of programming with any high-level language.
System Requirements
Students will need a computer capable of running and x86-64 virtual machine. The first half of the course will use an emulator that can be run on most architectures, however the second half of the course will focus on x86-64 development without the use of an emulator.
Assembly 101: Course Objectives
- Understand how computers work at a low-level.
- Learn the fundamentals of x86 assembly.
- Read and write simple to medium complexity x86 assembly programs.
Who Should Take Assembly 101?
This course is geared towards complete beginners to assembly. While the course focuses on writing x86 assembly, the key takeaways for the course are an understanding of how computers work at a low level, what happens to higher level code once it is compiled and an understanding of what assembly code does. These takeaways serve as an excellent foundation for anyone looking to learn reverse engineering, malware analysis, binary exploitation, security research and even exploit development.
Assembly 101 Curriculum - 12+ Hours
- 👨🏫8086 Memory Segmentation (8:00)
- 🖥️MOV in/out of memory (8:14)
- 👨🏫Endianness (6:27)
- 🖥️Data Directive (14:06)
- 🖥️Hello World! (9:05)
- 🖥️Pointers (10:24)
- 🖥️The Stack (9:59)
- 1️⃣0️⃣1️⃣0️⃣Code Challenge (Don't Print This. Print This.) (5:33)
- 1️⃣0️⃣1️⃣0️⃣Code Challenge Solution Code
- ✏️Check-In Quiz
- 🖇️Section Code Samples
- 👨🏫Section Intro (3:14)
- 👨🏫AMD64 Programmer's Manual (4:04)
- x86-16 to 32 to 64 Register Changes (12:55)
- 🖥️Revisiting helloworld.c (10:38)
- 🖥️Assembling and Linking (7:47)
- 🖥️Using GDB (11:02)
- 🖥️Function Epilogues and Prologues (9:22)
- 🖥️Position Independent Code (11:23)
- 🖥️Syscall (4:59)
- 🖥️Write Syscall (12:39)
- 🖥️Using Make (7:13)
- 🖥️Read Syscall (11:15)
- 🖥️NASM (6:02)
- ✏️Check-In Quiz
- 🖇️Section Code Samples
- 👨🏫AMD64 System V Application Binary Interface (12:44)
- 🖥️x86-64 Linux ASM Boilerplate (3:26)
- 🖥️Interacting With Memory (14:05)
- 🖥️Memory Alignment (9:32)
- 🖥️Functions and Global Variables (8:00)
- 🖥️Passing Args Via Registers Part 1 (5:13)
- 🖥️Passing Args Via Registers Part 2 (6:38)
- 🖥️Passing Args Via Stack (11:18)
- 1️⃣0️⃣1️⃣0️⃣Coding Challenge (Don-t Print X) (9:13)
- 1️⃣0️⃣1️⃣0️⃣Coding Challenge Solution Code
- ✏️Check-In Quiz
- 🖇️Section Code Samples
- 🖥️Reviewing Stack Overflow Source Code (10:55)
- 🖥️Investigating Stack Overflow with GDB (6:50)
- 🖥️Basic Stack Overflow Exploit (11:54)
- 🖥️Mitigating Stack Overflow Vulnerability (17:09)
- 🖥️Writing Shellcode Part 1 (11:08)
- 🖥️Writing Shellcode Part 2 (9:44)
- 🖥️Avoiding Bad Characters (8:01)
- 🖥️Disabling Memory Corruption Protections (11:39)
- 🖥️Stack Smashing with Shellcode (13:44)
- 🖥️Reversing Shellcode (2:39)
- 1️⃣0️⃣1️⃣0️⃣Coding Challenge (Privilege Escalation) Details and Hints (2:08)
- 1️⃣0️⃣1️⃣0️⃣Coding Challenge (Privilege Escalation) Solution (19:38)
- ✏️Check-In Quiz
- 🖇️Section Code Samples
About the Instructor: Andrew Bellini
Welcome Everyone! My name is Andrew Bellini and I sometimes go as DigitalAndrew on social media. I’m an electrical engineer by trade with a bachelor’s degree in electrical engineering and am a licensed Professional Engineer (P. Eng) in Ontario, Canada. While my background and the majority of my career has been in electrical engineering, I am also an avid and passionate ethical hacker. In addition to being an instructor I am also a longtime student of TCM, and their courses helped me transition my career to working as a technical trainer for a cybersecurity company.
In addition to my love for all things ethical hacking, cybersecurity, CTFs and tech I also am a dad, play guitar and am passionate about the outdoors and fishing.
Hope you enjoy the course!
Follow Andrew on social media:
This course is included in our
All-Access Membership
starting at $29.99/month
Access the Assembly 101 course and our full course catalog when you enroll in our All-Access Membership.