
上QQ阅读APP看书,第一时间看更新
2.6.12 未来发展方向
未来的缓冲区溢出预防机制将超过惠普aCC、英特尔ICC和GCC编译器的现有能力,提供完整的覆盖,它通过把更深入的编译时检查和运行时检查相结合,并尽量减少所需的开销来实现这一目标。这样的机制之一是有安全保证的C/C++(Safe-Secure C/C++,SSCC)。
SSCC推断函数的要求和保证,并利用它们来发现是否满足所有要求。例如,在下面的函数中,n必须是一个s指针所指向的数组的合适大小。此外,返回的字符串保证以空字符结尾。
1 char *substring_before(char *s, size_t n, char c) { 2 for (int i = 0; i < n; ++i) 3 if (s[i] == c) { 4 s[i] = '\0'; 5 return s; 6 } 7 s[0] = '\0'; 8 return s; 9 }
为了发现和跟踪函数和源文件之间的要求和保证,SSCC使用了一个边界数据文件。图2.19显示了SSCC机制的一种可能的实现。
图2.19 一个可能的“有安全保证的”C/C++(SSCC)实现
如果给SSCC提供应用程序的整个源代码,包括所有的库,它就可以保证不存在缓冲区溢出。