Over the last three years we have had many people use the Soot framework for compiler research and in graduate course projects. However, we find that many people who would like to use the framework find it difficult to get started. This tutorial introduces Soot, a tool for analyzing and transforming Java bytecode which has been developed at McGill University. The tutorial will first provide an overview of the entire system, and then a more in depth look at the intermediate representations produced by Soot. Of particular interest is a typed, three address representation (Jimple) that provides a good foundation for program analysis.
Based on the introductory material the tutorial will then look at various applications of Soot including an overview of the intraprocedural analysis framework, an introduction to the pointer analysis framework, examples of using the framework to modify or instrument bytecode, a discussion of how to encode flow analysis results in attributes and an overview of how Soot has been used to build a decompiler. Attendees should have a basic knowledge of Java, Java bytecode and dataflow analysis.