You don’t need a computer science degree. You don’t need to already know assembly. You need curiosity and the patience to stare at strange things until they start making sense.
Before You Start
Most Ghidra tutorials do one of two things.
They either dump every single panel and button on you in the first five minutes you end up memorizing UI locations and understanding nothing. Or they skip straight to “load this firmware, find this function, done” you get the answer but not the thinking.
This series is different.
I wrote every part while figuring it out myself. Every time I got confused and I got confused a lot I documented it. Because that confusion is the actual learning. A polished tutorial that hides the confusion is lying to you about what reverse engineering actually feels like.
We start from the very first question: what even is this binary file, and how does Ghidra know what to do with it? Then we go deeper. x86 assembly. ARM. Bare-metal STM32 firmware where there is no main() and no operating system. Real router firmware with real vulnerabilities. Windows PE binaries. And finally Ghidra’s advanced features that most people never find.
There is one more thing I need to say. AI tools are everywhere and they are useful. But if you use them to explain every line of disassembly before you have tried to understand it yourself, you will build a dependency that never turns into skill. You will be copy-pasting output forever and calling it reversing. This series is designed to make you dangerous on your own. Use AI to verify not to replace your thinking.
By the end, you will not just know how to use Ghidra. You will know how to think when you are staring at an unknown binary with no labels, no source code, and no one to ask.
Let’s go.
How to Use This Index
- Parts are released progressively. If a part has no link, it has not been published yet.
- Work through phases in order. Each phase builds on the last.
Satellite Articles appear throughout standalone pieces you should read at the marked moment. Not numbered in the series but required reading.- Every part links to the official Ghidra documentation or architecture reference it uses.
- Stuck? Re-read the previous part before moving forward.
- Bookmark this page it is your home base.
Series Overview
| Phase | Theme | Parts |
|---|---|---|
| Ghidra From Zero Installation, Interface, First Binary | 1 – 6 | |
| Reading Disassembly x86 in Depth | 7 – 14 | |
| ARM Architecture, ELF, Bare-Metal, STM32 | 15 – 26 | |
| Windows PE Switching Worlds | 27 – 33 | |
| Real IoT Firmware MIPS, Extraction, Vulnerabilities | 34 – 44 | |
| Ghidra’s Hidden Power Scripts, Plugins, Automation | 45 – 52 | |
| Advanced Topics Obfuscation, Emulation, Research | 53 – 60 |
Phase 1 - Ghidra From Zero
Before you load a binary, you need to understand what you are actually doing.
Most people skip this and dive straight in. Don’t. The confusion in Phase 2 almost always traces back to something skipped here. We install Ghidra, learn every window, load our first binary, and understand what auto-analysis actually did not just that it happened.
Official Reference: Ghidra Getting Starte ghidra-sre.org
| # | Title | Status |
|---|---|---|
| Part 1 | What Is Ghidra and Why Should I Care? | |
| Part 2 | Installing Ghidra Java, Download, First Launch | |
| Part 3 | The CodeBrowser Every Window Explained | |
| Part 4 | Importing Your First Binary What Ghidra Detects and How | |
| Part 5 | Finding Your Way Around Strings, XREFs, Navigation | |
| Part 6 | Ghidra Projects Saving, Exporting, and Organizing Analysis |
Read after Part 4: What is an ELF File? Magic Bytes and Headers Explained (coming soon)
Read after Part 4: Unknown Binary — How to Identify Any File Format From Raw Bytes (coming soon)
Phase 2 - Reading Disassembly: x86 in Depth
Navigation was Phase 1. Comprehension is Phase 2.
You can find main(). Now you need to understand it. This phase teaches you to read what Ghidra shows registers, instructions, the stack, the decompiler, data types, control flow, and how to modify binaries. We stay on x86 because it is the most documented architecture for learning. Phase 3 breaks everything, so we build strong foundations here.
Read before Part 7: x86 Assembly Quick Reference for Ghidra Users (coming soon)
| # | Title | Status |
|---|---|---|
| Part 7 | x86 Registers and the CPU Model What Ghidra Shows You | |
| Part 8 | The Stack How Functions Use Memory | |
| Part 9 | Reading Instructions The 20 You Will See Everywhere | |
| Part 10 | The Decompiler Power and Lies | |
| Part 11 | Data Types, Pointers, and Structures in Ghidra | |
| Part 12 | Control Flow Conditions, Loops, and the Function Graph | |
| Part 13 | Cross-References Following Data and Code Relationships | |
| Part 14 | Patching Binaries in Ghidra Modify, Export, Run |
Phase 3 - ARM: Architecture, ELF, Bare-Metal, STM32
Everything you learned in Phase 2 still applies. It just looks completely different.
ARM is what runs most IoT devices cameras, routers, embedded controllers. When you load ARM firmware for the first time, main() might not exist. Registers have different names. There is something called Thumb mode that will silently destroy your disassembly if you don’t know about it. And in bare-metal firmware there is no OS, no standard library, and the hardware itself becomes part of what you analyze. This is the largest phase because ARM is the most important architecture for IoT security work.
Read before Part 15: ARM vs x86 A Reverse Engineer’s Comparison (coming soon)
Read before Part 15: Cross-Compiling for ARM on Linux Complete Setup (coming soon)
Read before Part 18: What is Thumb and Thumb-2 Mode? (coming soon)
Read before Part 19: ARM Memory Architecture Cortex-M to Application Processors (coming soon)
Read before Part 19: STM32 for Security Researchers What You Need to Know Before Ghidra (coming soon)
| # | Title | Status |
|---|---|---|
| Part 15 | ARM Architecture for Reverse Engineers The Mental Model | |
| Part 16 | ARM Instruction Set What Changes From x86 | |
| Part 17 | Loading ARM ELF in Ghidra Import, Analysis, First Look | |
| Part 18 | Thumb Mode Why Addresses End in +1 and What It Means | |
| Part 19 | Bare-Metal ARM No main(), No OS, No Rules | |
| Part 20 | Loading a .bin File in Ghidra Manual Configuration | |
| Part 21 | STM32 Memory Architecture Flash, RAM, Peripherals in Ghidra | |
| Part 22 | SVD Files Making Peripheral Registers Readable | |
| Part 23 | Interrupt Handlers and the Vector Table in Depth | |
| Part 24 | HAL and CMSIS Patterns Reading Firmware Libraries | |
| Part 25 | Reading a Complete STM32 Firmware Full Workflow | |
| Part 26 | ARM Calling Convention Variations and Edge Cases |
Phase 4 - Windows PE: Switching Worlds
The binary format changes. Your reverse engineering instinct does not.
Everything from Phase 2 transfers. What changes is the binary container format, the Windows OS layer, different calling conventions, and the import table model. PE analysis is essential for Windows malware, Windows-based embedded systems, and any time you encounter a .exe or .dll you need to understand.
Read before Part 27: What is a PE File? Windows Binary Headers Explained (coming soon)
| # | Title | Status |
|---|---|---|
| Part 27 | PE Format Reading a Windows Binary Header | |
| Part 28 | Loading PE in Ghidra What Auto-Analysis Finds | |
| Part 29 | Windows x64 Calling Convention | |
| Part 30 | Import Table Deep Dive Reading Intent From Imports | |
| Part 31 | x86 vs x64 in Ghidra What Changes in the Listing | |
| Part 32 | Anti-Analysis in PE Binaries Packing, Obfuscation, String Encryption | |
| Part 33 | Capstone: Reverse a Complete Windows Crackme |
Phase 5 - Real IoT Firmware: MIPS, Extraction, Vulnerabilities
No more training wheels. This is what it actually looks like.
Real router firmware. No source code. MIPS or ARM. A filesystem you have to extract yourself. Stack overflows, command injections, hardcoded credentials the same vulnerability classes that become CVEs. The difference between this phase and everything before it is that there is no answer key. You find what you find.
Read before Part 34: IoT Filesystem Formats Squashfs, JFFS2, Cramfs (coming soon)
Read before Part 36: MIPS for IoT Reverse Engineers Complete Reference (coming soon)
Read before Part 37: QEMU for IoT Research Running ARM and MIPS Without the Hardware (coming soon)
| # | Title | Status |
|---|---|---|
| Part 34 | IoT Firmware Basics What You Are Actually Analyzing | |
| Part 35 | Extracting Firmware Filesystems Squashfs, JFFS2, Cramfs | |
| Part 36 | MIPS Architecture in Ghidra | |
| Part 37 | QEMU Running IoT Binaries Without the Hardware | |
| Part 38 | Finding Dangerous Functions The Sink Analysis Approach | |
| Part 39 | Stack Overflow in Real Router Firmware Complete Analysis | |
| Part 40 | Command Injection in CGI Binaries | |
| Part 41 | Hardcoded Credentials and Backdoors Finding Them in Firmware | |
| Part 42 | Firmware Version Diffing Finding What a Patch Fixed | |
| Part 43 | Memory Corruption in IoT Exploitation Concepts | |
| Part 44 | Full IoT Firmware Analysis Workflow End to End |
Phase 6 Ghidra’s Hidden Power: Scripts, Plugins, Automation
Most people use 20% of Ghidra. This phase is the other 80%.
Scripting. Advanced decompiler techniques. Bulk firmware analysis. Plugins that transform what Ghidra can do. Memory emulation. Collaborative analysis with a team. Version tracking for 1-day research. These are the features that separate someone who opened Ghidra once from someone who actually does research with it.
| # | Title | Status |
|---|---|---|
| Part 45 | Ghidra Scripting Python and Java Automation | |
| Part 46 | Advanced Scripting Bulk Firmware Analysis | |
| Part 47 | Finding Offsets What Exploit Developers Need | |
| Part 48 | Version Tracking Deep Dive Advanced Diffing | |
| Part 49 | Plugins and Extensions The Essential Toolkit | |
| Part 50 | Decompiler Deep Dive Making It Work Better | |
| Part 51 | Collaborative Analysis Ghidra Server | |
| Part 52 | Memory Simulation and Emulation in Ghidra |
Phase 7 - Advanced Topics
The topics that appear in serious firmware analysis and real security research.
This phase covers obfuscation techniques and how to beat them, encrypted firmware, UEFI analysis, Android native libraries, custom binary protocols, and the full vulnerability research workflow from finding a bug to filing a CVE. We also close the loop the final part brings back the Mirai botnet we analyzed in an earlier series, but this time through Ghidra’s eyes.
| # | Title | Status |
|---|---|---|
| Part 53 | Obfuscation Techniques and How to Beat Them | |
| Part 54 | Encrypted Firmware Approaching Encrypted Targets | |
| Part 55 | UEFI and BIOS Firmware Analysis in Ghidra | |
| Part 56 | Android Native Libraries .so Files in Ghidra | |
| Part 57 | Custom Protocols and Binary Parsers | |
| Part 58 | Vulnerability Research Workflow From Firmware to CVE | |
| Part 59 | Ghidra for IoT Malware Analysis Mirai Revisited | |
| Part 60 | Where to Go From Here The Full RE Landscape |
Satellite Articles
These are standalone pieces linked at the right moment throughout the series. They are not numbered parts but they are required reading when referenced.
| Title | Read Before | Status |
|---|---|---|
What is an ELF File? Magic Bytes, Headers, and e_machine |
Phase 1, Part 4 | |
| Unknown Binary How to Identify Any File Format From Raw Bytes | Phase 1, Part 4 | |
| x86 Assembly Quick Reference for Ghidra Users | Phase 2, Part 7 | |
| ARM vs x86 A Reverse Engineer’s Comparison | Phase 3, Part 15 | |
| Cross-Compiling for ARM on Linux Complete Setup | Phase 3, Part 15 | |
| What is Thumb and Thumb-2 Mode? | Phase 3, Part 18 | |
| ARM Memory Architecture Cortex-M to Application Processors | Phase 3, Part 19 | |
| STM32 for Security Researchers Before You Open Ghidra | Phase 3, Part 19 | |
| What is a PE File? Windows Binary Headers Explained | Phase 4, Part 27 | |
| IoT Filesystem Formats Squashfs, JFFS2, Cramfs | Phase 5, Part 34 | |
| MIPS for IoT Reverse Engineers Complete Reference | Phase 5, Part 36 | |
| QEMU for IoT Research Running ARM and MIPS Without Hardware | Phase 5, Part 37 |