靜態程式碼掃描工具簡介

介紹一些常用的靜態程式碼掃描工具,由於我也是才使用,可能了解的不全面。另外,以下我說明的程式碼是使用C語言編寫的。

1 Flawfinder

簡介:在源程式碼中查找潛在的安全缺陷的軟體。

下載地址:Flawfinder Home Page (dwheeler.com)

image-20210427112623331

1)運行環境:Linux,如果要在Windows下使用需要使用Cygwin。

2)使用方式:這裡給出最簡單的使用方式,其餘參數請參考說明文檔。

下載之後,直接解壓,然後直接運行:

./flawfinder 程式碼所在目錄

image-20210427113628884

也可以使用重定向符將結果輸出到一個log中。

$ ./flawfinder ~/My_Cli/ >check.log

3)輸出結果

在輸出結果中,有檢查的統計:

image-20210427114427222

總共檢查了3771行程式碼,用時0.07秒,程式碼缺陷一共分為6個等級,0最低,5最高。

Hits@level: 表示各個缺陷等級檢測出的問題個數。

image-20210427133154935

每個缺陷都有一個含義說明,以及對應的編碼,編碼的含義可以在幫助文檔中查看。

image-20210427133345538

image-20210427133434099

4)注釋不檢測

如果有些程式碼缺陷是Flawfinder誤報的,我們希望不檢查這個缺陷,可使用以下兩種方式在程式碼中注釋,注釋之後將不會檢查這個缺陷。

image-20210427133736832

2 cppcheck

  1. 簡介

Cppcheck是一種程式碼缺陷靜態檢查工具。不同於編譯器以及其它分析工具,cppcheck只檢查編譯器檢

查不出來的bug,不檢查語法錯誤。Cppcheck將軟體缺陷從靜態源程式碼的角度劃分為12個檢查類,分別

給予檢測和定位,並賦予8種不同的級別,分別為none,error,warning,style,performance,

portability,information,debug。

下載地址:Cppcheck - A tool for static C/C++ code analysis

2)異常說明

各種異常的說明:

img:當程式碼被執行時,會有一些錯誤的行為(如:未定義行為、泄露);

img:當程式碼執行時,可能會有未定義的行為;

img:可能的錯誤,建議改為更健壯的寫法,例如:未使用的程式碼/變數/函數、總是為真/假、運算符優先順序。

img:使程式碼運行更快的建議。這些建議僅基於一些通用知識。通過修復這些差異,不確定會得到明顯的速度提升。

img:可移植性警告。例如,定義的方式,64位的可移植性等。

img:配置問題,如果你想得到這樣的輸出,那就沒問題,但需要更改cppcheck的配置。

3)使用方式

打開軟體,點擊」Analyze「,然後點擊"目錄",選擇我們需要檢查的程式碼目錄即可。

image-20210427134031898

可以通過勾選下圖中的圖標進行查看error、warning、style等消息類型

img

4)查看結果

點擊「查看」,選擇「統計」,可看到統計結果。點擊「全部展開」,可看到每個文件的掃描結果。

image-20210427134445237

也可選擇「文件」,然後選擇「保存結果到文件」,支援3種文件格式類型,我比較喜歡使用csv格式,方便查看。

image-20210427134710324

3 TscanCode

  1. 簡介

TscanCode是騰訊自研的一款靜態程式碼掃描工具,支援C++語言,C#,Lua語言,在發掘C++空指針,

越界、未初始化,C#空引用,Lua變數未初始化等比較有效。

下載地址:Tencent/TscanCode: A static code analyzer for C++, C#, Lua (github.com)

2)使用方式

打開軟體,選擇「掃描文件夾」即可。

image-20210427135709917

掃描完成後,會直接輸出彈出一個掃描結果的窗口,可以保存結果,僅支援xml格式。

image-20210427135616706

也可以直接雙擊結果,查看報錯的位置的程式碼。

image-20210427140024174

4)規格選擇

點擊「設置」,可查看程式碼掃描的規則,以及選擇規則。

image-20210427140227315

Tags: