An Efficient, Parametric Fixpoint Algorithm for Analysis of Java Bytecode

Abstract interpretation has been widely used for the analysis of object-oriented languages and, in particular, Java source and bytecode. However, while most existing work deals with the problem of finding expressive abstract domains that track accurately the characteristics of a particular concrete property, the underlying fixpoint algorithms have received comparatively less attention. In fact, many existing (abstract interpretation based-) fixpoint algorithms rely on relatively inefficient techniques for solving inter-procedural call graphs or are specific and tied to particular analyses. We also argue that the design of an efficient fixpoint algorithm is pivotal to supporting the analysis of large programs. In this paper we introduce a novel algorithm for analysis of Java bytecode which includes a number of optimizations in order to reduce the number of iterations. The algorithm is parametric -in the sense that it is independent of the abstract domain used and it can be applied to different domains as ''plug-ins''-, multivariant, and flow-sensitive. Also, is based on a program transformation, prior to the analysis, that results in a highly uniform representation of all the features in the language and therefore simplifies analysis. Detailed descriptions of decompilation solutions are given and discussed with an example. We also provide some performance data from a preliminary implementation of the analysis

[1]  Bor-Yuh Evan Chang,et al.  Abstract Interpretation with Alien Expressions and Heap Structures , 2005, VMCAI.

[2]  Bruno Blanchet,et al.  Escape analysis for object-oriented languages: application to Java , 1999, OOPSLA '99.

[3]  Manuel V. Hermenegildo,et al.  An Assertion Language for Constraint Logic Programs , 2000, Analysis and Visualization Tools for Constraint Programming.

[4]  Saumya K. Debray,et al.  Global Flow Analysis as a Practical Compilation Tool , 1992, J. Log. Program..

[5]  Gregor Snelting,et al.  Points-To for Java: A General Framework and an Empirical Comparison , 2008 .

[6]  Xavier Leroy Java Bytecode Verification: An Overview , 2001, CAV.

[7]  Ondrej Lhoták,et al.  Points-to analysis using BDDs , 2003, PLDI '03.

[8]  Erik Ruf,et al.  Effective synchronization removal for Java , 2000, PLDI '00.

[9]  David Grove,et al.  Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis , 1995, ECOOP.

[10]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[11]  Peter J. Stuckey,et al.  Incremental analysis of constraint logic programs , 2000, TOPL.

[12]  Manuel V. Hermenegildo,et al.  Compile-Time Derivation of Variable Dependency Using Abstract Interpretation , 1992, J. Log. Program..

[13]  Albert L. Baker,et al.  Preliminary design of JML: a behavioral interface specification language for java , 2006, SOEN.

[14]  Peter J. Stuckey,et al.  A model for inter-module analysis and optimizing compilation , 2000, LOPSTR.

[15]  Stefano Secci,et al.  Pair-Sharing Analysis of Object-Oriented Programs , 2005, SAS.

[16]  Christian W. Probst,et al.  Modular Control Flow Analysis for Libraries , 2002, SAS.

[17]  Raghu Ramakrishnan,et al.  Magic Templates: A Spellbinding Approach To Logic Programs , 1991, J. Log. Program..

[18]  Manuel V. Hermenegildo,et al.  Optimized Algorithms for Incremental Analysis of Logic Programs , 1996, SAS.

[19]  Agostino Cortesi,et al.  Abstract Interpretation and Object-oriented Programming: Quo Vadis? , 2005, Electron. Notes Theor. Comput. Sci..

[20]  Shmuel Sagiv,et al.  TVLA: A System for Implementing Static Analyses , 2000, SAS.

[21]  Suzanne W. Dietrich,et al.  Extension Tables: Memo Relations in Logic Programming , 1987, SLP.

[22]  David F. Bacon,et al.  Fast static analysis of C++ virtual function calls , 1996, OOPSLA '96.

[23]  Patrick Cousot,et al.  An abstract interpretation-based framework for software watermarking , 2004, POPL.

[24]  Pascal Van Hentenryck,et al.  Optimization Techniques for General Purpose Fixpoint Algorithms - Practical Efficiency for the Abstract Interpretation of Prolog , 1993, WSA.

[25]  Fausto Spoto,et al.  Julia: A Generic Static Analyser for the Java Bytecode , 2005 .

[26]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[27]  Francesco Logozzo Cibai: An Abstract Interpretation-Based Static Analyzer for Modular Analysis and Verification of Java Classes , 2007, VMCAI.

[28]  Manuel V. Hermenegildo,et al.  Experiments in Context-Sensitive Analysis of Modular Programs , 2005, LOPSTR.

[29]  Laurie Hendren,et al.  Soot---a java optimization framework , 1999 .

[30]  Agostino Cortesi,et al.  Distinctness and Sharing Domains for Static Analysis of Java Programs , 2001, ECOOP.

[31]  Fausto Spoto,et al.  Information Flow Analysis for Java Bytecode , 2005, VMCAI.

[32]  Saumya K. Debray,et al.  On the Practicality of Global Flow Analysis of Logic Programs , 1988, ICLP/SLP.

[33]  Isabelle Pollet Towards a generic framework for the abstract interpretation of Java , 2004 .

[34]  Saumya K. Debray,et al.  Automatic Mode Inference for Logic Programs , 1988, J. Log. Program..

[35]  Laurie Hendren,et al.  Decompiling Java Bytecode: Problems, Traps and Pitfalls , 2002, CC.

[36]  BlanchetBruno Escape analysis for object-oriented languages , 1999 .