ASM Fundamentals Lessons.
A selection of lessons which teach the very fundamentals of the x64 assembly language by writing applications and then disassembling them. These lessons will provide you with a foundational skillset to reverse engineer a huge number of binaries.
1 - Registers and CPU Flags
An introduction into how the concept of variables in high level languages are represented in ASM, and some of the typical-use conventions surrounding those variables. Additionally we'll cover CPU flags, which help provide the CPU with context on how to execute subsequent instructions.
Start lesson »
2 - MOVing on to the basics of assembly
In this lesson we'll learn the building-block mnemonics that every ASM program uses. MOV
and CALL
etc.
Start lesson »
3 - The stack
In this lesson we'll cover how variables and data are persisted when registers are all in use, and how to interact with the stack from ASM.
Start lesson »
4 - Stack frames
In this lesson we'll cover what a stack frame is, how the RBP register works along with how applications know where to return to when a function return
s
Start lesson »
5 - Mathematical operations
In this lesson we'll cover how mathematical operations like PEMDAS are represented in ASM, along with some of the more confusing intricacies of this system
Start lesson »
6 - Binary mathematics and the logical operators
In this lesson we'll cover some elegant ways to perform mathematical operations on data without PEMDAS and we'll investigate the logical operators available to us in ASM.
Start lesson »
7 - Conditional statements
This lesson will demonstrate how conditional branching is performed in ASM. After this lesson you will have almost all of the tools needed to be an amazing reverse engineer
Start lesson »
8 - Loops
This lesson will demonstrate how iteration is achieved in ASM, including how high level language do / for / while
loops are implemented. After this lesson you will officially have enough ASM knowledge to go off and start reverse engineering non-trivial products!
Start lesson »
9 - Floating point numbers
The final and most challenging lesson in this fundamentals course - floating point numbers. Strap in, things are going to get weird.
Start lesson »
999 - Appendix: The junk drawer
This appendix will cover the stuff which didn't neatly fit into the other lessons, stuff like endianness, REP STOS
and some cool GDB commands to make your life easier.
Start lesson »
Challenges.
A small selection of challenge binaries have been created, graded by difficulty to reverse engineer.
Start challenges »