Formalisation d'un vérificateur dynamique de propriétés mémoire pour programmes C - Archive ouverte HAL Access content directly
Theses Year : 2022

Formalization of a Runtime Assertion Checker for Memory Properties of C Programs

Formalisation d'un vérificateur dynamique de propriétés mémoire pour programmes C

Dara Ly
  • Function : Author
  • PersonId : 1313783
  • IdRef : 273367862

Abstract

Runtime Assertion Checking is a program verification technique allowing to monitor programs during their execution, in order to check their validity with regards to some specification expressed as assertions, that is, formal annotations inserted in the source code. Assertions are translated into executable code through a process called instrumentation, thus implementing an inline monitor for the program. During execution, the monitor checks whether the program complies with its assertions, and aborts the execution in case of violation of an assertion. If no such violation occurs, the program’s functional behavior is unchanged.Instrumenting a program is a process whose implementation complexity is strongly related to the expressiveness of the annotation language. For C programs, the E-ACSL plugin of Frama-C (an opensource analysis platform for C programs), can express properties related to the memory state of the program, at the cost of a complex instrumentation.In this thesis, we present a formalization of the instrumentation process, that is, a description accurate enough to enable formal reasoning about the semantic properties of the instrumentation. The problem is modeled as a translation, from a source language with logical assertions, to a target language. The latter has no logical assertions, instead featuring a data-structure we call observation memory, which is designed to keep track of memory properties. We present an axiomatic characterization of observation memory, and use it to define the translation’s target language semantics. The translation is then proved correct with regards to the respective semantics of source and target languages.In addition, we study an optimization of the instrumentation through data-flow analysis. This optimization is implemented in E-ACSL in order to mitigate the performance costs of the instrumentation. The analysis aims at identifying a minimal subset of memory locations, whose instrumentation suffices for the monitor to evaluate the program’s assertions soundly. We define such an analysis and prove its soundness, meaning that restricting the instrumentation to memory locations computed by the analysis does not threaten the validity of the monitor’s verdicts.
La vérification d'assertions à l'exécution est une technique permettant de contrôler, lors de leur exécution, la conformité d'un programme vis-à-vis d'une spécification donnée sous forme d'annotations formelles : les assertions. Un procédé appelé instrumentation transforme les assertions en code exécutable, de manière à mettre en œuvre un moniteur en ligne pour le programme à vérifier. Le long de l'exécution du programme instrumenté, le moniteur contrôle la conformité du programme vis-à-vis des assertions, et, en cas de non-respect d'une assertion, met fin à l'exécution. Autrement, il laisse le comportement fonctionnel du programme inchangé. La complexité de mise en œuvre de l'instrumentation dépend largement des propriétés exprimables dans le langage d'annotation. Dans le cas de programmes en langage C, l'outil E-ACSL (greffon de Frama-C, une plateforme open-source d'analyse de code C), permet la vérification de propriétés relatives à l'état mémoire du programme, mais requiert pour cela une instrumentation complexe. La présente thèse est consacrée à la formalisation de cette instrumentation : il s'agit d'en donner une définition précise et d'étudier ses propriétés sémantiques. Nous proposons une modélisation du problème comme une traduction de programmes depuis un langage source, muni d'assertions logiques, vers un langage cible. Ce dernier est dépourvu d'assertions logiques, mais intègre une structure de données, appelée mémoire d'observation, dédiée au suivi des propriétés mémoire. Nous donnons une caractérisation axiomatique de la mémoire d'observation, et utilisons celle-ci pour définir la sémantique du langage cible de la transformation, dont nous montrons qu'elle est correcte vis-à-vis de la sémantique des langages concernés.Additionnellement, nous étudions l'optimisation de l'instrumentation par analyse de flot de données, technique mise en œuvre dans l'outil E-ACSL afin de réduire le surcoût en performance induit par l'instrumentation. L'analyse vise à déterminer un sous-ensemble d'emplacements mémoire minimal dont l'instrumentation permette au moniteur d'évaluer correctement les assertions du programme. Nous définissons une telle analyse, et prouvons qu'elle est sûre, au sens où limiter l'instrumentation aux seuls emplacements désignés par l'analyse ne compromet pas la validité des verdicts du moniteur.
Fichier principal
Vignette du fichier
2022ORLE1058_va.pdf (1.08 Mo) Télécharger le fichier
Origin : Version validated by the jury (STAR)

Dates and versions

tel-04301178 , version 1 (22-11-2023)

Identifiers

  • HAL Id : tel-04301178 , version 1

Cite

Dara Ly. Formalisation d'un vérificateur dynamique de propriétés mémoire pour programmes C. Langage de programmation [cs.PL]. Université d'Orléans, 2022. Français. ⟨NNT : 2022ORLE1058⟩. ⟨tel-04301178⟩
63 View
26 Download

Share

Gmail Facebook X LinkedIn More