Static and Dynamic JVM Operand Stack Visualization And Verification

The bytecode verification is an important task of the Java architecture that the JVM specification suggests. This paper presents graph theoretical algorithms and their implementation for the data flow analysis of Java bytecode. The algorithms mainly address the extended static visualization and verification of the JVMs operand stack to allow a deeper understanding in bytecode behavior. Compared to the well known algorithms, the focus of our approach is the visualization of the operand stack and a graph theoretical extension of the verification algorithms. Additionally we present a method for dynamic operand stack visualization and verification. We also show some experimental results to illustrate the effectiveness of our algorithms. All presented algorithms in this paper have been implemented in the Dr. Garbage tool suite. The Dr. Garbage project resulted from research work at the University of Oldenburg and is now further maintained at the University of Applied Sciences Frankfurt am Main. The tool suite is available for download under the Apache Open Source license.

[1]  David Thomas,et al.  The Art in Computer Programming , 2001 .

[2]  Stephen N. Freund,et al.  A Type System for the Java Bytecode Language and Verifier , 2003, Journal of Automated Reasoning.

[3]  Leo Brodie,et al.  Starting FORTH : an introduction to the FORTH language and operating system for beginners and professionals , 1981 .

[4]  Tobias Nipkow,et al.  Verified Bytecode Verifiers , 2001, FoSSaCS.

[5]  Alessandro Coglio,et al.  Simple Verification Technique for Complex Java Bytecode Subroutines , 2001 .

[6]  Colleen M. Pouliot Adobe Systems , 1998 .

[7]  Egon Börger,et al.  Java and the Java Virtual Machine: Definition, Verification, Validation , 2001 .

[8]  Sergej Alekseev,et al.  TOOLS FOR CONTROL FLOW ANALYSIS OF JAVA CODE , 2012 .

[9]  Tobias Nipkow,et al.  Verified lightweight bytecode verification , 2001, Concurr. Comput. Pract. Exp..

[10]  Martín Abadi,et al.  A type system for Java bytecode subroutines , 1999, TOPL.

[11]  D. Nguyen,et al.  Graph Theoretical Algorithms For JVM Operand Stack Visualization And Bytecode Verification , 2013 .

[12]  Hyun-il Lim,et al.  Analyzing Stack Flows to Compare Java Programs , 2012, IEICE Trans. Inf. Syst..

[13]  Bruce Mills Theoretical introduction to programming , 2005 .

[14]  Xavier Leroy,et al.  Java Bytecode Verification: Algorithms and Formalizations , 2003, Journal of Automated Reasoning.

[15]  Gerwin Klein,et al.  Verified Bytecode Subroutines , 2003, Journal of Automated Reasoning.

[16]  Eva Rose,et al.  Lightweight Bytecode Verification , 2004, Journal of Automated Reasoning.