Principles of Program Analysis
The theoretical backbone of static analysis — covering data-flow analysis, constraint-based analysis, type and effect systems, and abstract interpretation. Dense but invaluable for understanding the formal foundations behind the Soot-based tooling I develop in my dissertation work. The treatment of lattice theory and fixed-point computation is especially relevant to inter-procedural analysis of Android call graphs.