Answers:
不幸的是,关于该主题的教科书很少。我认为当今学习程序分析的最好方法是调查可用的不同课程,尝试一些实现,然后查看一些满足您特定需求的研究论文。接下来是其中很小一部分的样本。由于您特别提到的面向编译器的分析很容易找到,因此我将在下面不介绍此类材料。
基于Web的资源 这些文章强调在编译上下文之外使用静态分析。
一个逆向工程reddit的讨论,对方案的分析有许多有用的链接。
Mozilla Wiki上的抽象解释。
部署静态分析,Flash Sheridan的Dr. Dobbs文章
后来的数十亿行代码:使用静态分析在现实世界中查找错误,Al Bessey,Ken Block,Ben Chelf,Andy Chou,Bryan Fulton,Seth Hallem,Charles Henri-Gros,Asya Kamsky,Scott McPeak,Dawson Engler在ACM的通讯中。
大学课程分析
玩的工具
我在这里没有列出很多研究工具。其中有很多,但我尝试列出一些供您下载和使用的方法,以更好地了解该地区。
Interproc是一个非常有教育意义的工具,可用来学习数值静态分析。
围裙数值抽象库,如果您真的喜欢数值分析。
Slayer是Microsoft Research提供的形状分析工具。
jStar是基于分离逻辑的Java分析器。
Microsoft Research有许多小组开发许多工具,其中许多可供下载或使用网络演示。我无法在此处列出所有内容,建议您与他们一起玩。
还有很多,但这足以让您忙一阵子。
程序分析有两个研究重点:dynamic
和static
程序分析。
如果您具有编译器的背景知识,那么我建议您先阅读Dragon书籍中的第4、6、9章,以初步了解程序分析。
或者,至少如果您了解基本图形,那么最好去攻读研究生课程,例如MIT 6.820和CMU 17-355 / 17-665 / 17-819。
以上是关于静态程序分析的内容。如果您更关心动态程序分析,则程序分析是一个不错的起点。