부목을 수행하는 방법 감염 분석
-
11-12-2019 - |
문제
를 수행하는 방법 감염 분석을 사용하여 부목?
내가 설치된 부목에서 Ubuntu12.04.만든 작은 테스트를 경우 아래와 같:
#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
char a[10];
strncpy(a,argv[1],10);
printf(a);
return 0;
}
도 만들어 부목입니다.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 @*/ ;
도 만들어 부목입니다.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 샘플 입력,"부목"참조하는 부목입니다.mts 고 부목입니다.xh 파일입니다.모든 파일에 현재 디렉터리입니다.
출력 받았다:
부목 3.1.2 --- 21 Aug2012
prg001.c:(에 주요 기능) prg001.c:6:1:형식 문자열을 매개 변수를 printf 되지 않은 컴파일 시정:a 형식을 매개 변수에 알려지지 않은 컴파일 시간입니다.이어질 수 있는 보안 취약하기 때문에 인수 될 수 없는 유형을 확인합니다.(사용 -formatconst 을 억제하는 경) prg001.c:3:14:매개 변수는 사용하지 않 argc 기능 매개 변수는 사용하지 않습니다 몸의 기능이다.는 경우 인수 필요한 유형에 대한 호환성 또는 미래의 계획,사용/@사용하지 않는@/에 인수를 선언입니다.(사용 paramuse 을 억제하는 경)
검사 완료---2 코드에 경고
이 없 힌트의 모든 더러 분석에서 출력됩니다.누군가가 나를 도와 주시겠습니하는 방법에 대한 감염 분석을 사용하여 수행됩 부목입니다.
감사
해결책
문제와 부목입니다.xh 파일입니다.
나는 변경 printf 을 printfxxx 고 있습니다.
이를 암시하는 표준을 정의를 덮어쓰 my.xh 파일입니다.이 내 문제를 해결하고 지금의 부목을 출력한 오염된 변수와의 교류를 더러운.