Soot is a Java optimization framework. It provides four intermediate representations for analyzing and transforming Java bytecode: 1. Baf: a streamlined representation of bytecode which is simple to manipulate. 2. Jimple: a typed 3-address intermediate representation suitable for optimization. 3. Shimple: an SSA variation of Jimple. 4. Grimp: an aggregated version of Jimple suitable for decompilation and code inspection. Soot can be used as a stand alone tool to optimize or inspect class files, as well as a framework to develop optimizations or transformations on Java bytecode. Soot was developed by Laurie Hendren's and Clark Verbrugge's Sable Research Group of McGill University. However, the project is now mostly maintained by Eric Bodden, who was a Ph.D. student at McGill before he moved to the STG. Eric will happily answer all Soot-related questions.[more…]

TamiFlex is a tool suite to facilitate static analyses of Java programs that use reflection and custom class loaders. The suite consists of two agents that use the java.lang.instrument API, one Play-out Agent and one Play-in Agent. The Play-out Agent allows you to monitor a Java program using any Java-6 compliant JVM, (1) dumping a reflection trace file, providing information about reflective calls on the program run, and (2) dumping all classes that the virtual machine loaded on this run, including runtime-generated classes. With the Play-in Agent you can cause the virtual machine to load classes from a specified directory instead of from they would normally be loaded from. This is useful for replacing classes by statically optimized classes irrespective of the program's class-loading setup.[more…]