Smokestack: Thwarting DOP Attacks with Runtime Stack Layout Randomization