现在我对符号执行(SE)和可达性分析(RA)感到困惑。据我所知,SE使用符号来执行一些代码以通过分支条件到达每个分支。 RA可用于查找每个分支的可达性,对吧?当使用RA时,我们可以提取每个分支的分支条件。如果是这样,他们之间有什么区别?他们可以迅速吗?它们都是静态分析吗?
谢谢,夏娃
答案 0 :(得分:0)
符号执行在不执行程序的情况下完成。因此,它是静态分析。
良好的符号分析将计算每个程序点的路径条件。一个更好的人将能够推断路径公式,以证明它是可行的(程序点是可达的)或不是(程序点已死)。
与编译代码的执行速度相比,符号执行往往很慢。
答案 1 :(得分:0)
可达性分析主要用于查看模型是否可以达到某个州。但是,符号执行是一种静态分析技术(有时也是动态的,就像KLEE所做的那样)来查找程序/源代码中的所有路径。
答案 2 :(得分:-1)
符号执行不是静态的,它以符号方式执行程序。 对于性能的关注,像klee这样的符号执行工具不会 遇到分支时解决分支条件。它使用廉价分析来查看它是否可以访问。 当到达程序的出口时,它将尝试生成测试用例。 如果从起点(主函数)到收集约束 退出是可以满足的,然后将给出一个测试用例,否则退出是不可达的。 SE使用可达性分析来生成测试用例以覆盖代码。