Azeria Labs

Recognizing the central role of embedded systems like ARM in the proliferation of the Internet of Things, I founded Azeria Labs to help people start prodding the security of ARM-based technologies and understand how to test the Internet of Things for critical vulnerabilities.

Assembly & Reversing

The ARM Assembly Basics section of this site is meant for people who want to get the familiar with the ARM Assembly language. These tutorials do not require prior knowledge about the ARM platform and are a good starting point for future ARM reverse engineers or security researchers.


The ARM Exploit Development section is for those who have enough knowledge about ARM assembly language and want to learn about vulnerability types and exploitation techniques.

Writing ARM Assembly

An introduction into ARM assembly basics covering the following topics: differences between Intel processor and ARM processor, how assembly works under the hood, and how to compile an ARM assembly program.

Data Types and Registers

Learn about ARM data types, the different types of ARM registers, and the usage of the CPSR (Current Program Status Register) in conditional execution.

ARM and Thumb Instruction Set

Learn about the differences between the ARM and Thumb instruction set and the most common instructions used for writing ARM assembly code.

Memory Instructions: Load and Store

This chapter describes LDR/STR instructions covering three offset forms: Immediate value as the offset, Register as the offset, and Scaled register as the offset.

Load and Store Multiple

This chapter describes how to Load and Store multiple values at once using the instructions LDM and STM. You will also learn how PUSH and POP are being used on ARM.

Conditional Execution and Branching

Learn how to use condition codes for conditional execution in ARM and Thumb mode and how to use conditional branch instructions to jump to other functions.

Stack and Functions

In this part we will look into a special memory region of the process called the Stack and explore how functions work on the ARM platform.

Writing ARM Shellcode

Learn how to trace system functions and how to use your knowledge about ARM assembly basics to write your first shellcode in ARM assembly. 

Learn More

Memory Corruptions

Learn how the memory layout of a process looks like and what memory corruptions are. This section covers Stack memory corruptions and Heap memory corruptions in more detail.

Learn More

TCP Bindshell in Assembly

Learn how to translate system functions into assembly and write TCP bind shellcode that is free of null bytes and can be used as shellcode for exploitation.

Learn More

Writing ARM Shellcode

These challenges are aimed at those of you who have no experience with reverse engineering or exploiting ARM binaries. They’re meant to introduce a few core concepts of binary exploitation.

Learn More