A mechanically verified language implementation
Journal of Automated Reasoning
A mechanically verified code generator
Journal of Automated Reasoning
A framework for defining logics
Journal of the ACM (JACM)
VLISP: a verified implementation of Scheme
Lisp and Symbolic Computation
The VLISP verified PreScheme compiler
Lisp and Symbolic Computation
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Safe kernel extensions without run-time checking
OSDI '96 Proceedings of the second USENIX symposium on Operating systems design and implementation
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
From system F to typed assembly language
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Deciding Linear Inequalities by Computing Loop Residues
Journal of the ACM (JACM)
Simplification by Cooperating Decision Procedures
ACM Transactions on Programming Languages and Systems (TOPLAS)
Advice on structuring compilers and proving them correct
POPL '73 Proceedings of the 1st annual ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Java Virtual Machine Specification
Java Virtual Machine Specification
The Java Language Specification
The Java Language Specification
Using Domain Algebras to Prove the Correctness of a Compiler
STACS '85 Proceedings of the 2nd Symposium of Theoretical Aspects of Computer Science
More on advice on structuring compilers and proving them correct
Semantics-Directed Compiler Generation, Proceedings of a Workshop
A Provably Correct Embedded Verifier for the Certification of Safety Critical Software
CAV '97 Proceedings of the 9th International Conference on Computer Aided Verification
PVS: A Prototype Verification System
CADE-11 Proceedings of the 11th International Conference on Automated Deduction: Automated Deduction
Stanford Pascal Verifier user manual
Stanford Pascal Verifier user manual
Eliminating array bound checking through dependent types
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Dependent types in practical programming
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed memory management in a calculus of capabilities
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Fine-grained dynamic instrumentation of commodity operating system kernels
OSDI '99 Proceedings of the third symposium on Operating systems design and implementation
Dynamically discovering likely program invariants to support program evolution
Proceedings of the 21st international conference on Software engineering
Active network vision and reality: lessions from a capsule-based system
Proceedings of the seventeenth ACM symposium on Operating systems principles
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type system for expressive security policies
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Using production grammars in software testing
Proceedings of the 2nd conference on Domain-specific languages
Software engineering for security: a roadmap
Proceedings of the Conference on The Future of Software Engineering
Safety checking of machine code
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Translation validation for an optimizing compiler
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
A certifying compiler for Java
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
ABCD: eliminating array bounds checks on demand
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Proof-carrying code (abstract): design, implementation and applications
Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming
An efficient class and object encoding
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
ACM Transactions on Information and System Security (TISSEC)
Oracle-based checking of untrusted software
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Avoiding exponential explosion: generating compact verification conditions
POPL '01 Proceedings of the 28th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Typed memory management via static capabilities
ACM Transactions on Programming Languages and Systems (TOPLAS)
Dynamically Discovering Likely Program Invariants to Support Program Evolution
IEEE Transactions on Software Engineering - Special issue on 1999 international conference on software engineering
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Protection in programming-language translations
Secure Internet programming
Static checking of interrupt-driven software
ICSE '01 Proceedings of the 23rd International Conference on Software Engineering
Formalizing the safety of Java, the Java virtual machine, and Java card
ACM Computing Surveys (CSUR)
A type system for certified binaries
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A dependently typed assembly language
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Model-Carrying Code (MCC): a new paradigm for mobile-code security
Proceedings of the 2001 workshop on New security paradigms
Ensuring code safety without runtime checks for real-time control systems
CASES '02 Proceedings of the 2002 international conference on Compilers, architecture, and synthesis for embedded systems
Elimination of Java array bounds checks in the presence of indirection
JGI '02 Proceedings of the 2002 joint ACM-ISCOPE conference on Java Grande
A type theory for memory allocation and data layout
POPL '03 Proceedings of the 30th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Certifying Compilation and Run-Time Code Generation
Higher-Order and Symbolic Computation
Automated techniques for provably safe mobile code
Theoretical Computer Science - Dependable computing
Type-Based Decompilation (or Program Reconstruction via Type Reconstruction)
ESOP '99 Proceedings of the 8th European Symposium on Programming Languages and Systems
Enforcing Safety Properties Using Type Specialization
ESOP '01 Proceedings of the 10th European Symposium on Programming Languages and Systems
MFCS '99 Proceedings of the 24th International Symposium on Mathematical Foundations of Computer Science
Deriving Pre-conditions for Array Bound Check Elimination
PADO '01 Proceedings of the Second Symposium on Programs as Data Objects
Construction of Verified Compiler Front-Ends with Program-Checking
PSI '99 Proceedings of the Third International Andrei Ershov Memorial Conference on Perspectives of System Informatics
Automatic Validation of Code-Improving Transformations
LCTES '00 Proceedings of the ACM SIGPLAN Workshop on Languages, Compilers, and Tools for Embedded Systems
Scalable Certification for Typed Assembly Language
TIC '00 Selected papers from the Third International Workshop on Types in Compilation
Alias Types for Recursive Data Structures
TIC '00 Selected papers from the Third International Workshop on Types in Compilation
Certification of Compiler Optimizations Using Kleene Algebra with Tests
CL '00 Proceedings of the First International Conference on Computational Logic
CAV '01 Proceedings of the 13th International Conference on Computer Aided Verification
Supporting Binary Compatibility with Static Compilation
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
Safe, Untrusted Agents Using Proof-Carrying Code
Mobile Agents and Security
Formal Verification of a Compiler Back-End Generic Checker Program
PSI '99 Proceedings of the Third International Andrei Ershov Memorial Conference on Perspectives of System Informatics
Handbook of automated reasoning
Automatically proving the correctness of compiler optimizations
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
Towards array bound check elimination in Java TM virtual machine language
CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research
Imperative Programming with Dependent Types
LICS '00 Proceedings of the 15th Annual IEEE Symposium on Logic in Computer Science
Proceedings of the 2002 workshop on New security paradigms
Luna: a flexible Java protection system
ACM SIGOPS Operating Systems Review - OSDI '02: Proceedings of the 5th symposium on Operating systems design and implementation
Validation of code-improving transformations for embeded systems
Proceedings of the 2003 ACM symposium on Applied computing
Symbolic transfer function-based approaches to certified compilation
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A calculus with polymorphic and polyvariant flow types
Journal of Functional Programming
Stack-based typed assembly language
Journal of Functional Programming
A Syntactic Approach to Foundational Proof-Carrying Code
Journal of Automated Reasoning
Compiler implementation in a formal logical framework
MERLIN '03 Proceedings of the 2003 ACM SIGPLAN workshop on Mechanized reasoning about languages with variable binding
Building certified libraries for PCC: dynamic storage allocation
Science of Computer Programming - Special issue on 12th European symposium on programming (ESOP 2003)
Context-Aware Code Certification
Proceedings of the 19th IEEE international conference on Automated software engineering
Automatic validation of code-improving transformations on low-level program representations
Science of Computer Programming - Special issue on program transformation
Strict bidirectional type checking
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Automated soundness proofs for dataflow analyses and transformations via local rules
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type system for certified binaries
ACM Transactions on Programming Languages and Systems (TOPLAS)
Symbolic bounds analysis of pointers, array indices, and accessed memory regions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Interactive and Probabilistic Proof of Mobile Code Safety
Automated Software Engineering
Efficient and effective array bound checking
ACM Transactions on Programming Languages and Systems (TOPLAS)
Property-based attestation for computing platforms: caring about properties, not mechanisms
NSPW '04 Proceedings of the 2004 workshop on New security paradigms
A logic for secure memory access of abstract state machines
Theoretical Computer Science - Abstract state machines and high-level system design and analysis
Modular verification of concurrent assembly code with dynamic thread creation and termination
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Structuring labeled trees for optimal succinctness, and beyond
FOCS '05 Proceedings of the 46th Annual IEEE Symposium on Foundations of Computer Science
Translation and Run-Time Validation of Loop Transformations
Formal Methods in System Design
A verifiable SSA program representation for aggressive compiler optimization
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Computability classes for enforcement mechanisms
ACM Transactions on Programming Languages and Systems (TOPLAS)
Modular verification of assembly code with stack-based control abstractions
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Certified In-lined Reference Monitoring on .NET
Proceedings of the 2006 workshop on Programming languages and analysis for security
Java bytecode specification and verification
Proceedings of the 2006 ACM symposium on Applied computing
Formal compiler construction in a logical framework
Higher-Order and Symbolic Computation
A protocol for property-based attestation
Proceedings of the first ACM workshop on Scalable trusted computing
Security types preserving compilation
Computer Languages, Systems and Structures
Evaluating SFI for a CISC architecture
USENIX-SS'06 Proceedings of the 15th conference on USENIX Security Symposium - Volume 15
Using production grammars in software testing
DSL'99 Proceedings of the 2nd conference on Conference on Domain-Specific Languages - Volume 2
Structuring Optimizing Transformations and Proving Them Sound
Electronic Notes in Theoretical Computer Science (ENTCS)
Proof-transforming compilation of programs with abrupt termination
Proceedings of the 2007 conference on Specification and verification of component-based systems: 6th Joint Meeting of the European Conference on Software Engineering and the ACM SIGSOFT Symposium on the Foundations of Software Engineering
Secure virtual architecture: a safe execution environment for commodity operating systems
Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles
A flexible security architecture to support third-party applications on mobile devices
Proceedings of the 2007 ACM workshop on Computer security architecture
A Certifying Code Generation Phase
Electronic Notes in Theoretical Computer Science (ENTCS)
A practical and precise inference and specializer for array bound checks elimination
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Flicker: an execution infrastructure for tcb minimization
Proceedings of the 3rd ACM SIGOPS/EuroSys European Conference on Computer Systems 2008
Security-by-contract on the .NET platform
Information Security Tech. Report
Aspect-oriented in-lined reference monitors
Proceedings of the third ACM SIGPLAN workshop on Programming languages and analysis for security
A type system for safe memory management and its proof of correctness
Proceedings of the 10th international ACM SIGPLAN conference on Principles and practice of declarative programming
Preservation of Proof Obligations from Java to the Java Virtual Machine
IJCAR '08 Proceedings of the 4th international joint conference on Automated Reasoning
Unifying type checking and property checking for low-level code
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Partial Translation Verification for Untrusted Code-Generators
ICFEM '08 Proceedings of the 10th International Conference on Formal Methods and Software Engineering
The MOBIUS Proof Carrying Code Infrastructure
Formal Methods for Components and Objects
Modular development of certified program verifiers with a proof assistant1,2
Journal of Functional Programming
Certificate translation for optimizing compilers
ACM Transactions on Programming Languages and Systems (TOPLAS)
Security enforcement aware software development
Information and Software Technology
Fabric: a platform for secure distributed computation and storage
Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles
Validating More Loop Optimizations
Electronic Notes in Theoretical Computer Science (ENTCS)
Cobalt: A Language for Writing Provably-Sound Compiler Optimizations
Electronic Notes in Theoretical Computer Science (ENTCS)
Towards Proof Generating Compilers
Electronic Notes in Theoretical Computer Science (ENTCS)
An Abstract Interpretation-based Approach to Mobile Code Safety
Electronic Notes in Theoretical Computer Science (ENTCS)
Deductive Runtime Certification
Electronic Notes in Theoretical Computer Science (ENTCS)
Detecting bugs in register allocation
ACM Transactions on Programming Languages and Systems (TOPLAS)
On the automated synthesis of proof-carrying temporal reference monitors
LOPSTR'06 Proceedings of the 16th international conference on Logic-based program synthesis and transformation
Building certified libraries for PCC: dynamic storage allocation
ESOP'03 Proceedings of the 12th European conference on Programming
Enhancing Java security with history based access control
Foundations of security analysis and design IV
Functional pearl: every bit counts
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Certifying compilers using higher-order theorem provers as certificate checkers
Formal Methods in System Design
An Abstract Model of Certificate Translation
ACM Transactions on Programming Languages and Systems (TOPLAS)
An extended proof-carrying code framework for security enforcement
Transactions on computational science XI
Trust extension as a mechanism for secure code execution on commodity computers
Trust extension as a mechanism for secure code execution on commodity computers
On the correctness of transformations in compiler back-ends
ISoLA'04 Proceedings of the First international conference on Leveraging Applications of Formal Methods
Catching and identifying bugs in register allocation
SAS'06 Proceedings of the 13th international conference on Static Analysis
Certificate translation for optimizing compilers
SAS'06 Proceedings of the 13th international conference on Static Analysis
Validity checking for finite automata over linear arithmetic constraints
FSTTCS'06 Proceedings of the 26th international conference on Foundations of Software Technology and Theoretical Computer Science
Formal methods for smartcard security
Foundations of Security Analysis and Design III
Certifiable program generation
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Proof obligations preserving compilation
FAST'05 Proceedings of the Third international conference on Formal Aspects in Security and Trust
Frankenstein: stitching malware from benign binaries
WOOT'12 Proceedings of the 6th USENIX conference on Offensive Technologies
Full proof cryptography: verifiable compilation of efficient zero-knowledge protocols
Proceedings of the 2012 ACM conference on Computer and communications security
A framework for end-to-end verification and evaluation of register allocators
SAS'07 Proceedings of the 14th international conference on Static Analysis
An overview of the Leon verification system: verification by translation to recursive functions
Proceedings of the 4th Workshop on Scala
Hi-index | 0.00 |
This paper presents the design and implementation of a compiler that translates programs written in a type-safe subset of the C programming language into highly optimized DEC Alpha assembly language programs, and a certifier that automatically checks the type safety and memory safety of any assembly language program produced by the compiler. The result of the certifier is either a formal proof of type safety or a counterexample pointing to a potential violation of the type system by the target program. The ensemble of the compiler and the certifier is called a certifying compiler.Several advantages of certifying compilation over previous approaches can be claimed. The notion of a certifying compiler is significantly easier to employ than a formal compiler verification, in part because it is generally easier to verify the correctness of the result of a computation than to prove the correctness of the computation itself. Also, the approach can be applied even to highly optimizing compilers, as demonstrated by the fact that our compiler generates target code, for a range of realistic C programs, which is competitive with both the cc and gcc compilers with all optimizations enabled. The certifier also drastically improves the effectiveness of compiler testing because, for each test case, it statically signals compilation errors that might otherwise require many executions to detect. Finally, this approach is a practical way to produce the safety proofs for a Proof-Carrying Code system, and thus may be useful in a system for safe mobile code.