This document discusses techniques for exploiting stack-based buffer overflows on ARM devices when the stack is non-executable. It begins with background on ARM architecture and why traditional ret2libc attacks will not work. It then explains how the ARM calling convention allocates registers and discusses controlling the program counter. The main technique presented is "RET2ZP", which allows calling functions by manipulating registers rather than putting arguments on the stack. The document provides details of how RET2ZP can be used for both local and remote attacks to gain control of ARM devices.