1998 · 75 citations · 10 references
ComputingComputer ScienceComputer SystemsFormal MethodsProgramming LanguagesSystems ProgrammingStatic Code AnalysisType CheckingType SystemsBytecode InterpretationBytecode Virtual MachinesData Consistency ChecksInitializationStatic Type Checking
In the standard Java implementation, a Java language program is compiled to Java bytecode. This bytecode may be sent across the network to another site, where it is then interpreted by the Java Virtual Machine. Since bytecode may be written by hand, or corrupted during network transmission, the Java Virtual Machine contains a bytecode verifier that performs a number of consistency checks before code is interpreted. As illustrated by previous attacks on the Java Virtual Machine, these tests, which include type correctness, are critical for system security. In order to analyze existing bytecode verifiers and to understand the properties that should be verified, we develop a precise specification of statically-correct Java bytecode, in the form of a type system. Our focus in this paper is a subset of the bytecode language dealing with object creation and initialization. For this subset, we prove that for every Java bytecode program that satisfies our typing constraints, every object is initialized before it is used. The type system is easily combined with a previous system developed by Stata and Abadi for bytecode subroutines. Our analysis of subroutines and object initialization reveals a previously unpublished bug in the Sun JDK bytecode verifier.
10
Imperative functional programming
Simon Jones, Philip Wadler · 1993 · 1.2K citations · Full text
David Tarditi, Greg Morrisett, Pau-Chen Cheng et al. · 1996 · 316 citations · Full text
From system F to typed assembly language
Greg Morrisett, David Walker, Karl Crary et al. · 1998 · 282 citations · Full text
Java Security: From HotJava to Netscape and Beyond
1996 · 233 citations
A type system for Java bytecode subroutines
Raymie Stata, Martı́n Abadi · 1998 · 157 citations · Full text