程序切片和污点分析有什么区别?

逆向工程 二元分析 程序分析
2021-06-25 04:26:23

我正在学习程序切片和污点分析。我知道程序切片和污点分析的概念。

我认为程序切片和污点分析是相似的概念。我不知道程序切片和污点分析之间的区别。

程序切片和污点分析有什么区别?

2个回答

在我的理解中,有两个主要区别:

程序切片创建程序的简化表示,该表示仍应为给定输入产生相同的输出。因此,您将给定的程序减少到其核心功能,并丢弃所有笨拙/无关紧要的附件。

相比之下,污点分析通过应用程序跟踪信息的路径,并观察受相应信息影响/访问/影响的所有对象。因此,特定的输入被标记或标记,因此可以在其执行期间进行跟踪。

因此,考虑到输入输出行为 VS程序中选定输入/变量轨迹及其依赖关系,您可以简化程序的表示


另请参阅以下详细说明:

程序切片试图将给定的程序减少P到最小形式,即所谓的切片S,它产生相同的行为。更正式地取自这些幻灯片

  • 通过删除语句S从给定程序生成一个切片P
  • slice 必须在语法上正确给定的一组变量 V
  • 当给定S时应该产生相同的输出P

污点分析可以看作是信息流分析的一种形式。这里撕下的更正式的定义

信息从对象 x 流向对象 y,表示为 x→y ,每当存储在 x 中的信息转移到对象 y 时。

我想说它们本质上是相同的,只是侧重点略有不同:

程序切片严格来说是提取对特定变量/内存进行操作的代码,同时省略所有其他代码;

污点分析正在通过您选择的代码跟踪哪些其他变量/内存受到影响。此外,污染数据通常被更严格地定义为“用户可控数据”,而切片可以在任何 var 上完成。