Verified static analyzes for low-level languages

Abstract : Static analysis of programs enables to study the possible behaviours of programs without running them. Static analysers may be used to guarantee that the execution of a program cannot result in a run-time error. Such analysis tools are themselves programs: they may have bugs. So as to increase the confidence in the results of an analysis, we study in this thesis how the implementation of static analysers can be formally proved correct. In particular, we build abstract interpreters within the Coq proof assistant and prove them correct. Namely, we formally establish that analysis results characterize all possible executions of the analysed program. Such abstract interpreters are integrated to the formally verified CompCert compiler, when relevant ; this enables to guarantee that safety properties that are proved on source code also hold for the corresponding compiled code. We focus on the analysis of programs written in low-level languages. Namely, languages which feature little or no abstractions (variables, functions, objects, types…) or abstractions that the programmer is allowed to break. This hampers the task of a static analyser which thus cannot rely on these abstractions to yield precise results. We discuss in particular how to automatically recover the control-flow graph of binary self-modifying programs, and how to automatically prove that a program written in C (in which pointer arithmetic is pervasive) cannot produce a run-time error.
Document type :
Theses
Complete list of metadatas

Cited literature [94 references]  Display  Hide  Download

https://tel.archives-ouvertes.fr/tel-01285624
Contributor : Abes Star <>
Submitted on : Wednesday, March 9, 2016 - 3:08:10 PM
Last modification on : Friday, January 11, 2019 - 1:53:35 PM
Long-term archiving on : Monday, June 13, 2016 - 8:51:10 AM

File

LAPORTE_Vincent.pdf
Version validated by the jury (STAR)

Identifiers

  • HAL Id : tel-01285624, version 1

Citation

Vincent Laporte. Verified static analyzes for low-level languages. Programming Languages [cs.PL]. Université Rennes 1, 2015. English. ⟨NNT : 2015REN1S078⟩. ⟨tel-01285624⟩

Share

Metrics

Record views

473

Files downloads

290