基于动态符号执行的程序差异行为分析技术研究与实现
发布时间:2021-11-26 05:22
随着软件的演化,借助补丁以修复程序中存在的缺陷是提升软件质量和可信程度的重要手段。然而程序补丁可能会引入新的问题,现有的软件补丁测试技术有如下几个主流方向:测试用例自动增强技术、代码变更影响分析技术、多版本程序分析技术和补丁验证技术。但是上述技术在代码覆盖、分析效率以及对补丁可能引入的新缺陷等方面尚需进一步的研究。本研究的目标是基于符号执行技术,设计并开发一个程序多版本分析系统,用于分析一个程序的不同版本之间的差异行为。本研究的主要研究内容和成果主要包括:1)多数的现有工作或仅考虑程序的单一版本,或需分别分析两个程序的代码才能获取对应版本的行为信息,从而进行进一步的行为差异分析。由于分析对象是一个程序的两个不同版本,它们通常包含大量的共有代码,仅包含少量的由补丁引入的差异代码,因此重复分析共有代码带来了时间和空间上的浪费。针对该问题,本研究关注程序的多版本统一执行,提出了一个同时执行两个版本的程序代码的统一分离执行模型(USE),以提高分析的效率。2)与现有的研究工作多数仅关注控制流差异不同,USE模型同时关注程序的控制差异行为和数据差异行为,并探索控制差异和数据差异之间的关系。3)实...
【文章来源】:北京邮电大学北京市 211工程院校 教育部直属院校
【文章页数】:54 页
【学位级别】:硕士
【部分图文】:
图2-4:?close-files函数在sed?(vl,v2)中的控制流图??
根据求得的起点与终点,可将两个版本的控制流图整合成一个统一版本的控??制流图。首先,需要选定一个版本作为整合的基准版本,在本文中选择新版本作??为基准版本,如图3-1所示,以右图所示的控制流图为基准版本。在基准版本中,??为每个起点基本块增加一条逻辑边,指向比较版本中对应起点对应的后继独立基??本块。例如图3-1中(%0右->%1左)和(%4右->%11左)两条边。边上的文字表不真??分支(T)和假分支(F)。该边将比较版本的独有基本块与基准版本关联在一起。??通过这组边我们可以获得以下信息:在程序两个版本中,节点%〇的真分支指向??的基本块是各版本独有的。而针对节点%4,结论则变成节点%4的假分支指向的??基本块是各版本独有的。在比较版本中,为每个终点的独有前驱基本块增加一条??逻辑边,指向基准版本中对应的终点,例如图3-1中(%1?和(%1U_>%20???)两条边。通过这组边我们可以获得以下信息,在执行比较版本的独有代码时,??沿某分支执行可与基准版本重新共享代码。例如节点%]-沿真分支执行,则与基??准版本在节点%4重新开始共享代码
State?Merging?is?successful??图3-2?USE基本架构图??图3-2展示了执行模式属性切换的整体流程。统一分离执行模型(简称为??USE)利用动态符号执行实现执行引擎。USE为每一个符号执行状态增加一个新??的属性——执行模式,来实现在同一符号执行引擎内的统一分离执行。且每个状??态仅可能是以下三种模式中的一种:统一执行模式(简称UE),旧版本分离执??行模式(简称SPEO)和新版本分离执行模式(简称SPEN)。SPEO与SPEN统??称为分离执行模式。一个执行模式为UE的状态仅仅执行两个版本共享的代码逻??辑,而执行模式为分离执行模式的状态则执行各版本独有的代码逻辑。??图3-2中的分呙点(SplitPoint)和合并点(MergePoint)是执行模型中执行??模式发生切换的位置。其中,分离点是基准版本中代码差异的起点,例如图3-1??中的%0和%4,或是由于分支条件的改动,给定相同的输入,而程序的两个版本??沿不同的分支执行的分支语句所在的程序点。相应的,合并点是基准版本中代码??差异的终点,例如图3-1中的%4和%20,或是程序两个版本的控制流汇合的程??序点。??3.?1.4状态分离与状态合并??当一个UE模式的状态
本文编号:3519482
【文章来源】:北京邮电大学北京市 211工程院校 教育部直属院校
【文章页数】:54 页
【学位级别】:硕士
【部分图文】:
图2-4:?close-files函数在sed?(vl,v2)中的控制流图??
根据求得的起点与终点,可将两个版本的控制流图整合成一个统一版本的控??制流图。首先,需要选定一个版本作为整合的基准版本,在本文中选择新版本作??为基准版本,如图3-1所示,以右图所示的控制流图为基准版本。在基准版本中,??为每个起点基本块增加一条逻辑边,指向比较版本中对应起点对应的后继独立基??本块。例如图3-1中(%0右->%1左)和(%4右->%11左)两条边。边上的文字表不真??分支(T)和假分支(F)。该边将比较版本的独有基本块与基准版本关联在一起。??通过这组边我们可以获得以下信息:在程序两个版本中,节点%〇的真分支指向??的基本块是各版本独有的。而针对节点%4,结论则变成节点%4的假分支指向的??基本块是各版本独有的。在比较版本中,为每个终点的独有前驱基本块增加一条??逻辑边,指向基准版本中对应的终点,例如图3-1中(%1?和(%1U_>%20???)两条边。通过这组边我们可以获得以下信息,在执行比较版本的独有代码时,??沿某分支执行可与基准版本重新共享代码。例如节点%]-沿真分支执行,则与基??准版本在节点%4重新开始共享代码
State?Merging?is?successful??图3-2?USE基本架构图??图3-2展示了执行模式属性切换的整体流程。统一分离执行模型(简称为??USE)利用动态符号执行实现执行引擎。USE为每一个符号执行状态增加一个新??的属性——执行模式,来实现在同一符号执行引擎内的统一分离执行。且每个状??态仅可能是以下三种模式中的一种:统一执行模式(简称UE),旧版本分离执??行模式(简称SPEO)和新版本分离执行模式(简称SPEN)。SPEO与SPEN统??称为分离执行模式。一个执行模式为UE的状态仅仅执行两个版本共享的代码逻??辑,而执行模式为分离执行模式的状态则执行各版本独有的代码逻辑。??图3-2中的分呙点(SplitPoint)和合并点(MergePoint)是执行模型中执行??模式发生切换的位置。其中,分离点是基准版本中代码差异的起点,例如图3-1??中的%0和%4,或是由于分支条件的改动,给定相同的输入,而程序的两个版本??沿不同的分支执行的分支语句所在的程序点。相应的,合并点是基准版本中代码??差异的终点,例如图3-1中的%4和%20,或是程序两个版本的控制流汇合的程??序点。??3.?1.4状态分离与状态合并??当一个UE模式的状态
本文编号:3519482
本文链接:https://www.wllwen.com/kejilunwen/ruanjiangongchenglunwen/3519482.html