Subroutine Inlining and Bytecode Abstraction to Simplify Static and Dynamic Analysis

  • Authors:
  • Cyrille Artho;Armin Biere

  • Affiliations:
  • Computer Systems Institute, ETH Zürich, Switzerland;Institute for Formal Models and Verification, Johannes Kepler University, Linz, Austria

  • Venue:
  • Electronic Notes in Theoretical Computer Science (ENTCS)
  • Year:
  • 2005

Quantified Score

Hi-index 0.00

Visualization

Abstract

In Java bytecode, intra-method subroutines are employed to represent code in ''finally'' blocks. The use of such polymorphic subroutines within a method makes bytecode analysis very difficult. Fortunately, such subroutines can be eliminated through recompilation or inlining. Inlining is the obvious choice since it does not require changing compilers or access to the source code. It also allows transformation of legacy bytecode. However, the combination of nested, non-contiguous subroutines with overlapping exception handlers poses a difficult challenge. This paper presents an algorithm that successfully solves all these problems without producing superfluous instructions. Furthermore, inlining can be combined with bytecode simplification, using abstract bytecode. We show how this abstration is extended to the full set of instructions and how it simplifies static and dynamic analysis.