|
@@ -0,0 +1,106 @@
|
|
1
|
+# Processeur sécurisé
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+Ce dépot regroupe les différents composants permettant d'exécuter un programme écrit dans un langage dérivé du C sur un processeur sécurisé contre le détournement du flot d'exécution par buffer overflow.
|
|
6
|
+
|
|
7
|
+La chaine est divisée en 5 étapes, 3 obligatoires et 2 facultatives.
|
|
8
|
+
|
|
9
|
+- Compiler le code avec le module *Compilateur*, cela va généré un premier code assembleur sans registres.
|
|
10
|
+- Facultatif : Interpreter ce code assembleur avec le module *Interpreteur* pour vérifier le comportement du programme.
|
|
11
|
+- Intégrer les registres dans le code assembleur avec le module *CrossAssembleur*.
|
|
12
|
+- Facultatif : Interpreter ce code assembleur avec le module *InterpreteurRegistres* pour vérifier le comportement du programme.
|
|
13
|
+- Exécuter le code sur le processeur sur un FPGA
|
|
14
|
+
|
|
15
|
+### Technologies :
|
|
16
|
+ - Compilateur : Lex Yacc (flex et bison), C (gcc), Makefile (make)
|
|
17
|
+ - Interpreteur : Lex Yacc (flex et bison), C (gcc), Makefile (make)
|
|
18
|
+ - CrossAssembleur : Lex Yacc (flex et bison), C (gcc), Makefile (make)
|
|
19
|
+ - CompilateurRegistre : Lex Yacc (flex et bison), C (gcc), Makefile (make)
|
|
20
|
+ - Processeur : Digilent FPGA Basys3 Artix7, Vivado (2016.4)
|
|
21
|
+
|
|
22
|
+### Mots clés :
|
|
23
|
+ Sécurité, BufferOverflow, BOF, Processeur, Compilateur, FPGA.
|
|
24
|
+
|
|
25
|
+# Utilisation
|
|
26
|
+
|
|
27
|
+Pour cloner le GIT **ET** les sous modules, veuillez utiliser la commande :
|
|
28
|
+``` bash
|
|
29
|
+git clone --recurse-submodules https://git.etud.insa-toulouse.fr/pfaure/PSI.git
|
|
30
|
+```
|
|
31
|
+
|
|
32
|
+Si vous avez cloné le dépot de manière "classique", vous pouvez utiliser les commandes suivantes afin de télécharger les sous-modules :
|
|
33
|
+``` bash
|
|
34
|
+git submodule init
|
|
35
|
+git submodule update
|
|
36
|
+```
|
|
37
|
+
|
|
38
|
+Un Makefile a été inclus afin de simplifier la chaine de compilation et d'exécution.
|
|
39
|
+
|
|
40
|
+## Versions
|
|
41
|
+Attention, il existe deux versions du projet, une avec la sécurité implémentée, et une sans. Soyez vigilent a avoir les modules dans la même version. Pour compilateur, il faut juste changer la valeur du *#define SECURISED ()*. Pour les interpreteurs et le processeur il s'agit de branches différentes.
|
|
42
|
+
|
|
43
|
+### Compilation du projet
|
|
44
|
+
|
|
45
|
+#### Compilation de tout le projet :
|
|
46
|
+``` bash
|
|
47
|
+make compile QUOI="all"
|
|
48
|
+```
|
|
49
|
+
|
|
50
|
+#### Compilation du Compilateur uniquement :
|
|
51
|
+``` bash
|
|
52
|
+make compile QUOI="compilateur"
|
|
53
|
+```
|
|
54
|
+
|
|
55
|
+#### Compilation de l'Interpreteur uniquement :
|
|
56
|
+``` bash
|
|
57
|
+make compile QUOI="interpreteur"
|
|
58
|
+```
|
|
59
|
+
|
|
60
|
+#### Compilation du CrossAssembleur uniquement :
|
|
61
|
+``` bash
|
|
62
|
+make compile QUOI="cross_assembleur"
|
|
63
|
+```
|
|
64
|
+
|
|
65
|
+#### Compilation de l'InterpreteurRegistres uniquement :
|
|
66
|
+``` bash
|
|
67
|
+make compile QUOI="interpreteur_registres"
|
|
68
|
+```
|
|
69
|
+
|
|
70
|
+### Exploitation du projet
|
|
71
|
+
|
|
72
|
+#### Réalisation de toute la chaine :
|
|
73
|
+``` bash
|
|
74
|
+make exec QUOI="all" SOURCE="prefixe_file"
|
|
75
|
+```
|
|
76
|
+Ceci va compiler le fichier **prefixe_file.c**, générer les fichiers assembleur et binaire, et modifier le code du processeur pour charger le programme. (Ne réalise pas les étapes facultatives)
|
|
77
|
+
|
|
78
|
+#### Compilation d'un fichier :
|
|
79
|
+``` bash
|
|
80
|
+make exec QUOI="compile" SOURCE="prefixe_file"
|
|
81
|
+```
|
|
82
|
+Ceci va compiler le fichier **prefixe_file.c** et générer le fichier assembleur orienté mémoire **prefixe_file.memasm**
|
|
83
|
+
|
|
84
|
+#### Interpretation d'un assembleur mémoire :
|
|
85
|
+``` bash
|
|
86
|
+make exec QUOI="interprete" SOURCE="prefixe_file"
|
|
87
|
+```
|
|
88
|
+Ceci va interpreter le fichier **prefixe_file.memasm**
|
|
89
|
+
|
|
90
|
+#### CrossAssemblage d'un assembleur mémoire :
|
|
91
|
+``` bash
|
|
92
|
+make exec QUOI="cross_assemble" SOURCE="prefixe_file"
|
|
93
|
+```
|
|
94
|
+Ceci va transformer le fichier **prefixe_file.memasm** en fichier **prefixe_file.regasm** afin d'intégrer les registres
|
|
95
|
+
|
|
96
|
+#### Interpretation d'un assembleur registre :
|
|
97
|
+``` bash
|
|
98
|
+make exec QUOI="interprete_registres" SOURCE="prefixe_file"
|
|
99
|
+```
|
|
100
|
+Ceci va interpreter le fichier **prefixe_file.regasm**
|
|
101
|
+
|
|
102
|
+#### Charger le programme dans le code VHDL du processeur :
|
|
103
|
+``` bash
|
|
104
|
+make exec QUOI="load" SOURCE="prefixe_file"
|
|
105
|
+```
|
|
106
|
+Ceci va injecter le code du fichier **prefixe_file.bin** dans la mémoire d'instruction
|