5
void main()
{
int x = 0;
int y = 1;
while (y < 10)
{
y = 2 * y;
x = x + 1;
}
printf ("%d",x);
printf ("%d",y);
II. Informations retirées et méthode utilisées
1. Les informations retirées.
Dans les sections de ce chapitre, il sera d’abord question des informations utiles qu’on peut
tirer du code source d’un programme et leurs représentations, souvent sous forme de graphes.
Ensuite, la technique du découpage (aussi appelé focalisation ou slicing) qui est utile entre
autres pour la détection de code malicieux sera présentée. Enfin, il sera question de l’étape de
vérification du programme en se servant des différentes informations recueillies.
L’arbre syntaxique.
Avant de tirer les informations pertinentes d’un programme, il est important, dans le cas d’un
code source, de vérifier que ce dernier respecte bien les règles de syntaxe du langage utilisé
pour l’écrire. La syntaxe d’un langage étant représentée par une grammaire, il est possible de
faire un arbre syntaxique du programme. C’est à partir de cet arbre que les informations
seront tirées puisque ce dernier écarte les détails inutiles reliés au code comme les
commentaires et l’indentation.
Dans le cas du code exécutable, il peut être nécessaire que le programme soit d’abord
désassemblé dans le but d’obtenir le code assembleur et ainsi obtenir un arbre syntaxique pour
ce type de code qui sera utilisé par la suite pour l’analyse.
Le graphe de flot de contrôle.
Il s’agit d’un graphe orienté dans lequel les noeuds représentent des instructions. Pour tout
noeud, un arc quitte vers chaque noeud pour lequel les instructions peuvent suivre
immédiatement celles du noeud courant. Il met en évidence les boucles, instructions
conditionnelles et branchements. Un chemin dans ce graphe représente un scénario
d’exécution du programme. Le programme suivant servira à
donner un exemple pour ce type de graphe (voir figure 2.1) et
sera également utilisé pour les autres graphes.