Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
The notion of proof in hardware verification
Journal of Automated Reasoning
Unboxed values as first class citizens in a non-strict functional language
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
Unboxed objects and polymorphic typing
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
TIL: a type-directed optimizing compiler for ML
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
Region-based memory management
Information and Computation
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A type system for Java bytecode subroutines
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A compositional account of the Java virtual machine
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
From system F to typed assembly language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Featherweight Java: a minimal core calculus for Java and GJ
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
A type system for object initialization in the Java bytecode language
ACM Transactions on Programming Languages and Systems (TOPLAS)
Marmot: an optimizing compiler for Java
Software—Practice & Experience
A Theory of Objects
The Definition of Standard ML
Stack-Based Typed Assembly Language
TIC '98 Proceedings of the Second International Workshop on Types in Compilation
The machine-assisted proof of programming language properties
The machine-assisted proof of programming language properties
Compilation and equivalence of imperative objects
Journal of Functional Programming
Design and implementation of generics for the .NET Common language runtime
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Region-based memory management in cyclone
PLDI '02 Proceedings of the ACM SIGPLAN 2002 Conference on Programming language design and implementation
Automating Type Soundness Proofs via Decision Procedures and Guided Reductions
LPAR '02 Proceedings of the 9th International Conference on Logic for Programming, Artificial Intelligence, and Reasoning
Notes on Nominal Calculi for Security and Mobility
FOSAD '00 Revised versions of lectures given during the IFIP WG 1.7 International School on Foundations of Security Analysis and Design on Foundations of Security Analysis and Design: Tutorial Lectures
Validating a Web service security abstraction by typing
Proceedings of the 2002 ACM workshop on XML security
Theoretical Computer Science - Foundations of software science and computation structures
Formal semantics and analysis of object queries
Proceedings of the 2003 ACM SIGMOD international conference on Management of data
Authenticity by Typing for Security Protocols
CSFW '01 Proceedings of the 14th IEEE workshop on Computer Security Foundations
Authenticity by typing for security protocols
Journal of Computer Security - Special issue on CSFW14
Formalization of generics for the .NET common language runtime
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The open verifier framework for foundational verifiers
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Type-based verification of sssembly language for compiler debugging
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Memory safety without garbage collection for embedded applications
ACM Transactions on Embedded Computing Systems (TECS)
Inlining java native calls at runtime
Proceedings of the 1st ACM/USENIX international conference on Virtual execution environments
A high-level modular definition of the semantics of C#
Theoretical Computer Science - Abstract state machines and high-level system design and analysis
Formalising Java RMI with explicit code mobility
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Certified In-lined Reference Monitoring on .NET
Proceedings of the 2006 workshop on Programming languages and analysis for security
Operational semantics for multi-language programs
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Formalising Java RMI with explicit code mobility
Theoretical Computer Science
Towards proving type safety of .NET CIL
Science of Computer Programming
Operational semantics for multi-language programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Institutions, property-aware programming and testing
LCSD '07 Proceedings of the 2007 Symposium on Library-Centric Software Design
Electronic Notes in Theoretical Computer Science (ENTCS)
Types and effects for non-interfering program monitors
ISSS'02 Proceedings of the 2002 Mext-NSF-JSPS international conference on Software security: theories and systems
Flexible models for dynamic linking
ESOP'03 Proceedings of the 12th European conference on Programming
A typed, compositional logic for a stack-based abstract machine
APLAS'05 Proceedings of the Third Asian conference on Programming Languages and Systems
A framework for certified program analysis and its applications to mobile-code safety
VMCAI'06 Proceedings of the 7th international conference on Verification, Model Checking, and Abstract Interpretation
Hi-index | 0.01 |
The Microsoft .NET Framework is a new computing architecture designed to support a variety of distributed applications and web-based services. .NET software components are typically distributed in an object-oriented intermediate language, Microsoft IL, executed by the Microsoft Common Language Runtime. To allow convenient multi-language working, IL supports a wide variety of high-level language constructs, including class-based objects, inheritance, garbage collection, and a security mechanism based on type safe execution.This paper precisely describes the type system for a substantial fragment of IL that includes several novel features: certain objects may be allocated either on the heap or on the stack; those on the stack may be boxed onto the heap, and those on the heap may be unboxed onto the stack; methods may receive arguments and return results via typed pointers, which can reference both the stack and the heap, including the interiors of objects on the heap. We present a formal semantics for the fragment. Our typing rules determine well-typed IL instruction sequences that can be assembled and executed. Of particular interest are rules to ensure no pointer into the stack outlives its target. Our main theorem asserts type safety, that well-typed programs in our IL fragment do not lead to untrapped execution errors.Our main theorem does not directly apply to the product. Still, the formal system of this paper is an abstraction of informal and executable specifications we wrote for the full product during its development. Our informal specification became the basis of the product team's working specification of type-checking. The process of writing this specification, deploying the executable specification as a test oracle, and applying theorem proving techniques, helped us identify several security critical bugs during development.