Results 1 -
8 of
8
Java Bytecode Verification: Algorithms and Formalizations
- Journal of Automated Reasoning
, 2003
"... Bytecode verification is a crucial security component for Java applets, on the Web and on embedded devices such as smart cards. This paper reviews the various bytecode verification algorithms that have been proposed, recasts them in a common framework of dataflow analysis, and surveys the use of pro ..."
Abstract
-
Cited by 68 (0 self)
- Add to MetaCart
Bytecode verification is a crucial security component for Java applets, on the Web and on embedded devices such as smart cards. This paper reviews the various bytecode verification algorithms that have been proposed, recasts them in a common framework of dataflow analysis, and surveys the use of proof assistants to specify bytecode verification and prove its correctness.
Extracting a Data Flow Analyser in Constructive Logic
- Proc. of the 13th European Symposium on Programming, volume 2986 of LNCS
, 2004
"... Abstract. We show how to formalise a constraint-based data flow analysis in the specification language of the Coq proof assistant. This involves defining a dependent type of lattices together with a library of lattice functors for modular construction of complex abstract domains. Constraints are exp ..."
Abstract
-
Cited by 36 (9 self)
- Add to MetaCart
Abstract. We show how to formalise a constraint-based data flow analysis in the specification language of the Coq proof assistant. This involves defining a dependent type of lattices together with a library of lattice functors for modular construction of complex abstract domains. Constraints are expressed in an intermediate representation that allows for both efficient constraint resolution and correctness proof of the analysis with respect to an operational semantics. The proof of existence of a correct, minimal solution to the constraints is constructive which means that the extraction mechanism of Coq provides a provably correct data flow analyser in ocaml. The library of lattices together with the intermediate representation of constraints are defined in an analysis-independent fashion that provides a basis for a generic framework for proving and extracting static analysers in Coq. 1
A Type System for the Java Bytecode Language and Verifier
, 2003
"... The Java Virtual Machine executes bytecode programs that may have been sent from other, possibly untrusted, locations on the network. Since the transmitted code may be written by a malicious party or corrupted during network transmission, the Java Virtual Machine contains a bytecode verifier to chec ..."
Abstract
-
Cited by 18 (0 self)
- Add to MetaCart
The Java Virtual Machine executes bytecode programs that may have been sent from other, possibly untrusted, locations on the network. Since the transmitted code may be written by a malicious party or corrupted during network transmission, the Java Virtual Machine contains a bytecode verifier to check the code for type errors before it is run. As illustrated by reported attacks on Java run-time systems, the verifier is essential for system security. However, no formal specification of the bytecode verifier exists in the Java Virtual Machine Specification published by Sun. In this paper, we develop such a specification in the form of a type system for a subset of the bytecode language. The subset includes classes, interfaces, constructors, methods, exceptions, and bytecode subroutines. We also present a type checking algorithm and prototype bytecode verifier implementation, and we conclude by discussing other applications of this work. For example, we show how to extend our formal system to check other program properties, such as the correct use of object locks.
A framework for certified program analysis and its applications to mobile-code safety
- In International Conf. on Verification, Model Checking, and Abstract Interpretation
, 2006
"... ..."
Verified Bytecode Subroutines
- JOURNAL OF AUTOMATED REASONING
, 2003
"... Bytecode subroutines are a major complication for Java bytecode verification: they are difficult to fit into the data flow analysis that the JVM specification suggests. Because of that, subroutines are left out or are restricted in most formalizations of the bytecode verifier. We examine the problem ..."
Abstract
-
Cited by 12 (1 self)
- Add to MetaCart
Bytecode subroutines are a major complication for Java bytecode verification: they are difficult to fit into the data flow analysis that the JVM specification suggests. Because of that, subroutines are left out or are restricted in most formalizations of the bytecode verifier. We examine the problems that occur with subroutines and give an overview of the most prominent solutions in the literature. Using the theorem prover Isabelle/HOL, we have extended our substantial formalization of the JVM and the bytecode verifier with its proof of correctness by the most general solution for bytecode subroutines.
Imperative Object-based Calculi In (Co)Inductive Type Theories
- In Barendregt and Nipkow [2
, 2003
"... We discuss the formalization of Abadi and Cardelli's imp#, a paradigmatic object-based calculus with types and side e#ects, in (Co)Inductive Type Theories. ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
We discuss the formalization of Abadi and Cardelli's imp#, a paradigmatic object-based calculus with types and side e#ects, in (Co)Inductive Type Theories.
Dependent Types, Theorem Proving, and Applications for a Verifying Compiler
, 2005
"... One approach to Prof. Hoare’s challenge is to view the development of verified software from the perspective of interactive theorem provers. This idea is already commonly developed and many medium-scale software systems have been developed and verified in this manner. Developments based on HOL, ACL2 ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
One approach to Prof. Hoare’s challenge is to view the development of verified software from the perspective of interactive theorem provers. This idea is already commonly developed and many medium-scale software systems have been developed and verified in this manner. Developments based on HOL, ACL2, or PVS have already been described and advocated and our position stands on the same line: most powerful (higher-order) theorem proving systems already contain a programming language, programs can be developed and the correctness of these programs can be specified and verified, they can then be compiled into traditional executable code. In this sense, we already have a small scale example of a verification aware programming language. We propose to take advantage of the notion of “dependent types ” to ensure that this programming language combines powerful logical capabilities, reasonable expressive power, and practical linkage between computational content and logical annotations. Almost all mathematic developments contain algorithms. This imposes that

