Dieses Buch befasst sich mit dem Problem der automatischen Generierung von Exploits für Softwareschwachstellen. Eine formale Definition des Begriffs "Exploit" wird in Kapitel 2 gegeben, aber informell wird ein Exploit als eine Programmeingabe beschrieben, die zur Ausführung von bösartigem Code1 führt. Wir definieren bösartigen Code als eine Folge von Bytes, die von einem Angreifer in das Programm eingeschleust wird und die Sicherheit des Zielsystems untergräbt. Dies wird üblicherweise als Shellcode bezeichnet. Exploits dieser Art nutzen häufig Programmierfehler im Zusammenhang mit der Speicherverwaltung oder der Variablentypisierung in Anwendungen, die in C und C++ entwickelt wurden, aus. Diese Fehler können zu Pufferüberläufen führen, bei denen zu viele Daten in einen Speicherpuffer geschrieben werden, was zu einer Beschädigung von unbeabsichtigten Speicherplätzen führt. Ein Exploit nutzt diese Beschädigung aus, um sensible Speicherplätze zu manipulieren und so den Kontrollflussder Anwendung zu unterwandern.