Hele vim z vlastní skušenosti, že nasekat chyby se daj všude, ale co mě osobně nejde do hlavy jak je něco takového možné, zvláště pokud lze vyhradit paměť pro data a paměť pro kód.
Vždyť přeci pokud chci přehrát mp3 stream, jen dekoduji obsah a ten se posléze pošle D/A převodníku. Nikde tam nefiguruje to, že by si procesor mohl splést data na zpracování s instrukcí. Přetečení zásobníku by se zde také nemělo vyskytnout.
Jde o heap overflow. Doporučuji se nejprve podívat na koncept virtual method table. Jde prakticky o to, že objekty v C++ obsahují pointer na tabulku pointerů na metody. Útočník díky chybě v kódu vedoucí k přepisu vybraného místa paměti nastaví pointer vybrané metody vybraného objektu (například destruktor) tak, aby směřoval na jeho vlastní kód.
https://en.wikipedia.org/wiki/Virtual_method_table
http://www.mathyvanhoef.com/2013/02/understanding-heap-exploiting-heap.html