Domanda

Come eseguire l'analisi in tanice usando la stecca?

Ho installato la stecca sul mio Ubuntu 12.04. Creato un piccolo caso di prova come di seguito:

#include<stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
    char a[10];
    strncpy(a,argv[1],10);
    printf(a);
    return 0;
}
.

Creato anche il file Splint.xh con il seguente contenuto:

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 @*/ ;
.

Creato anche il file Splint.mts con il seguente contenuto:

    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
.

Quindi infine ha eseguito lo strumento di splint con il comando:

    splint -mts splint prg001.c
.

DOVE PRG001.C è l'ingresso del campione, "Splint" si riferisce al file di Splint.mts e Splint.xh. Tutti i file sono nella directory corrente.

L'uscita che ho ricevuto è:

Splint 3.1.2 --- 21 ago 2012

PRG001.C: (in funzione principale) PRG001.C: 6: 1: formato Il parametro stringa a stampaF non è una costante di compilazione: un Il parametro del formato non è noto in compilazione-tempo. Questo può portare alla sicurezza vulnerabilità perché gli argomenti non possono essere controllati. (Uso -formatconst per inibire l'avvertimento) PRG001.C: 3: 14: parametro ARGC non utilizzato Un parametro funzione non viene utilizzato nel corpo della funzione. Se l'argomento. è necessario per il tipo di compatibilità o piani futuri, utilizzare / @unused @ / nel Dichiarazione degli argomenti. (Utilizzare -Paramuse per inibire l'avviso)

Controllo finito --- 2 Avvertenze del codice

Non vi è alcuna inclinazione di alcuna analisi taint nell'output. Qualcuno può aiutarmi a aiutarmi su come ottenere l'analisi in tanice fatta usando la stecca.

Grazie

È stato utile?

Soluzione

Il problema è stato con il file Splint.xh.

Cambia la printf in PrintFXXX e ha funzionato bene.

Ciò impliciò che la definizione standard sovrascrivesse il mio file .xh.Questo ha risolto il mio problema e ora la splint produce variabili contaminate e il flusso di taint.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top