Stavrou, AngelosElsabagh, Mohamed2018-10-222018-10-222017https://hdl.handle.net/1920/11317Software systems are the backbone of modern life as they drive all computerized technologies. The ever-increasing size and complexity of today's systems makes them very challenging to properly design and test, resulting in an incomprehensible attack surface that leads to poor --- or altogether missing --- security countermeasures. Owing to implementation and testing deficiencies, security defenses are deployed at the network and host perimeters to increase cyber coverage against attacks. Unfortunately, the current poor state of systems security bespeaks that perimeter security is not effective, especially with the proliferation of mobile, cloud, and IoT services where the perimeter cannot be clearly defined.169 pagesenCopyright 2017 Mohamed ElsabaghComputer scienceCode-Reuse AttacksDenial-of-ServiceProbabilistic Finite AutomataReturn-Oriented ProgrammingRuntime Application Self-ProtectionStatic Binary AnalysisProtection from Within: Runtime Hardening Techniques for COTS BinariesDissertation