C语言有界指针

有界指针是指指针的使用被限制在有效的区域内。比如说,现在有一个32个元素的数组,禁止对这个数组使用的指针访问数组前面或后面的任何内存。

C没有对这类指针提供直接支持。不过,程序员可以显式地确保这个限制得以执行,如下所示:

#define SIZE 32

char name[SIZE];
char *p = name;
if(name != NULL) {
    if(p >= name && p < name+SIZE) {
        // 有效指针,继续
    } else {
        // 无效指针,错误分支
    }
}

这种方法比较麻烦,相较而言,7.4节中讨论的静态分析可能会比较有用。

一种有趣的变化是创建一个指针检验函数(https://www.securecoding.cert.org/confluence/display/seccode/MEM10-C.+Define+and+use+a+pointer+validation+function),要这么做,必须知道初始的位置和范围。

另一种方法是利用ANSI-C和C++的边界模型检查工具(CBMC,http://www.cprover.org/cbmc/)。这个应用程序会对C程序做一些安全问题检查,然后发现数组边界和缓冲区溢出的问题。

注意 C++中的智能指针提供了一种模仿指针同时支持边界检查的方法,不幸的是,C没有智能指针。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程