CN106547520A - 一种代码路径分析方法及装置 - Google Patents
一种代码路径分析方法及装置 Download PDFInfo
- Publication number
- CN106547520A CN106547520A CN201510589979.5A CN201510589979A CN106547520A CN 106547520 A CN106547520 A CN 106547520A CN 201510589979 A CN201510589979 A CN 201510589979A CN 106547520 A CN106547520 A CN 106547520A
- Authority
- CN
- China
- Prior art keywords
- path
- node
- tree
- function
- calling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Machine Translation (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供一种代码路径分析方法及装置,其中的方法可包括:为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;确定各个语法分析树的调用路径之间组合形成的完整调用路径。本发明可实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
Description
技术领域
本发明涉及数据处理技术领域,具体涉及一种代码路径分析方法及装置。
背景技术
苹果操作系统使用的开发语言为Object-c,Object-c主要应用在MAC系统软件开发,iOS系统软件开发等方面,Object-c代码中通常存在复杂的函数调用关系,而对于开发人员来说,很难将代码中各个函数之间的完整函数调用路径关系理解清楚,并且现有技术中也不存在专门针对Object-c代码中函数调用路径关系的研究。
发明内容
本发明实施例提供一种代码路径分析方法及装置,可实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
本发明第一方面提供一种代码路径分析方法,可包括:
为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
确定各个语法分析树的调用路径之间组合形成的完整调用路径。
本发明第二方面提供一种代码路径分析装置,可包括:
生成模块,用于为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
遍历模块,用于针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
确定模块,用于确定各个语法分析树的调用路径之间组合形成的完整调用路径。
实施本发明实施例,具有如下有益效果:
本发明实施例,为待执行代码中的每个函数生成语法分析树,该语法分析树用于表示以该函数为根节点的函数调用关系,针对每个函数的语法分析树,对语法分析树进行遍历,获取该语法分析树的每条调用路径,确定各个语法分析树的调用路径之间组合形成的完整调用路径,可以实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种代码路径分析方法的流程图;
图2为本发明实施例提供的另一种代码路径分析方法的流程图;
图3为本发明实施例提供的又一种代码路径分析方法的流程图;
图4为本发明实施例提供的一种代码路径分析装置的结构示意图;
图5为本发明实施例提供的一种确定模块的结构示意图;
图6为本发明实施例提供的一种确定单元的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面将结合附图1-附图3,对本发明实施例提供的代码路径分析方法进行详细介绍。
请参照图1,为本发明实施例提供的一种代码路径分析方法的流程图;该方法可包括以下步骤S100-步骤S102。
S100,为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
本发明实施例中,待执行代码的路径分析可以是基于libclang这个开发包,Libclang是一种封装好的基于clang编译器的前端开发包,可以提供各种对clang底层实现的接口。具体应用中,搭建开发环境,编译好适用于MAC机型的libclang.dylib动态链接文件,调用该动态链接文件库所提供的clang编译接口,解析object-c程序代码,经过词法分析接口,语法分析接口,得到程序代码中每个函数的抽象语法分析树(Abstract Syntax Tree,AST)。该语法树包含了obejct-c语言的类,函数,逻辑分支等关键结构。每个函数的语法分析树用于表示以该函数为根节点的函数调用关系,例如A函数的语法分析树,则用于表示以A函数为根节点的函数调用关系,A函数可以分别调用B函数或者C函数,则B函数和C函数是根节点下的分支节点。
S101,针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
本发明实施例中,每个函数均有对应的语法分析树,需要对每个语法分析树进行遍历分析。具体的,在遍历某一个语法分析树时,需要获取该语法分析树的每条调用路径,每条调用路径的起点均为该语法分析树对应的函数。例如,A函数对应的语法分析树具体为A节点下分别存在子节点B和子节点C,即是A函数可以调用B函数,A函数还可以调用C函数。则在对A函数对应的语法分析树进行遍历时,可以获取该语法分析树的两条调用路径,分别为A-B和A-C。
具体可选的,针对每个所述函数的语法分析树,从所述语法分析树的根节点开始,按照深度优先遍历算法,获取所述语法分析树的每一条调用路径。
本发明实施例中,对语法分析树采用深度优先算法,获取各个节点和叶子节点以及各个节点和叶子节点之间组成的调用路径,并将各个节点和叶子节点形成的调用路径入栈存储。具体的,从AST的根节点开始进行遍历,并判断当前节点是否遍历完,如果没有,继续遍历当前节点的子节点,判断子节点是否是叶子节点,如果是叶子节点,则说明该调用路径已经遍历完,继续返回上一级节点,并搜寻其分支节点。如果该子节点不是叶子节点,则将继续递归搜寻其子节点。如果该语法分析树所有节点遍历完成,则AST语法分析树遍历完全。输出栈内的节点信息和以及各节点之间的调用关系,即是栈内存储的该语法分析树的各条调用路径。
S102,确定各个语法分析树的调用路径之间组合形成的完整调用路径。
本发明实施例中,当将所有语法分析树的调用路径均确定后,则可以进一步确定各个语法分析树的调用路径之间组合形成的完整调用路径。具体确定方法可以是将各个语法分析树的调用路径以集合的形式进行存储,然后从任意一个集合中的任意一条路径开始进行遍历分析,判断该路径的节点是否为该路径的最后一个节点,若不是最后一个节点,则需要进一步遍历该路径的下一个节点;若该路径的节点为该路径的最后一个节点,则进一步判断该节点信息所表示的函数是否为函数结束块,若为函数结束块,则将该节点标识为结束节点,若不是函数结束块,则根据该节点信息所表示的函数确定目标集合,继续以上述A-B和A-C调用路径为例进行说明,若B函数不是函数结束块,且B函数对应一个语法分析树的调用路径集合,该集合内的每条调用路径均是以B函数为根节点的路径。则可以将B函数对应集合内的调用路径与A-B调用路径进行组合形成完整调用路径。
本发明实施例,为待执行代码中的每个函数生成语法分析树,该语法分析树用于表示以该函数为根节点的函数调用关系,针对每个函数的语法分析树,对语法分析树进行遍历,获取该语法分析树的每条调用路径,确定各个语法分析树的调用路径之间组合形成的完整调用路径,可以实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
请参照图2,为本发明实施例提供的另一种代码路径分析方法的流程图;该方法可包括以下步骤S200-步骤S203。
S200,为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
S201,针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
本发明实施例步骤S200-S201请参照图1的实施例步骤S100-S101,在此不再赘述。
S202,将每个所述语法分析树的调用路径以集合保存,一个集合对应一个语法分析树的至少一条调用路径;
本发明实施例中,将每个语法分析树的调用路径以集合的形式保存,即是一个函数的语法分析树对应一个集合,该集合内包括至少一条调用路径。继续以上述A函数的调用路径为例进行说明,则A函数的集合内保存了A-B和A-C两条调用路径。
S203,根据每个集合内每条调用路径中的节点信息,确定各个集合之间各条调用路径组合形成的完整调用路径。
本发明实施例中,以任意一个集合内的任意一条调用路径开始进行分析,根据节点信息确定各个集合之间各条调用路径组合形成的完整调用路径。具体可选的,根据节点信息所表示的函数确定所映射的目标集合,然后将目标集合内的各条调用路径与该节点对应的调用路径进行组合形成完整调用路径。
继续以上述A-B调用路径为例进行说明,假设B函数对应的目标集合内包括B-D和B-F两条调用路径,且D函数和F函数为函数结束块,则根据B节点所表示的B函数确定的完整调用路径为A-B-D和A-B-F。
本发明实施例,为待执行代码中的每个函数生成语法分析树,该语法分析树用于表示以该函数为根节点的函数调用关系,针对每个函数的语法分析树,对语法分析树进行遍历,获取该语法分析树的每条调用路径,确定各个语法分析树的调用路径之间组合形成的完整调用路径,可以实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
请参照图3,为本发明实施例提供的又一种代码路径分析方法的流程图;该方法可包括以下步骤S300-步骤S308。
S300,为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
S301,针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
S302,将每个所述语法分析树的调用路径以集合保存,一个集合对应一个语法分析树的至少一条调用路径;
本发明实施例步骤S300-S302请参照图2的实施例步骤S200-S202,在此不再赘述。
S303,针对每个集合内的每条调用路径,判断所述调用路径的节点是否为所述调用路径的最后一个节点;
本发明实施例中,针对每个集合内的每条调用路径,对该调用路径的节点进行分析,判断节点是否为该调用路径的最后一个节点,例如,上述调用路径A-B中的B即是该调用路径的最后一个节点。
S304,若所述调用路径的节点不是所述调用路径的最后一个节点,遍历所述节点在所述调用路径的下一节点,并根据所述下一节点信息确定与所述节点对应的调用路径组合形成的完整调用路径。
本发明实施例中,若节点不是调用路径的最后一个节点,则需要继续遍历该调用路径的下一个节点,根据下一节点信息确定完整调用路径,例如,上述调用路径A-B中,A节点不是该调用路径的最后一个节点,因此需要遍历下一节点B,根据节点B确定完整调用路径,具体的确定方法仍然可以采用本发明实施例中S303-S308各个步骤中的方式。
S305,若是最后一个节点,判断所述节点信息所表示的函数是否为函数结束块;
本发明实施例中,若该节点是调用路径的最后一个节点,进一步对该节点信息所表示的函数进行分析,判断该节点信息所表示的函数是否为函数结束块,函数结束块即是函数出口,也即是一个完整调用路径的结束函数。
S306,若所述调用路径的节点信息所表示的函数是函数结束块,则将所述节点标识为结束节点。
本发明实施例中,若节点信息所表示的函数是函数结束块,则搜寻算法结束,并将该节点标识为结束节点。
S307,若不是函数结束块,则判断所述节点信息所表示的函数是否存在对应的目标集合;
本发明实施例中,若该节点信息所表示的函数不是函数结束块,需要进一步判断该节点信息所表示的函数是否存在对应的目标集合。即是判断该函数是否进一步调用其它函数,继续以上述A-B调用路径为例进行说明,假设B函数对应的目标集合内包括B-D和B-F两条调用路径,即是B函数分别调用D函数和F函数,则判断出该节点信息所表示的B函数存在对应的目标集合。
S308,若存在,则将所述目标集合内的各条调用路径与所述节点对应的调用路径进行组合形成完整调用路径。
本发明实施例中,将目标集合内各条调用路径与该节点对应的调用路径进行组合形成完整调用路径。假设D函数和F函数分别为函数结束块,则根据B节点所表示的B函数确定的完整调用路径为A-B-D和A-B-F,即是将目标集合内的各条调用路径与调用路径A-B进行组合。
本发明实施例,为待执行代码中的每个函数生成语法分析树,该语法分析树用于表示以该函数为根节点的函数调用关系,针对每个函数的语法分析树,对语法分析树进行遍历,获取该语法分析树的每条调用路径,确定各个语法分析树的调用路径之间组合形成的完整调用路径,可以实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
下面将结合附图4-附图6,对本发明实施例提供的一种代码路径分析装置进行详细介绍。
请参阅图4,为本发明实施例提供的一种代码路径分析装置的结构示意图;该装置可包括:生成模块100、遍历模块101以及确定模块102;
生成模块100,用于为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
本发明实施例中,待执行代码的路径分析可以是基于libclang这个开发包,Libclang是一种封装好的基于clang编译器的前端开发包,可以提供各种对clang底层实现的接口。具体应用中,搭建开发环境,编译好适用于MAC机型的libclang.dylib动态链接文件,生成模块100调用该动态链接文件库所提供的clang编译接口,解析object-c程序代码,经过词法分析接口,语法分析接口,得到程序代码中每个函数的抽象语法分析树(Abstract Syntax Tree,AST)。该语法树包含了obejct-c语言的类,函数,逻辑分支等关键结构。每个函数的语法分析树用于表示以该函数为根节点的函数调用关系,例如A函数的语法分析树,则用于表示以A函数为根节点的函数调用关系,A函数可以分别调用B函数或者C函数,则B函数和C函数是根节点下的分支节点。
遍历模块101,用于针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
本发明实施例中,每个函数均有对应的语法分析树,遍历模块101需要对每个语法分析树进行遍历分析。具体的,在遍历某一个语法分析树时,需要获取该语法分析树的每条调用路径,每条调用路径的起点均为该语法分析树对应的函数。例如,A函数对应的语法分析树具体为A节点下分别存在子节点B和子节点C,即是A函数可以调用B函数,A函数还可以调用C函数。则在对A函数对应的语法分析树进行遍历时,可以获取该语法分析树的两条调用路径,分别为A-B和A-C。
可选的,所述遍历模块101具体用于从所述语法分析树的根节点开始,按照深度优先遍历算法,获取所述语法分析树的每一条调用路径。
本发明实施例中,遍历模块101对语法分析树采用深度优先算法,获取各个节点和叶子节点以及各个节点和叶子节点之间组成的调用路径,并将各个节点和叶子节点形成的调用路径入栈存储。具体的,从AST的根节点开始进行遍历,并判断当前节点是否遍历完,如果没有,继续遍历当前节点的子节点,判断子节点是否是叶子节点,如果是叶子节点,则说明该调用路径已经遍历完,继续返回上一级节点,并搜寻其分支节点。如果该子节点不是叶子节点,则将继续递归搜寻其子节点。如果该语法分析树所有节点遍历完成,则AST语法分析树遍历完全。输出栈内的节点信息和以及各节点之间的调用关系,即是栈内存储的该语法分析树的各条调用路径。
确定模块102,用于确定各个语法分析树的调用路径之间组合形成的完整调用路径。
本发明实施例中,当将所有语法分析树的调用路径均确定后,确定模块102则可以进一步确定各个语法分析树的调用路径之间组合形成的完整调用路径。具体确定方法可以是将各个语法分析树的调用路径以集合的形式进行存储,然后从任意一个集合中的任意一条路径开始进行遍历分析,判断该路径的节点是否为该路径的最后一个节点,若不是最后一个节点,则需要进一步遍历该路径的下一个节点;若该路径的节点为该路径的最后一个节点,则进一步判断该节点信息所表示的函数是否为函数结束块,若为函数结束块,则将该节点标识为结束节点,若不是函数结束块,则根据该节点信息所表示的函数确定目标集合,继续以上述A-B和A-C调用路径为例进行说明,若B函数不是函数结束块,且B函数对应一个语法分析树的调用路径集合,该集合内的每条调用路径均是以B函数为根节点的路径。则可以将B函数对应集合内的调用路径与A-B调用路径进行组合形成完整调用路径。
可选的,如图5所示,确定模块102可以包括保存单元1020和确定单元1021;
保存单元1020,用于将每个所述语法分析树的调用路径以集合保存,一个集合对应一个语法分析树的至少一条调用路径;
本发明实施例中,保存单元1020将每个语法分析树的调用路径以集合的形式保存,即是一个函数的语法分析树对应一个集合,该集合内包括至少一条调用路径。继续以上述A函数的调用路径为例进行说明,则A函数的集合内保存了A-B和A-C两条调用路径。
确定单元1021,用于根据每个集合内每条调用路径中的节点信息,确定各个集合之间各条调用路径组合形成的完整调用路径。
本发明实施例中,确定单元1021以任意一个集合内的任意一条调用路径开始进行分析,根据节点信息确定各个集合之间各条调用路径组合形成的完整调用路径。具体可选的,根据节点信息所表示的函数确定所映射的目标集合,然后将目标集合内的各条调用路径与该节点对应的调用路径进行组合形成完整调用路径。
继续以上述A-B调用路径为例进行说明,假设B函数对应的目标集合内包括B-D和B-F两条调用路径,且D函数和F函数为函数结束块,则根据B节点所表示的B函数确定的完整调用路径为A-B-D和A-B-F。
进一步可选的,如图6所示,确定单元1021可以包括第一判断子单元10、第二判断子单元11、第三判断子单元12以及组合子单元13;
第一判断子单元10,用于针对每个集合内的每条调用路径,判断所述调用路径的节点是否为所述调用路径的最后一个节点;
本发明实施例中,针对每个集合内的每条调用路径,对该调用路径的节点进行分析,第一判断子单元10判断节点是否为该调用路径的最后一个节点,例如,上述调用路径A-B中的B即是该调用路径的最后一个节点。
第二判断子单元11,用于若是最后一个节点,判断所述节点信息所表示的函数是否为函数结束块;
本发明实施例中,若该节点是调用路径的最后一个节点,进一步对该节点信息所表示的函数进行分析,第二判断子单元11判断该节点信息所表示的函数是否为函数结束块,函数结束块即是函数出口,也即是一个完整调用路径的结束函数。
第三判断子单元12,用于若不是函数结束块,则判断所述节点信息所表示的函数是否存在对应的目标集合;
本发明实施例中,若该节点信息所表示的函数不是函数结束块,第三判断子单元12需要进一步判断该节点信息所表示的函数是否存在对应的目标集合。即是判断该函数是否进一步调用其它函数,继续以上述A-B调用路径为例进行说明,假设B函数对应的目标集合内包括B-D和B-F两条调用路径,即是B函数分别调用D函数和F函数,则判断出该节点信息所表示的B函数存在对应的目标集合。
组合子单元13,用于若存在,则将所述目标集合内的各条调用路径与所述节点对应的调用路径进行组合形成完整调用路径。
本发明实施例中,组合子单元13将目标集合内各条调用路径与该节点对应的调用路径进行组合形成完整调用路径。假设D函数和F函数分别为函数结束块,则根据B节点所表示的B函数确定的完整调用路径为A-B-D和A-B-F,即是将目标集合内的各条调用路径与调用路径A-B进行组合。
可选的,所述确定单元1021还包括遍历子单元14;
遍历子单元14,用于若所述调用路径的节点不是所述调用路径的最后一个节点,遍历所述节点在所述调用路径的下一节点,并根据所述下一节点信息确定与所述节点对应的调用路径组合形成的完整调用路径。
本发明实施例中,若节点不是调用路径的最后一个节点,遍历子单元14则需要继续遍历该调用路径的下一个节点,根据下一节点信息确定完整调用路径,例如,上述调用路径A-B中,A节点不是该调用路径的最后一个节点,因此需要遍历下一节点B,根据节点B确定完整调用路径
可选的,所述确定单元1021还包括标识子单元15;
标识子单元15,用于若所述调用路径的节点信息所表示的函数是函数结束块,则将所述节点标识为结束节点。
本发明实施例中,若节点信息所表示的函数是函数结束块,则搜寻算法结束,标识子单元15并将该节点标识为结束节点。
本发明实施例,为待执行代码中的每个函数生成语法分析树,该语法分析树用于表示以该函数为根节点的函数调用关系,针对每个函数的语法分析树,对语法分析树进行遍历,获取该语法分析树的每条调用路径,确定各个语法分析树的调用路径之间组合形成的完整调用路径,可以实现对待执行代码中的函数调用路径关系的研究分析,且分析方式简单。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,附图4-附图6所示代码路径分析装置的模块、单元以及子单元对应的程序可存储在代码路径分析装置的可读存储介质内,并被该代码路径分析装置中的至少一个处理器执行,以实现上述代码路径分析方法,该方法包括图1至图3中各方法实施例所述的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(RandomAccess Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (12)
1.一种代码路径分析方法,其特征在于,包括:
为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
确定各个语法分析树的调用路径之间组合形成的完整调用路径。
2.如权利要求1所述的方法,其特征在于,所述确定各个语法分析树的调用路径之间组合形成的完整调用路径,包括:
将每个所述语法分析树的调用路径以集合保存,一个集合对应一个语法分析树的至少一条调用路径;
根据每个集合内每条调用路径中的节点信息,确定各个集合之间各条调用路径组合形成的完整调用路径。
3.如权利要求2所述的方法,其特征在于,所述根据每个集合内每条调用路径中的节点信息,确定各个集合之间各条调用路径组合形成的完整调用路径,包括:
针对每个集合内的每条调用路径,判断所述调用路径的节点是否为所述调用路径的最后一个节点;
若是最后一个节点,判断所述节点信息所表示的函数是否为函数结束块;
若不是函数结束块,则判断所述节点信息所表示的函数是否存在对应的目标集合;
若存在,则将所述目标集合内的各条调用路径与所述节点对应的调用路径进行组合形成完整调用路径。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述调用路径的节点不是所述调用路径的最后一个节点,遍历所述节点在所述调用路径的下一节点,并根据所述下一节点信息确定与所述节点对应的调用路径组合形成的完整调用路径。
5.如权利要求3所述的方法,其特征在于,所述方法还包括:
若所述调用路径的节点信息所表示的函数是函数结束块,则将所述节点标识为结束节点。
6.如权利要求1所述的方法,其特征在于,所述对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,包括:
从所述语法分析树的根节点开始,按照深度优先遍历算法,获取所述语法分析树的每一条调用路径。
7.一种代码路径分析装置,其特征在于,包括:
生成模块,用于为待执行代码中的每个函数生成语法分析树,所述语法分析树用于表示以该函数为根节点的函数调用关系;
遍历模块,用于针对每个所述函数的语法分析树,对所述语法分析树进行遍历,获取所述语法分析树的每条调用路径,所述调用路径包括至少一个节点;
确定模块,用于确定各个语法分析树的调用路径之间组合形成的完整调用路径。
8.如权利要求7所述的装置,其特征在于,所述确定模块包括:
保存单元,用于将每个所述语法分析树的调用路径以集合保存,一个集合对应一个语法分析树的至少一条调用路径;
确定单元,用于根据每个集合内每条调用路径中的节点信息,确定各个集合之间各条调用路径组合形成的完整调用路径。
9.如权利要求8所述的装置,其特征在于,所述确定单元包括:
第一判断子单元,用于针对每个集合内的每条调用路径,判断所述调用路径的节点是否为所述调用路径的最后一个节点;
第二判断子单元,用于若是最后一个节点,判断所述节点信息所表示的函数是否为函数结束块;
第三判断子单元,用于若不是函数结束块,则判断所述节点信息所表示的函数是否存在对应的目标集合;
组合子单元,用于若存在,则将所述目标集合内的各条调用路径与所述节点对应的调用路径进行组合形成完整调用路径。
10.如权利要求9所述的装置,其特征在于,所述确定单元还包括:
遍历子单元,用于若所述调用路径的节点不是所述调用路径的最后一个节点,遍历所述节点在所述调用路径的下一节点,并根据所述下一节点信息确定与所述节点对应的调用路径组合形成的完整调用路径。
11.如权利要求9所述的装置,其特征在于,所述确定单元还包括:
标识子单元,用于若所述调用路径的节点信息所表示的函数是函数结束块,则将所述节点标识为结束节点。
12.如权利要求7所述的装置,其特征在于,所述遍历模块具体用于从所述语法分析树的根节点开始,按照深度优先遍历算法,获取所述语法分析树的每一条调用路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510589979.5A CN106547520B (zh) | 2015-09-16 | 2015-09-16 | 一种代码路径分析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510589979.5A CN106547520B (zh) | 2015-09-16 | 2015-09-16 | 一种代码路径分析方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106547520A true CN106547520A (zh) | 2017-03-29 |
CN106547520B CN106547520B (zh) | 2021-05-28 |
Family
ID=58361809
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510589979.5A Active CN106547520B (zh) | 2015-09-16 | 2015-09-16 | 一种代码路径分析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106547520B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106970820A (zh) * | 2017-04-26 | 2017-07-21 | 腾讯科技(深圳)有限公司 | 代码存储方法及代码存储装置 |
CN108874470A (zh) * | 2017-05-11 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及服务器、计算机存储介质 |
CN109117633A (zh) * | 2018-08-13 | 2019-01-01 | 百度在线网络技术(北京)有限公司 | 静态源码扫描方法、装置、计算机设备及存储介质 |
CN109600718A (zh) * | 2019-01-22 | 2019-04-09 | 华中科技大学 | 一种基于抽象媒体访问控制层的局部广播方法 |
CN110032394A (zh) * | 2019-04-12 | 2019-07-19 | 深圳市腾讯信息技术有限公司 | 一种无源码文件的分析方法、装置和存储介质 |
CN110543427A (zh) * | 2019-09-06 | 2019-12-06 | 五八有限公司 | 测试用例存储方法、装置、电子设备及存储介质 |
CN111694570A (zh) * | 2019-03-13 | 2020-09-22 | 南京大学 | 一种基于静态程序分析的JavaScript函数参数不匹配检测方法 |
CN112181370A (zh) * | 2020-09-17 | 2021-01-05 | 武汉联影医疗科技有限公司 | 数据交互关系的生成方法、计算机设备和存储介质 |
CN112596737A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 一种函数调用关系的扫描方法、系统、设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020184615A1 (en) * | 2001-04-25 | 2002-12-05 | Sumner William Earl | System and method for selectively and automatically modifying the source code of a computer program |
CN1859359A (zh) * | 2005-07-12 | 2006-11-08 | 上海华为技术有限公司 | 用抽象语法规则描述的通信协议的实现方法及其装置 |
CN102012833A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于编译过程中间结果的静态堆栈检测方法 |
CN102541544A (zh) * | 2011-12-20 | 2012-07-04 | 北京数码大方科技有限公司 | 树形控件的处理方法、装置及系统 |
CN102831121A (zh) * | 2011-06-15 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种网页信息抽取的方法和系统 |
CN103186406A (zh) * | 2011-12-30 | 2013-07-03 | 国际商业机器公司 | 用于控制流分析的方法和装置 |
CN103473076A (zh) * | 2013-09-25 | 2013-12-25 | 中国联合网络通信集团有限公司 | 一种代码版本的发布方法及系统 |
CN104111855A (zh) * | 2014-07-29 | 2014-10-22 | 广东能龙教育股份有限公司 | 一种基于Lua的iOS客户端功能动态更新的方法 |
CN104503917A (zh) * | 2015-01-04 | 2015-04-08 | 牟永敏 | 基于数据流函数调用路径的变更影响域分析方法及系统 |
CN104536895A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 一种面向Java函数调用路径的测试过程跟踪方法及系统 |
CN104899147A (zh) * | 2015-06-19 | 2015-09-09 | 北京理工大学 | 一种面向安全检查的代码静态分析方法 |
-
2015
- 2015-09-16 CN CN201510589979.5A patent/CN106547520B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020184615A1 (en) * | 2001-04-25 | 2002-12-05 | Sumner William Earl | System and method for selectively and automatically modifying the source code of a computer program |
CN1859359A (zh) * | 2005-07-12 | 2006-11-08 | 上海华为技术有限公司 | 用抽象语法规则描述的通信协议的实现方法及其装置 |
CN102012833A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于编译过程中间结果的静态堆栈检测方法 |
CN102831121A (zh) * | 2011-06-15 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种网页信息抽取的方法和系统 |
CN102541544A (zh) * | 2011-12-20 | 2012-07-04 | 北京数码大方科技有限公司 | 树形控件的处理方法、装置及系统 |
CN103186406A (zh) * | 2011-12-30 | 2013-07-03 | 国际商业机器公司 | 用于控制流分析的方法和装置 |
CN103473076A (zh) * | 2013-09-25 | 2013-12-25 | 中国联合网络通信集团有限公司 | 一种代码版本的发布方法及系统 |
CN104111855A (zh) * | 2014-07-29 | 2014-10-22 | 广东能龙教育股份有限公司 | 一种基于Lua的iOS客户端功能动态更新的方法 |
CN104503917A (zh) * | 2015-01-04 | 2015-04-08 | 牟永敏 | 基于数据流函数调用路径的变更影响域分析方法及系统 |
CN104536895A (zh) * | 2015-01-12 | 2015-04-22 | 牟永敏 | 一种面向Java函数调用路径的测试过程跟踪方法及系统 |
CN104899147A (zh) * | 2015-06-19 | 2015-09-09 | 北京理工大学 | 一种面向安全检查的代码静态分析方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106970820A (zh) * | 2017-04-26 | 2017-07-21 | 腾讯科技(深圳)有限公司 | 代码存储方法及代码存储装置 |
CN108874470A (zh) * | 2017-05-11 | 2018-11-23 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及服务器、计算机存储介质 |
CN109117633A (zh) * | 2018-08-13 | 2019-01-01 | 百度在线网络技术(北京)有限公司 | 静态源码扫描方法、装置、计算机设备及存储介质 |
CN109600718A (zh) * | 2019-01-22 | 2019-04-09 | 华中科技大学 | 一种基于抽象媒体访问控制层的局部广播方法 |
CN111694570A (zh) * | 2019-03-13 | 2020-09-22 | 南京大学 | 一种基于静态程序分析的JavaScript函数参数不匹配检测方法 |
CN110032394A (zh) * | 2019-04-12 | 2019-07-19 | 深圳市腾讯信息技术有限公司 | 一种无源码文件的分析方法、装置和存储介质 |
CN110032394B (zh) * | 2019-04-12 | 2022-05-31 | 深圳市腾讯信息技术有限公司 | 一种无源码文件的分析方法、装置和存储介质 |
CN110543427A (zh) * | 2019-09-06 | 2019-12-06 | 五八有限公司 | 测试用例存储方法、装置、电子设备及存储介质 |
CN112181370A (zh) * | 2020-09-17 | 2021-01-05 | 武汉联影医疗科技有限公司 | 数据交互关系的生成方法、计算机设备和存储介质 |
CN112181370B (zh) * | 2020-09-17 | 2023-02-28 | 武汉联影医疗科技有限公司 | 数据交互关系的生成方法、计算机设备和存储介质 |
CN112596737A (zh) * | 2020-12-28 | 2021-04-02 | 上海品顺信息科技有限公司 | 一种函数调用关系的扫描方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106547520B (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106547520A (zh) | 一种代码路径分析方法及装置 | |
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
CN106227668B (zh) | 数据处理方法和装置 | |
Buchsbaum et al. | Linear-time algorithms for dominators and other path-evaluation problems | |
CN106528399A (zh) | 一种测试用例确定方法及装置 | |
CN106462425A (zh) | 复常量 | |
CN103713933B (zh) | 计算机程序中热点函数、变量的汇聚方法、装置及系统 | |
CN106970820A (zh) | 代码存储方法及代码存储装置 | |
CN110018829A (zh) | 提高pl/sql语言解释器执行效率的方法及装置 | |
CN107015841A (zh) | 一种程序编译的预处理方法及程序编译设备 | |
CN112988163B (zh) | 编程语言智能适配方法、装置、电子设备和介质 | |
CN110673852B (zh) | 一种基于编译器前端实现控制流平坦的方法、系统及设备 | |
CN114217886A (zh) | 一种函数调用方法、计算设备及存储介质 | |
CN109933786B (zh) | 基于编译规则的应答器报文工具的构建方法 | |
Caccetta et al. | A branch and cut method for the degree‐constrained minimum spanning tree problem | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN105069306A (zh) | 基于工作流网模型的事件日志审计方法 | |
CN107545182A (zh) | 一种ios应用中绕过函数调用链检测的方法及系统 | |
CN107608873A (zh) | 软件测试方法和系统及测试平台 | |
Groz et al. | Deterministic regular expressions in linear time | |
CN107301079A (zh) | 一种计算机程序语言的编译方法和编译器 | |
US10642714B2 (en) | Mapping dynamic analysis data to source code | |
Wen et al. | Code similarity detection using ast and textual information | |
CN112015426A (zh) | 一种代码管理方法、装置及设备 | |
CN112559760A (zh) | 一种面向文本描述的cps资源能力知识图谱构建方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |