[ 介紹 ]
Rosecheckers(the ROSE CERT C Checkers)是CERT組識所提供免費的工具,用於對C/C++程式碼做靜態分析,執行後會顯示你的程式違反了CERT Secure Coding Standards裡的那些check rules。
CERT Secure Coding Standards提供了17種規則分類,每項定義都會有詳細的說明,正反面的範例,危險程度的分類,也會有人在討論,看著討論有時後更能體會出rule的真實性。rosecheckers是執行在Linux下的工具,使用的指令與gcc相同。
[ 心得 ]
使用起來比我想像中的還容易,我把一個project拿來當測試僅改下面兩行,就得到它不手軟的警句。
#CC=$(TOOLCHAINS_PATH_BIN)$(TOOLCHAINS_FILENAME_PREFIX)gcc$(FILE_EXT)
#CXX=$(TOOLCHAINS_PATH_BIN)$(TOOLCHAINS_FILENAME_PREFIX)g++$(FILE_EXT)
CC=/home/rose/workspace/rosecheckers/rosecheckers
CXX=/home/rose/workspace/rosecheckers/rosecheckers
[ 如何開始 ]
使用的方式有兩種,一是它們提供了Debian版本的VMware映像檔,另一是到GitHub抓下它的再建出環境。
1) VMware映像檔(rosebud-0.7)
2) Source Code on GitHub(rose.git)
我的使用方式採用VMware的版本透過Putty + WinSCP連進去操作。
[ Rules ]
SEI CERT C Coding Standard
1) Rule 01. Preprocessor (PRE)
2) Rule 02. Declarations and Initialization (DCL)
3) Rule 03. Expressions (EXP)
4) Rule 04. Integers (INT)
5) Rule 05. Floating Point (FLP)
6) Rule 06. Arrays (ARR)
7) Rule 07. Characters and Strings (STR)
8) Rule 08. Memory Management (MEM)
9) Rule 09. Input Output (FIO)
10) Rule 10. Environment (ENV)
11) Rule 11. Signals (SIG)
12) Rule 12. Error Handling (ERR)
13) Rule 13. Application Programming Interfaces (API)
14) Rule 14. Concurrency (CON)
15) Rule 48. Miscellaneous (MSC)
16) Rule 50. POSIX (POS)
17) Rule 51. Microsoft Windows (WIN)
- SEI CERT C++ Coding Standard
- SEI CERT Oracle Coding Standard for Java
- SEI CERT Perl Coding Standard
- Android Secure Coding Standard
[ 教學 ]
使用CERT提供的Debian VMware境環
- rosebud-0.7 rose帳戶的密碼是
roserose
。 - Linux版本資訊。
-uname -a
Linux rosebud 2.6.32-5-686 #1 SMP Mon Oct 3 04:15:24 UTC 2011 i686 GNU/Linux。
牛刀小試先確定rosecheckers能正常執行。
rosecheckers main.c
修改project makefile後用PuTTY連操作得到的結果。
上面的EXP12-C, DCL13-C, INT07-C, ARR02-C 分別表示的意思是:
EXP12-C: 違反Expressions第12-C項規定
DCL13-C: 違反Declarations and Initialization第13-C項規定
INT07-C: 違反Integers第07-C項規定
ARR02-C: 違反Arrays第2-C項規定
點進連結去看看,裡面寫的很詳細,也有正反兩個例子。
2. 下載GitHub上的rose.git自行建立
dougpuob@debian:~$ git clone https://github.com/rose-compiler/rose.git
我僅使用VMware的環境,人客們請自便。
Installing ROSE
http://rosecompiler.org/ROSE_HTML_Reference/installation.html
Alternatives GCC
// gcc:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.2 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30
// g++:
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.2 40
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.1 30
– END –