混合程序分析方法和系统的制作方法

文档序号:6517052阅读:328来源:国知局
混合程序分析方法和系统的制作方法
【专利摘要】一种混合程序分析方法包括启动应用的静态程序分析;在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询;通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集;通过所述动态程序分析器产生所述参数集;通过所述动态程序分析器使用所述参数集调用所述应用的所述代码结构;通过所述动态程序分析器回答所述查询;以及继续所述应用的所述静态程序分析。
【专利说明】混合程序分析方法和系统
【技术领域】
[0001]本发明涉及程序分析。更具体地说,本发明涉及混合程序分析。
【背景技术】
[0002]程序分析过程一般可被分为两类:静态程序分析和动态程序分析。在静态程序分析中,计算机软件的分析可在不执行被分析的应用的情况下执行。在动态程序分析中,在分析期间使用测试输入在真实或虚拟的处理器上执行应用。
[0003]根据Rice定理静态程序分析一般被视为不可判定的。Rice定理认为,对于部分函数的任何非平凡(non-trivial)属性,没有任何一般的且有效的方法来判定一种算法是否判定部分函数具有该属性。Rice定理不仅提供了理论性上限,而且还提供了许多实际的分析所遇到的极限。
[0004]在这些不可判定的分析中,有判定给定调用点(call site)的确切被调用方法集(也称为指针分析)不可判定的问题、解析反射调用不可判定的问题、以及与字符串分析和常量传播相关的问题。
[0005]上述问题的可靠解通常具有较差的精确度。例如,对Class, newlnstance的调用(在Java中)的结果可以近似为本应用的类层次结构的所有可能类型。但是,结果的近似产生不精确且不可伸缩的分析。
[0006]已经引入了改进的技术来执行两阶段分析,其中首先运行动态程序分析以确定用于随后的静态分析的动态提示,然后静态分析可以使用动态提示以便为具有挑战性的代码结构建模。例如,在Class, newlnstance的情况中,动态分析记录newlnstance调用分配的确切对象类型,然后静态程序分析可以使用该数据进行指针分析以解析(resolve)虚拟调用。尽管一般理解对动态程序分析的这种依赖是不可靠的,但是两阶段分析所要解决的问题是不可判定的并且可靠的近似解经常由于丧失精确性而不可用。即,与静态程序分析相t匕,两阶段分析只是一种改进的折衷。

【发明内容】

[0007]根据本发明的实施例,一种混合程序分析方法包括启动应用的静态程序分析;在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询;将控制从所述静态程序分析器传递到所述动态程序分析器并启动所述代码结构的动态程序分析;通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集;通过所述动态程序分析器产生所述参数集;通过所述动态程序分析器使用所述参数集调用所述应用的所述代码结构;通过所述动态程序分析器回答所述查询;以及将控制从所述动态程序分析器传递到所述静态程序分析器并继续所述应用的所述静态程序分析。
[0008]根据本发明的实施例,混合程序分析系统包括:被配置为启动应用的静态程序分析的模块;被配置为在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询的模块;被配置为将控制从所述静态程序分析器传递到所述动态程序分析器并启动所述代码结构的动态程序分析的模块;被配置为通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集的模块;被配置为通过所述动态程序分析器产生所述参数集的模块;被配置为通过所述动态程序分析器,使用所述参数集调用所述应用的所述代码结构的模块;被配置为通过所述动态程序分析器回答所述查询的模块;以及被配置为将控制从所述动态程序分析器传递到所述静态程序分析器并继续所述应用的所述静态程序分析的模块。
[0009]一种混合程序分析方法包括启动应用的静态程序分析;在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询;通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集;通过所述动态程序分析器产生所述参数集;通过所述动态程序分析器,使用所述参数集调用所述应用的所述代码结构;通过所述动态程序分析器将对应于所述查询的答案返回到所述静态程序分析器;以及继续所述应用的所述静态程序分析。
[0010]根据本发明的实施例,混合程序分析系统包括:被配置为启动应用的静态程序分析的模块;被配置为在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询的模块;被配置为通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集的模块;被配置为通过所述动态程序分析器产生所述参数集的模块;被配置为通过所述动态程序分析器,使用所述参数集调用所述应用的所述代码结构的模块;被配置为通过所述动态程序分析器将对应于所述查询的答案返回到所述静态程序分析器的模块;以及被配置为继续所述应用的所述静态程序分析的模块。
【专利附图】

【附图说明】
[0011]下面参考附图更详细地描述本发明的优选实施例:
[0012]图1是用于解释本发明的示例性实施例的例程的流程图;
[0013]图2是用于根据本发明的实施例的混合程序分析法的示例性方法的流程图;
[0014]图3是示出根据本发明的实施例用于执行用于混合程序分析法的方法的示例性计算机系统的框图;
[0015]图4是用于解释本发明的示例性实施例的例程的流程图;以及
[0016]图5是示出根据本发明的实施例用于执行用于混合程序分析法的方法的示例性计算机系统的框图。
【具体实施方式】
[0017]根据本发明的示例性实施例,实现用于混合程序分析法的框架,该混合程序分析法包括静态程序分析和动态程序分析。但是应该理解,本发明的实施例不限于此处描述的特定方法和/或装置。而是,本发明的实施例更广泛地涉及用于执行程序分析的增强的技术。此外,尽管此处参考特定的软件(例如,Java)、语法、协议、操作平台(硬件或软件)等,但是本发明的实施例不限于此类软件、语法、协议、操作平台等。而且,在给出此处的教导的前提下,本领域的技术人员很容易理解,可对所示的实施例做出各种处于所声明的发明的范围内的修改。即,此处示出和描述的实施例并非旨在或者可以推测出任何限制。[0018]现在参考图1所示的示例性例程100来描述本发明的实施例。根据本发明的实施例,混合方法可以在了解静态扫描程序将给出哪些查询的情况下,提供在动态程序分析中使用的用于运行或执行给定的计算机可读指令的精确输入参数。控制了输入参数之后,使动态程序分析的响应专门针对适合于回答静态分析器提出的查询的程序运行。
[0019]请参考以下示例(以Java语法编写):
[0020]
【权利要求】
1.一种混合程序分析方法,包括: 启动应用的静态程序分析; 在判定需要动态分析的应用的代码结构时,通过静态程序分析器产生到动态程序分析器的查询; 将控制从所述静态程序分析器传递到所述动态程序分析器并启动所述代码结构的动态程序分析; 通过所述动态程序分析器将所述查询解析为可用于调用所述应用的所述代码结构的参数集; 通过所述动态程序分析器产生所述参数集; 通过所述动态程序分析器使用所述参数集调用所述应用的所述代码结构; 通过所述动态程序分析器回答所述查询;以及 将控制从所述动态程序分析器传递到所述静态程序分析器并继续所述应用的所述静态程序分析。
2.根据权利要求1的混合方法,其中所述查询包括所述代码结构的上下文信息。
3.根据权利要求1的混合方法,其中需要动态分析的所述应用的所述代码结构被识别为影响所述静态分析的精确度,并且进一步地,其中所述代码结构在所述静态分析维护的抽象中未被建模。
4.根据权利要求1的混合方法,其中需要动态分析的所述应用的所述代码结构被所述静态分析识别为反射结构。
5.根据权利要求1的混合方法,其中需要动态分析的所述应用的所述代码结构被所述静态分析识别为所述应用中的条件分支的评估。
6.根据权利要求1的混合方法,其中需要动态分析的所述应用的所述代码结构被所述静态分析识别为外部内容。
7.根据权利要求1的混合方法,进一步包括通过所述动态程序分析器将带有上下文信息的所述查询解析为所述参数集。
8.根据权利要求1的混合方法,其中所述参数集包括对应于所述应用的已识别分支的命令行参数。
9.根据权利要求1的混合方法,其中所述参数集包括对应于所述应用的已识别分支的数据输入。
【文档编号】G06F9/445GK103810096SQ201310524568
【公开日】2014年5月21日 申请日期:2013年10月30日 优先权日:2012年11月6日
【发明者】E·贝斯克洛夫尼, M·皮斯托亚, O·特里普 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1