crossain

软件分析笔记:2.数据流分析

1数据流分析基础

1.1停机问题-抽象方法

针对基础篇中的停机问题,我们可以试用抽象方法去尝试解决问题。邪恶程序存在的关键在于程序中有if存在 。因此可以采取以下方式。

1.1.1忽略掉所有程序的if条件部分

void Evil(){
	if(!Halt(Evil))return;
	else while(1)
}

抽象成

void Evil(){
	向左走return;
	向右走while(1);
}

语义:“向左走/向右走”为非确定性选择,程序随机从“向左走” 和“向右走”后面的语句中选择一条执行。

1.1.2忽略所有条件判断中的条件,一律抽象为不确定选择

void Evil(){
	再来一次
	向左走goto再来一次;
	向右走return;
}

1.1.3抽象过程分析

针对给定输入

  • 原始程序只有一条执行路径,抽象程序上有多条执行路径
  • 原始程序的执行路径一定包含在抽象程序的执行路径中

停机问题

  • 原始程序停机:存在自然数n,程序的执行路径长度 小于n
  • 抽象程序停机:存在自然数n,程序中所有执行路径 的长度都小于n

1.1.4停机问题的判定方法

绘制控制流图(结点为程序语句,边为语句间的转移 ), 如果控制流图上有环,则可能不终止,否则一定终止。

1.2符号分析

1.2.1分析内容

给定一个只包含浮点数变量和常量的程序,已知输入的符号,求输出的符号。

1.2.2符号分析的抽象

抽象符号

  • 正 ={所有的正数}
  • 零={0}
  • 负= {所有的负数}
  • 槑={所有的整数和NaN}

1.2.3符号分析的基本思路

给定程序的一条执行路径,我们能推出结果符号的抽象取值。

给定程序的两条执行路径,我们得到两个结果符号的抽象取值

分类:

技术点:

相关文章:

  • 2021-12-16
  • 2021-11-30
  • 2021-12-10
  • 2022-12-23
  • 2021-09-07
  • 2021-08-07
  • 2021-06-01
猜你喜欢
  • 2021-04-03
  • 2021-10-02
  • 2021-11-16
  • 2021-09-21
  • 2022-12-23
  • 2021-09-04
  • 2021-11-23
相关资源
相似解决方案