Symbolic Exectuion with Mixed Concrete-Symbolic Solving

Symbolic Exectuion with Mixed Concrete-Symbolic Solving

(掺杂了具体符号求解的符号执行)

概述:

这篇文章分析了传统的静态符号执行的局限性(也就是决策过程或约束求解器不完善,以及不能处理外部库调用),并将其与基于DARTDirected Automatic Random Testing)的动态符号执行方法进行了一系列的比较。在此之上,提出了一种方法,来克服传统静态符号执行的局限,同时保留可以进行回溯处理的优点(避免大量代码的重复执行;支持增量式约束求解)。

这种方法的核心思想是:

1)将生成的PC中的路径约束分为SimplePCComplexPC两种。所谓SimplePc就是可以被约束求解器或者决策过程直接求解的,而ComplexPc则表示不能被约束求解器处理的路径约束,比如非线性的整数运算(如开方、幂运算),内部以及外部函数调用等。

2)先求解SimplePc,并用求得的解对ComplexPc进行具体化,然后一块构成新的PC,再进行约束求解。

可能存在这种情况,路径本来是可达的,但是无法求得有效解,也就是会认为不可达。这种情况的原因是,我们是利用对SimplePC求解的值来具体化简化ComplexPC,而正是因为SimplePC求解值的不恰当,导致整个PC无法求解。为了保证这种方法的有效性,文中还提出了两种启发式思想,即

1)Incremental Solving Heuristic

即对SimplePC多次求解(增量式指SimplePC元素个数越来越多,因为它要将上次 SimplePC求解结果取反,再并入到SimplePC中),这样就可以获得多个值,并依次用 这些值来简化ComplexPC,并对生成的多个新的PC进行约束求解。

2)Partitioning Heuristic

这种思想是,将Uninterpreted functions(属于ComplexPC)的参数的域在有趣的点进行 划分,从而得到一个额外的约束列表,然后依次将约束列表中的每个约束,连同原来的 PC一块,组成新的PC,再进一步的求解。

存在的问题以及将来的工作:

1.因为传统的静态符号执行,路径的搜索和生成是利用了模型检测器,而JPF支持路径的随机搜索,那么如果使用随机搜索,同时使用随机求解(即当SimplePC中不包含ComplexPC中变量的约束时,就为不受约束的变量赋予一个随机值),是否就能享有DART的所有优点,同时保留传统符号执行原有的优点?无法理论证明,需通过大量实验验证。

2.开发新的启发式思想。比如有些求解器(如Choco)对SimplePC的求解结果可能是一个区间范围,这就需要使用随机抽样技术,来具体化简化ComplexPC

3.这些新的启发式思想,可能在实际使用时花销很大。这需要进行实验证实,并对算法进行微妙的调整。

4.上述提出的方法,仅对于那些Pure(无副作用)的外部 methods,或者有副作用,但副作用对于分析无影响的methods有效。

posted @ 2011-10-26 21:15  zztian  阅读(250)  评论(0编辑  收藏  举报