Abstractions Relationnelles de la Mémoire pour une Analyse Compositionnelle de Structures de Données

par Hugo Illous

Projet de thèse en Informatique

Sous la direction de Xavier Rival et de Matthieu Lemerre.

Thèses en préparation à Paris Sciences et Lettres , dans le cadre de Sciences Mathématiques de Paris Centre , en partenariat avec DIENS - Département d'informatique de l'École normale supérieure (laboratoire) et de Ecole normale supérieure (établissement de préparation de la thèse) depuis le 01-10-2015 .


  • Résumé

    Les analyses statiques ont pour but d'inférer des propriétés sémantiques de programmes. Nous distinguons deux importantes classes d'analyses statiques : les analyses d'états et les analyses relationnelles. Alors que les analyses d'états calculent une sur-approximation de l'ensemble des états atteignables d'un programme, les analyses relationnelles calculent des propriétés fonctionnelles entre les états d'entrée et les états de sortie d'un programme. Les analyses relationnelles offrent plusieurs avantages, comme leur capacité à inférer des propriétés sémantiques plus expressives par rapport aux analyses d'états. De plus, elles offrent également la possibilité de rendre l'analyse compositionnelle, en utilisant les relations entrée-sortie comme des résumés de procédures, ce qui est un avantage pour le passage à l'échelle. Dans le cas des programmes numériques, plusieurs analyses ont été proposées qui utilisent des domaines abstraits numériques relationnels, pour décrire des relations. D'un autre côté, modéliser des abstractions de relations entre les états mémoires entrée-sortie tout en prenant en compte les structures de données est difficile. Dans cette Thèse, nous proposons un ensemble de nouveaux connecteurs logiques, reposant sur la logique de séparation, pour décrire de telles relations. Ces connecteurs peuvent exprimer qu'une certaine partie de la mémoire est inchangée, fraîchement allouée, ou désallouée, ou que seulement une seule partie de la mémoire a est modifiée (et de quelle manière). En utilisant ces connecteurs, nous construisons un domaine abstrait relationnel et nous concevons une analyse statique compositionnelle par interprétation abstraite qui sur-approxime des relations entre des états mémoires contenant des structures de données inductives. Nous avons implémenté ces contributions sous la forme d'un plug-in de l'analyseur Frama-C. Nous en avons évalué l'impact sur l'analyse de petits programmes écrits en C manipulant des listes chaînées et des arbres binaires, mais également sur l'analyse d'un programme plus conséquent qui consiste en une partie du code source d'Emacs. Nos résultats expérimentaux montrent que notre approche permet d'inférer des propriétés sémantiques plus expressives d'un point de vue logique que des analyses d'états. Elle se révèle aussi beaucoup plus rapide sur des programmes avec un nombre conséquent d'appels de fonctions sans pour autant perdre en précision.

  • Titre traduit

    Abstract Heap Relations for a Compositional Shape Analysis


  • Résumé

    Static analyses aim at inferring semantic properties of programs. We distinguish two important classes of static analyses: state analyses and relational analyses. While state analyses aim at computing an over-approximation of reachable states of programs, relational analyses aim at computing functional properties over the input-output states of programs. Relational analyses offer several advantages, such as their ability to infer semantics properties more expressive compared to state analyses. Moreover, they offer the ability to make the analysis compositional, using input-output relations as summaries for procedures, which is an advantage for scalability. In the case of numeric programs, several analyses have been proposed that utilize relational numerical abstract domains to describe relations. On the other hand, designing abstractions for relations over input-output memory states and taking shapes into account is challenging. In this Thesis, we propose a set of novel logical connectives to describe such relations, which rely on separation logic. This logic can express that certain memory areas are unchanged, freshly allocated, or freed, or that only part of the memory is modified (and how). Using these connectives, we build an abstract domain and design a compositional static analysis by abstract interpretation that over-approximates relations over memory states containing inductive structures. We implement this approach as a plug-in of the Frama-C analyzer. We evaluate it on small programs written in C that manipulate singly linked lists and binary trees, but also on a bigger program that consists of a part of Emacs. The experimental results show that our approach allows to infer more expressive semantic properties than states analyses, from a logical point of view. It is also much faster on programs with an important number of function calls without losing precision.