Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cyclone是否对fat指针执行静态或动态检查?_C_Static Analysis_Bounds Checker - Fatal编程技术网

cyclone是否对fat指针执行静态或动态检查?

cyclone是否对fat指针执行静态或动态检查?,c,static-analysis,bounds-checker,C,Static Analysis,Bounds Checker,我正在为一门PL课程努力学习。论文作者解释说,他们添加了一个特殊的“fat”指针,用于存储边界信息,以防止缓冲区溢出。但是它们没有指定对这个指针的检查是静态的还是动态的。他们给出的示例似乎暗示程序员必须记住检查数组的大小,以检查它们是否超过缓冲区。这似乎打开了编程错误的可能性,就像在C中一样。我认为Cyclone的整个想法是让这些错误变得不可能。语言有支票吗?这会不会让编程错误变得更难 int strlen(const char ?s) { int i, n; if (!s) r

我正在为一门PL课程努力学习。论文作者解释说,他们添加了一个特殊的“fat”指针,用于存储边界信息,以防止缓冲区溢出。但是它们没有指定对这个指针的检查是静态的还是动态的。他们给出的示例似乎暗示程序员必须记住检查数组的大小,以检查它们是否超过缓冲区。这似乎打开了编程错误的可能性,就像在C中一样。我认为Cyclone的整个想法是让这些错误变得不可能。语言有支票吗?这会不会让编程错误变得更难

int strlen(const char ?s) {
    int i, n;
    if (!s) return 0;
    n = s.size; //what if the programmer forgets to do this.. or accidentally adds an n++;
    for (i = 0; i < n; i++,s++)
         if (!*s) return i;
    return n;
}
int strlen(常量字符){
inti,n;
如果(!s)返回0;
n=s.size;//如果程序员忘了这么做..或者不小心添加了一个n++;
对于(i=0;i
“Fat”指针支持具有运行时边界的指针算法 检查


通过谷歌搜索“胖指针”获得的信息。

很难静态地对C进行推理(Pascal Cuoq回答了您的问题,他构建的静态分析工具与大多数工具相比表现非常出色)。对于那些静态分析工具无法检查的事情,您唯一的希望是在程序可能出错的时刻进行运行时检查。这是另一篇关于动态分析的论文,我认为它比旋风更深入。本文使用了几个部分表示的“胖”指针,这样就不会因为大小错误而破坏C数据结构。