Soot (software)
| Company type | Free software |
|---|---|
| Industry | Software development, Static program analysis |
| Founder | Sable Research Group at McGill University |
| Headquarters | Paderborn , Germany |
Area served | Java programming community |
Key people | Secure Software Engineering Group at Paderborn University (developers) |
| Products | Static program analysis framework, intermediate representations (Baf, Jimple, Shimple, Grimp), dava decompiler tool |
| Owner | Secure Software Engineering Group at Paderborn University |
In the realm of static program analysis, Soot serves as a comprehensive framework for manipulating and optimizing bytecode, providing several intermediate language options tailored for Java. Originating from the Sable Research Group at McGill University, its ongoing development and support are managed by the Secure Software Engineering Group at Paderborn University.
Soot offers four distinct intermediate representations accessible through its API, designed to facilitate program analysis and transformation tasks:
- Baf: a representation closely resembling bytecode.
- Jimple: a simplified Java-like source form restricting each statement to a maximum of three elements.
- Shimple: an SSA adaptation of Jimple, analogous to GIMPLE.
- Grimp: a condensed Jimple variant optimized for decompilation and code examination.
The latest version of Soot incorporates built-in program analyses, including context-sensitive yet flow-insensitive points-to analysis, as well as call graph and domination analyses. Additionally, it integrates the dava decompiler tool.
Distributed under the terms of the GNU Lesser General Public License (LGPL), Soot is available as free software. Notably, in 2010, two research publications concerning Soot were distinguished as IBM CASCON First Decade High Impact Papers out of 425 entries.
Jimple
Jimple constitutes an intermediate representation crafted to ease the optimization process of Java applications compared to conventional bytecode. It features explicit typing, a concrete syntax, and is grounded in the principles of three-address code.
By limiting itself to just 15 operations, Jimple significantly simplifies flow analysis relative to the more than 200 operations found in Java bytecode.
In contrast with Java bytecode, Jimple assigns types to both local and stack variables, inherently ensuring type safety.
The term "Jimplifying" denotes the transformation of bytecode into three-address code by replacing stack positions with variables, thereby converting stack-based operations into variable assignments—a methodology introduced by Clark Verbrugge.
Example
Examine the following bytecode snippet:
iload 1 // load variable x1 onto stack iload 2 // load variable x2 onto stack iadd // pop two values, push their sum istore 1 // pop value, store into x1
This sequence is translated into three-address code as follows:
stack1 = x1 // iload 1 stack2 = x2 // iload 2 stack1 = stack1 + stack2 // iadd x1 = stack1 // istore 1
Typically, the resulting code does not conform to static single assignment form.
SootUp
The SootUp framework, created by the Secure Software Engineering Group at Paderborn University, serves as the successor to Soot. Unlike Soot, SootUp is a fully redesigned system that prioritizes static program analysis over bytecode optimization.
Sources
- Republished in
- Republished in