Thèse soutenue

Vérification automatique de code bas-niveau : C, assembleur et binaire

FR  |  
EN
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

FR  |  
EN

Mots clés contrôlés

Résumé

FR  |  
EN

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.