Splint Как выполнить анализ
-
11-12-2019 - |
Вопрос
Как выполнить приятный анализ с помощью шины?
Я установил шин на мою Ubuntu 12.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;
}
.
также создал файл 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
.
Затем, наконец, запустите инструмент Sprint с командой:
splint -mts splint prg001.c
.
Если PRG001.c - это ввод образца, «Splint» относится к файлу splint.mts и sprint.xh. Все файлы в текущем каталоге.
Выходная запись, которую я получил:
splint 3.1.2 --- 21 авг 2012
prg001.c: (в основной функции) prg001.c: 6: 1: Параметр форматирования String для printf не является постоянной времени компиляции: а. Параметр формата не известен при компиляционном времени. Это может привести к безопасности Уязвимости, потому что аргументы не могут быть проверены в типе. (Использовать -форматконтростота для ингибирования предупреждения) prg001.c: 3: 14: параметр ARGC не используется Параметр функции не используется в теле функции. Если аргумент нужен для совместимости типа или планов на будущее, использование / @unused @ / в Декларация аргумента. (Используйте «параму », чтобы ингибировать предупреждение)
Законченная проверка --- 2 Кодовые предупреждения
Нет намека на любой анализ на выходе. Может кто-нибудь, пожалуйста, помогите мне о том, как получить приятный анализ, сделанный с помощью шины.
Спасибо
Решение
Проблема была с файлом splint.xh.
Я изменил printf на printfxxx, и он работал нормально.
Это подразумевает, что стандартное определение перезаписывало мой файл .xh.Это решило мою проблему, и теперь разбиение выводы испорченные переменные и поток Taint.