簡體   English   中英

靜態分析以檢測Visual Studio C ++ 2012上的緩沖區溢出

[英]Static Analysis to detect Buffer Overrun on Visual Studio C++ 2012

以下代碼將寫入內存中的無效區域,但沒有編譯錯誤。

int _tmain(int argc, _TCHAR* argv[])
{
    char* s1 = new char[10];
    for(int i=0;i<20;i++) s1[i]='a';
    cout << s1 << endl;
    return 0;
}

在運行時,該代碼以返回代碼0終止(打印20 a),然后在遇到0之前出現一些垃圾,但是我認為這非常危險,因為它可能污染/非法訪問內存中的其他區域。

有什么辦法可以在編譯時發現這種錯誤? 還是至少出現一個運行時異常,直接指向s1[i]='a'行?

按照其他帖子的建議設置/ RTC和/ GS標志沒有幫助。

運行Visual Studio代碼分析(ANALZYE->運行代碼分析)也不會產生任何結果。

這里發布了第三方工具列表: Windows上的C ++靜態代碼分析工具,但我希望有一種方法可以通過Visual Studio單獨檢測?

根據http://msdn.microsoft.com/zh-cn/library/8dbf701c.aspx,/GS (緩沖區安全性檢查)是在運行時執行的,而不是在編譯類型中執行的。

/ RTC(根據http://msdn.microsoft.com/zh-cn/library/8wtf2dfz.aspx )控制運行時檢查。 因此,這兩個開關都不是為對代碼進行靜態分析而設計的。 也就是說,他們不應該在編譯時檢測到您的問題。

我認為靜態代碼分析總體上仍處於研究階段,對於VS 2012提供全面的支持我會感到驚訝。

另一種可能性是,您嘗試檢測的特定類型的錯誤是數組越界錯誤。 緩沖區溢出可能不是執行搜索的正確關鍵字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM