[PDF][PDF] The C standard formalized in Coq

RJ Krebbers - 2015 - repository.ubn.ru.nl
2015repository.ubn.ru.nl
The C programming language was created by Thompson and Ritchie around 1970 as the
implementation language of the Unix operating system [Rit93]. The development of Unix
demonstrated the efficiency and portability of C, and following that success, C quickly
became a dominant general purpose programming language. More than 40 years after its
introduction, C remains among the most widely used programming languages in the world
(see the TIOBE [TIO] and IEEE [IEE15] indices). However, despite its continuing wide use, C�…
The C programming language was created by Thompson and Ritchie around 1970 as the implementation language of the Unix operating system [Rit93]. The development of Unix demonstrated the efficiency and portability of C, and following that success, C quickly became a dominant general purpose programming language. More than 40 years after its introduction, C remains among the most widely used programming languages in the world (see the TIOBE [TIO] and IEEE [IEE15] indices). However, despite its continuing wide use, C is also among the most bugprone programming languages in the world. As a result of weak static typing and the absence of run-time checks, it is very easy for C programs to have bugs that make the program crash or behave badly in other ways. Dangling pointers and NULL pointers can be dereferenced, arrays can be accessed outside their bounds, etc. A recent example is the Heartbleed bug in the widely used OpenSSL cryptography library where a buffer overflow allowed access to arbitrary data, which may contain passwords [MIT, CVE-2014-0160]. Heartbleed is not an incidental case where the unsafety of C has disastrous consequences. Wang et al.[WCC+ 12] have shown that the unsafety of C is a serious problem. In safer programming languages than C, bugs like these are less likely to occur, but due to the performance, control and portability benefits of C, the use of C and C derivatives like C++ remains widespread. Formal verification is a promising approach to retain the performance, control and portability benefits of C but without the dangers of its unsafety. In formal verification one uses mathematical methods to obtain the highest level of assurance of a program’s safety, or even of its entire functional correctness. In order to advance the use of formal verification applied to C, this thesis describes a formal semantics corresponding to a significant part of the official C language specification, the C11 standard [ISO12], as well as technology to enable verification of C programs in a standards compliant and compiler independent way.
repository.ubn.ru.nl
Showing the best result for this search. See all results