  In this work, we evolve Assembly code for the CodeGuru competition. The goal
is to create a survivor -- an Assembly program that runs the longest in shared
memory, by resisting attacks from adversary survivors and finding their
weaknesses. For evolving top-notch solvers, we specify a Backus Normal Form
(BNF) for the Assembly language and synthesize the code from scratch using
Genetic Programming (GP). We evaluate the survivors by running CodeGuru games
against human-written winning survivors. Our evolved programs found weaknesses
in the programs they were trained against and utilized them. To push evolution
further, we implemented memetic operators that utilize machine learning to
explore the solution space effectively. This work has important applications
for cyber-security as we utilize evolution to detect weaknesses in survivors.
The Assembly BNF is domain-independent; thus, by modifying the fitness
function, it can detect code weaknesses and help fix them. Finally, the
CodeGuru competition offers a novel platform for analyzing GP and code
evolution in adversarial environments. To support further research in this
direction, we provide a thorough qualitative analysis of the evolved survivors
and the weaknesses found.
