C和C++安全编码(原书第2版)
上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提供应用程序的整个源代码,包括所有的库,它就可以保证不存在缓冲区溢出。