2012-11-26 21 views
2

我正在通過Cyclone: A Safe Dialect of C爲PL類工作。該論文的作者解釋說,他們添加了一個特殊的「胖」指針,用於存儲邊界信息以防止緩衝區溢出。但是他們沒有指定對這個指針的檢查是靜態的還是動態的。他們給出的例子似乎意味着程序員必須記得檢查數組的大小,以檢查它們是否不超過緩衝區。這似乎開闢了編程錯誤的可能性,就像在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; 
} 
+0

對於靜態關於C的推理非常困難(Pascal Cuoq,他解答了你的問題,構建了與大多數相比表現相當好的靜態分析工具)。而對於那些靜態分析工具無法檢查的事情,您唯一的希望就是在程序可能犯錯的時刻進行運行時檢查。這裏是另一篇關於動態分析的論文,我認爲它比Cyclone更進一步:http://www.computer.org/csdl/proceedings/scam/2011/4347/00/4347a165-abs.html。本文使用由多個部分表示的「胖」指針,以便不會由於錯誤的大小而破壞C數據結構。 –

回答

1

「胖」指針支持終場前運行時算術界定 檢查。

Wikipedia通過Google搜索「胖指針」獲得。