Memory corruption vulnerability is prevalent in software that are written using languages that lack memory safety features, e.g., C and C++. This has become a serious problem because the number of the attacks that exploit this vulnerability has increased. More specifically, this vulnerability allows control-flow-hijacking, a memory corruption attack that involves a well-known dangerous program stack. Several countermeasures have been proposed both in academia and the information technology industry to thwart such attacks. Some of these countermeasures have been implemented and used in practice. However, memory corruption attacks continue to be a serious problem because even these countermeasures are simply bypassed by new attacks. In this paper, we survey and classify protection and mitigation technologies that are especially pervasive in operating systems and compilers. This study aims to organize the pervasive countermeasures against these attacks. We present the existing countermeasures to address the current serious problem and propose modifications to these countermeasures that can be implemented in the future.