The objective of program analysis is to automatically determine the p-
perties of a program. Tools of software development, such as compilers,
p- formance estimators, debuggers, reverse-engineering tools, program
veri?- tion/testing/proving systems, program comprehension systems, and
program specializationtoolsarelargelydependentonprogramanalysis.
Advancedp- gram analysis can: help to ?nd program errors; detect and
tune performan- critical code regions; ensure assumed constraints on
data are not violated; tailor a generic program to suit a speci?c
application; reverse-engineer so- ware modules, etc. A prominent program
analysis technique is symbolic a- lysis, which has attracted substantial
attention for many years as it is not dependent on executing a program
to examine the semantics of a program, and it can yield very elegant
formulations of many analyses. Moreover, the complexity of symbolic
analysis can be largely independent of the input data size of a program
and of the size of the machine on which the program is being executed.
In this book we present novel symbolic control and data ?ow repres-
tation techniques as well as symbolic techniques and algorithms to
analyze and optimize programs. Program contexts which de?ne a new
symbolic - scription of program semantics for control and data ?ow
analysis are at the center of our approach. We have solved a number of
problems encountered in program analysis by using program contexts. Our
solution methods are e?cient, versatile, uni?ed, and more general (they
cope with regular and irregular codes) than most existing methods.