Splintを使用して汚染分析を実行するにはどうすればよいですか?
Ubuntu12.04にSplintをインストールしました。以下のような小さなテストケースを作成しました。
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
char a[10];
strncpy(a,argv[1],10);
printf(a);
return 0;
}
また、次の内容でsplint.xhファイルを作成しました。
int printf (/*@untainted@*/ char *fmt, ...);
char *fgets (char *s, int n, FILE *stream) /*@ensures tainted s@*/ ;
char *strcat (/*@returned@*/ char *s1, char *s2) /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;
void strncpy (/*@returned@*/ char *s1, char *s2, size_t num) /*@ensures s1:taintedness = s1:taintedness | s2:taintedness @*/ ;
また、以下の内容でsplint.mtsファイルを作成しました。
attribute taintedness
context reference char *
oneof untainted, tainted
annotations
tainted reference ==> tainted
untainted reference ==> untainted
transfers
tainted as untainted ==> error "Possibly tainted storage used where untainted required."
merge
tainted + untainted ==> tainted
defaults
reference ==> tainted
literal ==> untainted
null ==> untainted
end
次に、最後に次のコマンドでスプリントツールを実行しました。
splint -mts splint prg001.c
prg001.cがサンプル入力である場合、「splint」はsplint.mtsおよびsplint.xhファイルを指します。すべてのファイルは現在のディレクトリにあります。
私が受け取った出力は次のとおりです。
スプリント3.1.2---2012年8月21日
prg001.c :(関数main内)prg001.c:6:1:printfへのフォーマット文字列パラメーターはコンパイル時定数ではありません:フォーマットパラメーターはコンパイル時に不明です。引数は型チェックできないため、これはセキュリティの脆弱性につながる可能性があります。(警告を禁止するには-formatconstを使用します)prg001.c:3:14:パラメーターargcは使用されません関数パラメーターは関数の本体で使用されません。型の互換性や将来の計画のために引数が必要な場合は、引数の宣言で/ @ unused@ /を使用してください。(警告を禁止するには-paramuseを使用します)
チェックが終了しました---2つのコード警告
出力に汚染分析のヒントはありません。Splintを使用して汚染分析を行う方法について誰かが私を助けてくれますか?
ありがとう