Vérification automatique de code bas-niveau : C, assembleur et binaire
Auteur / Autrice : | Frédéric Recoules |
Direction : | Marie-Laure Potet |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 30/09/2021 |
Etablissement(s) : | Université Grenoble Alpes |
Ecole(s) doctorale(s) : | École doctorale mathématiques, sciences et technologies de l'information, informatique (Grenoble ; 199.-....) |
Partenaire(s) de recherche : | Laboratoire : Laboratoire Verimag (Grenoble) |
Jury : | Président / Présidente : Roland Groz |
Examinateurs / Examinatrices : Julia L. Lawall | |
Rapporteurs / Rapporteuses : Antoine Miné, Valérie Viêt Triêm Tông |
Mots clés
Mots clés contrôlés
Mots clés libres
Résumé
Les méthodes formelles pour le développement logiciel ont fait de grands progrès au cours des deux dernières décennies, au point que leur application dans les logiciels embarqués critiques pour la sûreté est un succès indéniable. Leur application aux logiciels non critiques est cependant l’un des défis majeurs à venir. Par exemple, les programmeurs C utilisent régulièrement l’assembleur embarqué (inline assembly)GNU pour réaliser des optimisations de bas niveau ou accéder aux primitives du système. Cela a généralement pour conséquence de rendre inopérants les analyseurs formels de pointe développés pour C. Ceci est doublement problématique puisque l’assembleur embarqué est notoirement difficile à écrire correctement : non seulement le morceau d’assembleur peut contenir des erreurs, mais il y a également un risque d’incompatibilité à l’interface entre C et assembleur, ce qui peut entraîner des bugs subtils et difficiles à trouver. Nous proposons d’attaquer le problème de la vérification de programmes C contenant de l’assembleur embarqué. Nous avons donc conçu deux techniques, nommées RUSTInA et TInA, basées sur une formalisation originale de l’assembleur embarqué, ainsi que de nouveaux algorithmes dédiés. RUSTInA est la première technique automatisée pour la vérification formelle de la conformité de l’interface de l’assembleur embarqué (c’est-à-dire l’absence d’incompatibilité entre le code et l’interface), avec la capacité supplémentaire de proposer des correctifs (prouvés) et des raffinements de code (optimisation). TInA est la première technique de traduction automatique, générique, adaptée aux outils de vérification formelle et digne de confiance qui transforme l’assembleur embarqué en code C sémantiquement équivalent, afin de tirer parti des analyseurs C existants. Des expériences intensives sur du code réel (tous les morceaux d’assembleur embarqué trouvés dans les paquets de Debian Jessie) ont permis de remonter 986 problèmes significatifs dans 54 paquets,dont 156 problèmes de 7 paquets qui ont été signalés avec succès et traités par les développeurs grâce à notre génération automatique de correctifs. Ces expériences montrent également la faisabilité de notre traduction « orientée pour la vérification »et ces avantages pour les analyseurs C de l’état de l’art.