我正在学习程序切片和污点分析。我知道程序切片和污点分析的概念。
我认为程序切片和污点分析是相似的概念。我不知道程序切片和污点分析之间的区别。
程序切片和污点分析有什么区别?
我正在学习程序切片和污点分析。我知道程序切片和污点分析的概念。
我认为程序切片和污点分析是相似的概念。我不知道程序切片和污点分析之间的区别。
程序切片和污点分析有什么区别?
在我的理解中,有两个主要区别:
程序切片创建程序的简化表示,该表示仍应为给定输入产生相同的输出。因此,您将给定的程序减少到其核心功能,并丢弃所有笨拙/无关紧要的附件。
相比之下,污点分析通过应用程序跟踪信息的路径,并观察受相应信息影响/访问/影响的所有对象。因此,特定的输入被标记或标记,因此可以在其执行期间进行跟踪。
因此,考虑到输入输出行为 VS程序中选定输入/变量的轨迹及其依赖关系,您可以简化程序的表示。
另请参阅以下详细说明:
程序切片试图将给定的程序减少P
到最小形式,即所谓的切片S
,它产生相同的行为。更正式地取自这些幻灯片:
- 通过删除语句
S
从给定程序生成一个切片P
- slice 必须在语法上正确给定的一组变量
V
- 当给定
S
和时应该产生相同的输出P
污点分析可以看作是信息流分析的一种形式。从这里撕下的更正式的定义:
信息从对象 x 流向对象 y,表示为 x→y ,每当存储在 x 中的信息转移到对象 y 时。
我想说它们本质上是相同的,只是侧重点略有不同:
程序切片严格来说是提取对特定变量/内存进行操作的代码,同时省略所有其他代码;
污点分析正在通过您选择的代码跟踪哪些其他变量/内存受到影响。此外,污染数据通常被更严格地定义为“用户可控数据”,而切片可以在任何 var 上完成。