当前位置: 首页 > 专利查询>东南大学专利>正文

一种带环路径的编码、执行及解码方法技术

技术编号:7809282 阅读:428 留言:0更新日期:2012-09-27 08:04
本发明专利技术公开了一种带环路径的编码、执行及解码方法,其通过区分控制流图中节点的各条入边,保证有环情况下每条路径具有唯一的编码,并且结合面向对象软件中方法间调用关系的处理,使得该编码方案不仅可以应用于过程内路径,也可以应用于过程间路径,并能够处理多态、递归等复杂的调用关系。此外本发明专利技术还利用控制流图结构中无环子图的概念,并通过在无环子图中应用已有的无环路径编码方案,将子图中的路径编码与本方法的全局路径编码相结合,不仅保证了路径编码的唯一性,且起到了压缩编码空间、提升编码效率的效果。同时本发明专利技术还提供了针对性的执行和解码方法,简明易于实现。

【技术实现步骤摘要】

本专利技术涉及动态程序分析过程中执行信息的收集
,特别是ー种带环路径的编码、执行及解码方法
技术介绍
动态程序分析是基于程序执行的分析技术,所以收集程序的执行信息是动态分析方法不可缺少的一部分。为了高效的收集路径的执行信息,现有技术普遍采用路径编码的方式,将每条路径映射到ー个或ー组整数,以快速的判断当前执行的路径是否与已执行的某条路径相同,方便的进行执行次数的累加。相应的,为了实现路径的编码,在程序执行之前,首先要对程序进行插装,在分析程序的控制流图(CFG, control flow graph)的基础上,在程序的相关位置插入ー个或多个探针变量的值操作语句及相关的逻辑控制、探针收集等语句。这样当程序每一次执行完毕之后,所收集的路径编码计算结果就唯一确定该次执行 的路径。对于无环控制流,现有技术采用的路径编码方式是首先将无环控制流图的每条边分配ー个整数权值,各条无环路径的编码即为该路径中所有边对应权值之和。为了实现该种路径编码,在程序中插装的语句仅需在执行中将所执行的边的权值进行累加,便可计算出最終的路径编码。此类方法在处理无环路径上是精确的,且可以保证所有无环路径的编码是连续的整数(即路径编码是紧凑的),从而具有较高的存储效率。在处理循环的问题上,现有技术沿袭使用边的权值累加的办法进行编码的方案,但每条边在不同的循环执行情况可能具有不同的权值,采用带有逻辑判断的权值累加方案保证各条有环路径具有唯一的编码。但是在实际应用中,复杂的循环往往会导致逻辑判断过于复杂,难以处理。在实际的应用中,所处理的程序往往是带有循环的,且循环的结构和执行情况多种多祥,因此,针对带环路径的实用编码方案不可缺少。
技术实现思路
本专利技术的目的是提供一种带环路径的精确编码方法,其能够满足探针计算与路径编码方式能够保证各条路径的编码具有唯一性,达到精确收集有环控制流执行信息的效果;处理过程间各种调用的能力使该方法能够运用到在面向对象的场景之下。为了实现上述目的,本专利技术采取的技术方案为ー种带环路径的编码、执行及解码方法,其包括以下步骤 (1).从程序源码中获取各个过程之间的调用关系、每个过程内部的控制结构以及在控制结构基础上的无环子 (2).按照路径的不同类型执行相应的插装算法,即 对于过程内的路径,首先求出过程内部具有多个入边的节点集合,对于集合中的每个节点,定义其具有η条入边,将这η条入边依次与从O开始的n-Ι个连续整数相对应;然后在该边上插装加法和乘法相结合的探针计算语句,执行终点处的探针变量的值对应于所执行路径的编码,以使得到的路径编码具有唯一性; 对于过程间的路径,基于目标程序中各个过程之间的调用关系,以适当的策略将过程集簇;如果ー个多态调用涉及的被调用方法分布在多个簇中,则对相应的调用语句进行拆解,以使每个调用边的动态绑定情况局限于单个簇中;然后组合各个过程内的控制流图得到全局控制流;对于全局控制流图中的节点,按照过程内路径的方式按序进行插装,且对于有多个入边的节点,依次在其所有入边上插装乘法和加法相结合的探针计算语句; (3).执行插装后的程序,并收集相应的路径编码及其频率; (4).由收集到的信息在控制流图上进行回溯,将路径编码转化为路径,以获取路径的执行結果。具体的,在步骤(I)中,由控制流分析器获取控制流结构的相关信息,如过程间的 调用关系、过程内的控制流图以及在控制流图上得出无环子图,以应用于编码算法。无环子图(RAS, Reduciable Acyclic Subgraph)是控制流图中满足如下的条件的子图(1)子图是ー个单入口单出口结构;(2)子图中没有回边;(3)对于控制流图中子图之外的任意一个节点A,不存在从A指向子图入ロ以外节点的边,也不存在从子图出ロ以外节点指向A的边;(4)以子图中节点为端点的所有非回边都在子图中,即如果控制流中存在一条从子图的出口节点到其入口节点的回边,那么该回边可以不包括在子图中。在控制流结构中获取无环子图的意义在于,本专利技术的路径编码方法可以与已有的无环路径编码方法结合起来进行,能够在一定程度上压缩编码,提升效率。在获得过程间的调用关系后,需要进行集簇与多态处理。面向对象软件中可能存在着复杂的多态调用关系,即一条调用边在实际执行的动态绑定中可能对应多个被调用方法。对于多态调用的一种简单的处理方式是将存在多态关系的调用边拆分为多条调用边,同时在代码中添加对象类型的判定语句,使每个动态绑定的被调用方法都和一条调用边相对应。这样就可以将面向对象中的多态调用转换为传统的面向过程程序中的调用关系。但是,对于复杂的多态情況,一条调用边往往需要被拆分为许多条调用,每ー种动态绑定类型都需要做代码层次上的修改,增添了较大的耗费。如果能够将多个可能被调用的方法集簇处理,即全部或部分的避免上述拆分,较为简便。在获得过程内部的控制流图及其基础上的无环子图后,即进行探针计算与路径编码。在单个过程的控制流中,探针计算方式需要能够区分不同的路径。传统的无环路径编码方法采用的计算方式是对控制流中的边分配ー个整数作为权值,然后在执行过程中将所执行的边的权值累加。合适的权值分配算法能够保证所有的非循环路径对应于不同的探针变量取值。然而在带有循环的控制流中,由于加法具有交换性且存在着同样的边以不同顺序组成的相异路径,使用累加边的权值的方式无法进行有效的区分。所以本专利技术采用加法和乘法相结合的方式进行探针变量的计算。进ー步的,本专利技术步骤(2)中,探针计算语句为定义r’为无环子图的局部探针变量,r为单个过程内部的全局探针变量,η为执行終点的执行路径的数量,则执行终点处探针变量的值,即所执行路径的编码为r=r*n+r’。本专利技术中采用ー个整型变量作为探针变量,对于控制流图中每ー个具有多个入边的节点,在其所有入边上依次插装探针语句,使用乘法和加法相结合的方式进行计算,保证不同入边的执行对应不同的探针变量取值。这样,无论入边是循环回边还是普通边,不同路径必然对应于不同的路径编码。如果ー个节点有η个前驱,那么其η条入边依次对应于(Γη_1的整数,这种计算方式下,前驱中的探针取值和所执行的入边信息均可以保留。这样从路径编码可以准确、唯一的获知相应的路径。更进一歩的,在进行解码时,无环路径编码方法普遍采用的解码方式是在目标程序执行之如,枚举所有浄态无环路径,并建立甸条路径与其编码的对应关系表;在每次执行完毕时,按照所收集的编码查表即可得知所执行的路径。与无环控制流不同,对于包含循环的控制流,其上静态路径数目无限,无法枚挙。这样在目标程序执行之前,无法列出路径编码与路径的一一对应表。为了从路径编码的统计结果得出相应的路径执行结果,本专利技术采用路径回溯的方法获取编码所对应的路径,实现解码。 从探针计算方式可以看出,ー个节点处探针变量值对η取余即可得到所执行的入边编号,对η取商即可得到前驱节点处变量r的取值。这样以迭代的方式,可以由路径编码从程序的出ロ节点回溯到入口节点,即可获知相应的执行路径。回溯方式带来的好处在于回溯在目标程序执行之后进行,避免了对未执行路径的运算,由于所执行路径的数目与静态路径总数相比很小,这样省略了大量路径编码的处理。本专利技术的有益效果为 (1)本专利技术的路径编码方法能够保证各条循环路径编码的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.ー种带环路径的编码、执行及解码方法,其特征是,包括以下步骤 (1)从程序源码中获取各个过程之间的调用关系、每个过程内部的控制结构以及在控制结构基础上的无环子图; (2)按照路径的不同类型执行相应的插装算法,即 对于过程内的路径,首先求出过程内部具有多个入边的节点集合,对于集合中的每个节点,定义其具有η条入变,将这η条入边依次与从O开始的η-i个连续整数相对应;然后在该边上插装加法和乘法相结合的探针计算语句,执行终点处的探针变量的值对应于所执行路径的编码,以使得到的路径编码具有唯一性; 对于过程间的路径,基于目标程序中各个过程之间的调用关系,以适当的策略将过程集簇;如果ー个多态调用涉及的被调用方法分布在多个簇中,则对相应的调用语句进行拆解,以使每个调用边...

【专利技术属性】
技术研发人员:李必信王璐璐
申请(专利权)人:东南大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1