Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Splintを使う基本チュートリアル

Splintを使う基本チュートリアル

  
 

A.splintは、Cプログラムのセキュリティ上の弱点を静的にチェックし、エラーを書くためのツールとしてsplintを紹介しています。 Splintは、未使用の変数、矛盾するタイプ、未定義の変数の使用、実行不可能なコード、戻り値を無視する、返されない実行パス、無限ループなど、さまざまなルーチンチェックを行います。同時に、それをより強力なチェックにするためにソースコードに追加の情報を追加することによって。一方、注釈は、ファイル内の関数、変数、パラメータ、および型の機能を前提とした定型化されたコメントです。

Second.plintのインストールダウンロードアドレス:

http://www.splint.org/downloads/splint-3.1.2.src.tgzソースパッケージのインストール:#tar zxvf splint- 3.1.2.src.tgz#cd splint-3.1.2#mkdir /usr /local /splint#./configure --prefix = /usr /local /splint#make install#vi〜/.bashrc add:export LARCH_PATH = /usr /local /splint /share /splint /libexport LCLIMPORTDIR = /usr /local /splint /share /splint /import#source〜/.bashrc#export PATH = /usr /local /splint /bin /splint:$ PATH 3 .splintの使用1. null参照エラーは、どのメモリアドレスも指していないポインタを参照するときにこのエラーが発生します、つまり、代入なしのポインタが使用されていますSplintは特別なコメントをサポートしています。たとえば、次のプログラムでは/* @ null @ * /を使用して* sの値がNULLになる可能性があることを示しています。

//Null.cchar firstChar1(/* @ null @ * /char * s){return * s;} char firstChar2(/* @ null @ * /char * s){if(s == NULL); '\\ 0'を返す。 return * s;} //ENDこのプログラムをsplintでスキャンすると、次のように出力されます。

#splint null.c Splint 3.1.1 --- 2005年4月28日null.c:(関数firstChar1内)null.c:3:11:nullの可能性があるポインタの間接参照s:* s null.c:1:35:記憶領域の状態がnullになっている可能性があります - - 1つのコードの警告が見つかりましたfirstChar1とfirstChar2の両方が、ポインタsがNULL値である可能性があることを示すNULL記述を使用しているため、splintはs値の使用状況をチェックします。したがって、firstChar2関数のポインタに対する警告メッセージは表示されません2.未定義変数エラーC言語では、使用する前に変数を定義する必要があります。エラー次の例で、/* @ in @ * /で記述されている変数は定義する必要があることを示し、/* @ out @ * /で記述されている変数は関数の実行後に定義されていることを示します。 Br>

//usedef.cextern void setVal(/* @ out @ * /int * x); extern int getVal(/* @ in @ * /int * x); extern int mysteryVal(int * x); Int dumbfunc(/* @ out @ * /int * x、int i){(i> 3)が* xを返す場合;そうでない場合(i> 1)getVal(x)を返す場合;(i == 0) )r Eturn mysteryVal(x); else {setVal(x); return * x;}} //ENDはsplintを使用してusedef.cをチェックします。

$ splint usedef.cSplint 3.1.1 --- 2005年4月28日usedef.c :(関数dumbfunc内)usedef.c:7:19:定義前に使用される値* xある実行パスの値に初期化されていない可能性がある右辺値が使用されます(警告を抑制するために-usedefを使用)。 :18:渡された記憶域xが完全に定義されていない(* xは未定義):getVal(x)パラメータから導出可能な記憶域、戻り値、またはグローバルが定義されていません未使用(警告を抑制するために-compdefを使用)usedef.c:11:22:渡された記憶域xが完全に定義されていない(* xは未定義):mysteryVal(x)検査終了--- 3コード警告//xはプログラムで定義されていないため、エラーは定義されていませんが、setVal()は/* @ out @ * /という記述を使用するため、setVal(x);では戻り値x;で未定義エラーは報告されません。型エラーCにはより多くのデータ型があり、それらの間にはいくつかのニュアンスがあります。型がチェックされます。

例1:

//bool.cint f(int i、char * s、bool b1、bool b2){if(i = 3)b1を返す。もし(!

Copyright © Windowsの知識 All Rights Reserved