几个基本概念辨析:流敏感,路径敏感和上下文敏感

(从这篇日志开始,恢复博客园的同步更新)

这篇日志没有什么技术含量,只是总结几个基本概念。在软件分析中,我们经常会遇到流敏感(flow-sensitive),路径敏感(path-sensitive)和上下文敏感(context-sensitive),这几个概念都主要出现在Data Flow Analysis中(或data flow的变型,如Taint Analysis等)。

简单来说,流敏感(flow-sensitive)指的是考虑程序语句执行的顺序,例如在数据流分析中的指针别名(Pointer Alias)分析中,一个非流敏感指针别名分析可能得出“变量x和y可能会指向同一位置”,而流敏感指针别名分析得出的结论类似于“在执行第20条指令后,变量x和y可能会指向同一位置” 。所以,一个非流敏感指针别名分析不考虑控制流,并认为所发现的别名在程序所有位置均成立。

路径敏感(path-sensitive)指的是依据条件分支语句的不同谓词,计算不同的分析信息,也就是说,路径敏感将跟踪程序控制流的每一个分支,以记录两个分支路径的不同程序状态。相应的,非路径敏感并不考虑分支之间的区别。简单的路径敏感存在“路径爆炸”(path explosion)或“无穷搜索空间”(infinite search space)的问题。

上下文敏感(context-sensitive)指的是在过程间分析( Interprocedural Analysis)时,考虑函数调用的上下文信息。

以上内容主要参考了Data Flow Analysis的维基百科页面和部分论文及书籍。

转载于:https://www.cnblogs.com/quyu/archive/2013/02/14/2912638.html

你可能感兴趣的:(几个基本概念辨析:流敏感,路径敏感和上下文敏感)