介紹一些常用的靜態代碼掃描工具,由於我也是才使用,可能了解的不全面。另外,以下我說明的代碼是使用C語言編寫的。
1 Flawfinder
簡介:在源代碼中查找潛在的安全缺陷的軟件。
下載地址:Flawfinder Home Page (dwheeler.com)
1)運行環境:Linux,如果要在Windows下使用需要使用Cygwin,Cygwin官網:https://cygwin.com/index.html。
2)使用方式:這里給出最簡單的使用方式,其余參數請參考說明文檔。
下載之后,直接解壓,然后直接運行:
./flawfinder 代碼所在目錄
也可以使用重定向符將結果輸出到一個log中。
$ ./flawfinder ~/My_Cli/ >check.log
3)輸出結果
在輸出結果中,有檢查的統計:
總共檢查了3771行代碼,用時0.07秒,代碼缺陷一共分為6個等級,0最低,5最高。
Hits@level: 表示各個缺陷等級檢測出的問題個數。
每個缺陷都有一個含義說明,以及對應的編碼,編碼的含義可以在幫助文檔中查看。
4)注釋不檢測
如果有些代碼缺陷是Flawfinder誤報的,我們希望不檢查這個缺陷,可使用以下兩種方式在代碼中注釋,注釋之后將不會檢查這個缺陷。
2 cppcheck
- 簡介
Cppcheck是一種代碼缺陷靜態檢查工具。不同於編譯器以及其它分析工具,cppcheck只檢查編譯器檢
查不出來的bug,不檢查語法錯誤。Cppcheck將軟件缺陷從靜態源代碼的角度划分為12個檢查類,分別
給予檢測和定位,並賦予8種不同的級別,分別為none,error,warning,style,performance,
portability,information,debug。
下載地址:Cppcheck - A tool for static C/C++ code analysis
2)異常說明
各種異常的說明:
:當代碼被執行時,會有一些錯誤的行為(如:未定義行為、泄露);
:當代碼執行時,可能會有未定義的行為;
:可能的錯誤,建議改為更健壯的寫法,例如:未使用的代碼/變量/函數、總是為真/假、運算符優先級。
:使代碼運行更快的建議。這些建議僅基於一些通用知識。通過修復這些差異,不確定會得到明顯的速度提升。
:可移植性警告。例如,定義的方式,64位的可移植性等。
:配置問題,如果你想得到這樣的輸出,那就沒問題,但需要更改cppcheck的配置。
3)使用方式
打開軟件,點擊”Analyze“,然后點擊"目錄",選擇我們需要檢查的代碼目錄即可。
可以通過勾選下圖中的圖標進行查看error、warning、style等消息類型
4)查看結果
點擊“查看”,選擇“統計”,可看到統計結果。點擊“全部展開”,可看到每個文件的掃描結果。
也可選擇“文件”,然后選擇“保存結果到文件”,支持3種文件格式類型,我比較喜歡使用csv格式,方便查看。
3 TscanCode
- 簡介
TscanCode是騰訊自研的一款靜態代碼掃描工具,支持C++語言,C#,Lua語言,在發掘C++空指針,
越界、未初始化,C#空引用,Lua變量未初始化等比較有效。
下載地址:Tencent/TscanCode: A static code analyzer for C++, C#, Lua (github.com)
2)使用方式
打開軟件,選擇“掃描文件夾”即可。
掃描完成后,會直接輸出彈出一個掃描結果的窗口,可以保存結果,僅支持xml格式。
也可以直接雙擊結果,查看報錯的位置的代碼。
4)規格選擇
點擊“設置”,可查看代碼掃描的規則,以及選擇規則。