Content area
Memory errors have been around for the entirety of computing, starting as innocent mistakes on shared systems and eventually being leveraged for malicious reasons. These issues are more pronounced in C and C++ and thus there has been a widespread effort in the cybersecurity community to introduce protections to these languages (and associated compilers) to prevent memory errors. Many solutions proposed in the research literature are fairly effective in mitigating these problems. However, often the penalties of using these mechanisms do not provide the necessary insight for practitioners to make informed decisions on where to put their efforts. This thesis increases the scope of comparison to include modern and natively memory-safe languages when comparing performance penalties incurred by protection mechanisms for C/C++ programs. Standardized abstract tasks that can be implemented across languages give a more complete picture as to the true penalties of attempting to backport memory safety protections to a language that is unsafe by design, rather than using a language that had memory safety built in from the start. This thesis reviews the plausibility of using combinations of state-of-the-art memory safety mechanisms to achieve greater breadth of protection comparable to native memory safe languages while reviewing the resulting performance penalties of those combinations. Most protections did not lose their provided protections when combined with each other but performance degradation of these combinations does not scale linearly and is highly dependent on the pattern of memory usage.