Provides an introduction to and overview of automatic software diversity techniques that, in one way or another, use randomization to greatly increase the difficulty of exploiting the vast amounts of low-level code in existence. The book introduces the many, often complementary, ways that one can diversify attack surfaces and provides an accessible guide to more than two decades of research.