Skip to content
Markus Schmidt edited this page Nov 30, 2023 · 40 revisions

Inputs

  • .java
  • .class
  • .jar
  • .jimple
  • Multi-Release Jar files since Java 9
  • .war
  • .apk

IR

Jimple

  • merge switch statement
  • getters for def and use

Java Source Code Front End

Language Features

  • Java 7
  • Annotation, not modeled yet.
  • Java 8: Lambda expression
  • Java 8: Method reference e.g. Object::toString
  • Java 8: Default method in interfaces
  • Java 9: Private methods in interfaces
  • Java 9: Module
  • Java 9: Annonymous Diamond Operator
  • Java 9: Try with Resources Concise

Testing

  • Minimal tests for all features

Java Byte Code Front End

Language Features

Jimple Front End

Algorithms

  • Type Inference Algorithm / TypeAssigner
  • Body Interceptors(Transformers) in jb phase
    • ConditionalBranchFolder
    • DeadAssignmentEliminator
    • CopyPropagator
    • ConstantPropagatorAndFolder
    • LocalNameStandardizer
    • UnusedLocalEliminator
    • Aggregator
    • LocalSplitter
    • LocalPacker
    • TrapTightener
    • UnreachableCodeEliminator
    • DuplicateCatchAllTrapRemover (is now handled directly in the StmtGraph)
    • CastAndReturnInliner
    • NopEliminator
  • Body Interceptors not in jb phase
    • Single Static Assignment

Testing

  • Minimal tests for untyped Jimple
  • Minimal tests for final Jimple after applying body interceptors

Call Graph Algorithm

  • Type Hierarchy Resolver
  • CHA
  • RTA
  • VTA
  • SPARK

Testing

  • Tests for Type Hierarchy Resolver
    • Class A extend Class B (ClassInheritanceTest.java)
    • Class A extends abstract Class B (AbstractClassInheritanceTest.java)
    • Class A implement interface B (InterfaceImplementationTest.java)
    • Class A implement interface B and interface B extends another interface (InterfaceInheritanceTest.java)
    • Class A override Class B methods (MethodOverridingTest.java)
    • Transitivity (If A extends B and B extends C, then A extends C) (InheritanceTransitivityTest.java)
    • Multiple interface implementation (MultiInterfaceImplementationTest.java)
    • Class A access data in Class B directly (InheritPublicDataTest.java)
    • Class A access data in Class B through public methods (InheritDataWithPublicMethodTest.java)
    • Class A access data in Class B through protected methods (InheritDataWithProtectedMethodTest.java)
    • Class A extends Class B and contains additional methods (which is not available in Class B)
    • Class A and extended class B inherit from Object class
  • JCG Tests for call graph soundness

Outputs

  • .jimple
  • .class
  • .jar
  • .apk

Frameworks

  • IFDS/IDE
  • VASCO