Assembly: Reading Machine Code
What your program actually became
For anyone who can write C and now wants to see what the compiler produced — and for anyone heading toward reverse engineering, exploit analysis or low-level debugging, where the source is not available and the binary is the only evidence. This course assumes a working Unix-like shell and, from the C course onwards, a C compiler and make. If you do not have those yet — or have never opened a terminal — the Setting Up course installs and verifies all of it first, and nothing here repeats that material.
Course preview
What you will be able to do
- Read x86-64 disassembly and follow what it does, instruction by instruction
- Name the registers, their widths, and which ones survive a function call
- Recognise compiler transformations: division by multiplication, loops replaced by arithmetic, lea used as maths
- Trace control flow through comparisons, conditional jumps and loops
- Follow the stack through a call, a frame and a recursive descent
- Use objdump and a debugger to examine a binary you did not build
Before you join
Course roadmap
English is available for every learning step.
This is the full learning route. Lessons build on earlier work; required checkpoints are the points where the route asks you to demonstrate it.
- 01
The program you wrote is not the program that runs
Lesson · 17 min
- 02
Sixteen registers and the names they answer to
Lesson · 18 min
Builds on: The program you wrote is not the program that runs
- 03
Moving data, and the instruction that does not move anything
Lesson · 18 min
Builds on: Sixteen registers and the names they answer to
- 04
Arithmetic, and the four bits it leaves behind
Lesson · 18 min
Builds on: Moving data, and the instruction that does not move anything
- 05
Two ways to write the same instruction
Lesson · 14 min
Builds on: Moving data, and the instruction that does not move anything
- 06
How an if becomes a jump
Lesson · 18 min
Builds on: Arithmetic, and the four bits it leaves behind
- 07
Finding the loop, and what became of it
Lesson · 18 min
Builds on: How an if becomes a jump
- 08
Recovering data layout from address arithmetic
Lesson · 18 min
Builds on: Finding the loop, and what became of it
- 09
How a function call actually works
Lesson · 17 min
Builds on: How an if becomes a jump
- 10
What a function builds before it starts working
Lesson · 19 min
Builds on: How a function call actually works
- 11
The agreement that lets separately compiled code work together
Lesson · 19 min
Builds on: What a function builds before it starts working
- 12
Capstone: measuring what a recursive call costs
Required checkpoint · 20 min
Builds on: The agreement that lets separately compiled code work together
- 13
The tools that read a binary for you
Lesson · 19 min
Builds on: What a function builds before it starts working
- 14
Capstone: reconstructing a function you have never seen
Required checkpoint · 22 min
Builds on: The tools that read a binary for you · Recovering data layout from address arithmetic
Learn with an account when access opens
Your CYBERSKILLS account will keep progress and checkpoint results together. Until then, this syllabus is here to help you choose the route that fits your goal.
Browse course previews