CN103186406B - 用于控制流分析的方法和装置 - Google Patents
用于控制流分析的方法和装置 Download PDFInfo
- Publication number
- CN103186406B CN103186406B CN201110461369.9A CN201110461369A CN103186406B CN 103186406 B CN103186406 B CN 103186406B CN 201110461369 A CN201110461369 A CN 201110461369A CN 103186406 B CN103186406 B CN 103186406B
- Authority
- CN
- China
- Prior art keywords
- function
- tree
- call
- node
- simplified
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000005206 flow analysis Methods 0.000 title claims abstract description 19
- KRTSDMXIXPKRQR-AATRIKPKSA-N monocrotophos Chemical compound CNC(=O)\C=C(/C)OP(=O)(OC)OC KRTSDMXIXPKRQR-AATRIKPKSA-N 0.000 claims abstract description 30
- 230000006870 function Effects 0.000 claims description 355
- 238000005304 joining Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 15
- 230000008569 process Effects 0.000 description 10
- 238000004590 computer program Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000001914 filtration Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000012772 sequence design Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Telephonic Communication Services (AREA)
Abstract
根据本发明实施例的一种用于控制流分析的方法包括:获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树。根据本发明实施例,可以简化用于控制流分析的函数调用树。
Description
技术领域
本发明涉及数据分析技术,更具体地说,涉及用于控制流分析的方法和设备。
背景技术
控制流分析(control flow analysis)是对计算机程序进行性能分析的一个重要环节。控制流分析的基础是计算机程序的各函数之间的调用关系。本领域技术人员可以理解,这里所说的函数,指的是能够独立完成一定功能的代码单元,在某些场合下也可以称为方法等。调用函数向被调用函数传递参数,被调用函数对所述参数进行计算,然后将计算结果返回给调用函数。通常将函数调用关系记录下来用函数调用树(Call Tree)来表示。在函数调用树中,父节点表示调用函数,子节点表示被调用函数。使用函数调用树来表示函数之间的调用关系有助于确定被频繁调用的函数以及CPU时间开销过高的函数,从而确定程序的性能瓶颈,进而改进程序的性能。例如,对频繁被调用的函数,可以采用更加复杂的优化算法进行优化,或减少调用次数。
如今的程序大多包含复杂的业务逻辑,其对应的函数调用树本身非常庞大。例如,企业级的应用程序通常包含超过10万的调用和超过200的调用层级。由于这类应用程序非常复杂,在真正的业务逻辑之外还存在很多辅助软件模块的“噪声”调用。对庞大的函数调用树进行分析需要花费大量的时间和精力。此外,现代应用程序往往基于复杂的框架(Framework),而应用的业务逻辑往往被封装在框架内部,难以对这些被封装的业务逻辑和框架进行分离,从而进行更准确的分析。
因此,需要一种方法来对函数调用树进行简化,从而使得函数调用树能够更好地用于控制流分析,发现可能的性能瓶颈。
发明内容
本发明实施例提供了用于控制流分析的方法和装置。
根据本发明实施例的用于控制流分析的方法包括:获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树。
根据本发明实施例的用于控制流分析的设备包括:获取装置,配置为获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;生成装置,配置为根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;简化装置,配置为根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树。
根据本发明实施例,可以简化用于控制流分析的调用树。
附图说明
图1是适于用来实现本发明实施方式的示例性计算系统100的框图。
图2是根据本发明实施例的用于控制流分析的方法的流程图。
图3(a)到图3(d)是根据本发明实施例的用于控制流分析的方法的处理示意图。
图4是根据本发明实施例的用于控制流分析的装置的框图。
具体实施方式
所属技术领域的技术人员知道,本发明的多个方面可以体现为系统、方法或计算机程序产品。因此,本发明的多个方面可以具体实现为以下形式,即,可以是完全的硬件、完全的软件(包括固件、驻留软件、微代码等)、或者本文一般称为“电路”、“模块”或“系统”的软件部分与硬件部分的组合。此外,本发明的多个方面还可以采取体现在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可用的程序码。
可以使用一个或多个计算机可读的介质的任何组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电的、磁的、光的、电磁的、红外线的、或半导体的系统、装置、器件或任何以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括以下:有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任何合适的组合。在本文件的语境中,计算机可读存储介质可以是任何包含或存储程序的有形的介质,该程序被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可包括在基带中或者作为载波一部分传播的、其中体现计算机可读的程序码的传播的数据信号。这种传播的信号可以采用多种形式,包括——但不限于——电磁信号、光信号或任何以上合适的组合。计算机可读的信号介质可以是并非为计算机可读存储介质、但是能发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序的任何计算机可读介质。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者任何合适的上述组合。
用于执行本发明的操作的计算机程序码,可以以一种或多种程序设计语言的任何组合来编写,所述程序设计语言包括面向对象的程序设计语言-诸如Java、Smalltalk、C++之类,还包括常规的过程式程序设计语言-诸如“C”程序设计语言或类似的程序设计语言。程序码可以完全地在用户的计算上执行、部分地在用户的计算机上执行、作为一个独立的软件包执行、部分在用户的计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种情形中,远程计算机可以通过任何种类的网络——包括局域网(LAN)或广域网(WAN)-连接到用户的计算机,或者,可以(例如利用因特网服务提供商来通过因特网)连接到外部计算机。
以下参照按照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的多个方面。要明白的是,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得通过计算机或其它可编程数据处理装置执行的这些指令,产生实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能指令计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令产生一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品。
也可以把计算机程序指令加载到计算机或其它可编程数据处理装置上,使得在计算机或其它可编程数据处理装置上执行一系列操作步骤,以产生计算机实现的过程,从而在计算机或其它可编程装置上执行的指令就提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
下面参照附图,结合具体实施例对本发明进行描述。这样的描述仅仅出于说明目的,而不意图对本发明的范围进行限制。
图1示出了适于用来实现本发明实施方式的示例性计算系统100的框图。如所示,计算机系统100可以包括:CPU(中央处理单元)101、RAM(随机存取存储器)102、ROM(只读存储器)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。在这些设备中,与系统总线104耦合的有CPU 101、RAM 102、ROM 103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅为了示例的目的而示出的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况而增加或者减少某些设备。
为了对调用树进行简化,可以考虑过滤的方法。显然,对调用树上的节点进行逐个分析以便确定是否该从调用树上去除该节点,这种方法是不现实的。比较现实的做法是由分析员(analyst)设定过滤标准,然后根据该过滤标准对调用树进行过滤。例如,为了将调用树中与Java软件开发工具包(SDK,SoftwareDevelopment Kit)的库函数的节点去除,可以将过滤标准设置为“将名称以字符‘java/’开始的节点去除”。又例如,可以将被调用次数小于一定阈值的节点从调用树中去除,即将过滤标准设置为“将被调用次数小于阈值的节点去除”。采用过滤的方法需要分析员对程序具有非常深刻的了解。过滤标准设置不当要么起不到对函数调用树进行简化的效果,要么会将关键节点从调用树上去除从而导致关键信息丢失。此外,将实际的过滤需求转换成可以执行的过滤标准也对分析员提出了很高的要求。例如,并非所有与Java软件开发工具包(SDK,Software Development Kit)的库函数节点的名称都以字符“java/”开始。
下面参照图2描述根据本发明实施例的用于进行控制流分析的方法。在下面的描述中,函数和节点对应。
步骤201,获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,原始函数调用树的节点之间的父子关系表示函数之间的调用关系。
本领域技术人员可以通过很多手段获取程序的原始函数调用树,例如可以通过静态分析的方法从源代码或目标代码中获取原始函数调用树,也可以通过动态分析的方法在程序的执行过程中获取原始函数调用树。在动态分析方法中,在调用函数进行调用时需要进行入栈、跳转等操作,在被调用函数返回时需要进行出栈、跳转操作,从而能够识别出调用。
一个示意性的原始函数调用树如图3(a)所示。在最下面的一条路径中,函数B调用函数C,函数C调用函数E,函数E调用函数G,函数G调用函数H。一个调用函数可能调用多个被调用函数,这些不同的调用在原始函数调用树上都被表示为不同的路径。例如函数A调用函数C,函数C调用函数D的情况,就与函数A调用函数C,函数C再调用函数E的情况是不同的两条路径。
函数A和函数B不被其他任何函数调用。
步骤202,将程序的原始函数调用树转换成函数调用有向图(Call Graph)。
将树结构转换成有向图结构是本领域的常用技术手段,在此不再赘述。需要注意的是,在将原始函数调用树转换成函数调用有向图时,原始函数调用树的不同路径上的相同函数只对应函数调用有向图的一个节点,但是原始函数调用树上与所述函数有关的不同调用关系对应于函数调用有向图上的不同有向边。
图3(b)是图3(a)的原始函数调用树所对应的函数调用有向图。在图3(a)中,函数C出现了3次,对应于四个调用关系,分别是:
函数A调用函数C,函数C调用函数D;
函数A调用函数C,函数C调用函数E;
函数B调用函数C,函数C调用函数E。
在图3(b)中,函数C只对应一个节点C,但是与节点C有关的有向边有四条。
以下是根据本发明一个实施例的用于实现步骤202的伪代码:
步骤203,将函数调用有向图转换成函数支配树(Dominator Call Tree),其中函数支配树中的父子关系表示支配关系。
在函数支配树中,父节点支配子节点。支配关系的定义是:
如果从程序入口开始,调用函数Y之前必然调用函数X,则函数X支配函数Y。换句话说,如果对函数Y的调用都由函数X发起,则函数X支配函数Y。这里的“发起”既可以指函数X直接调用函数Y,也可以指函数X调用第三函数而第三函数调用函数Y。如果函数X支配函数Y,并且函数X不支配支配函数Y的其他函数,则函数X直接支配函数Y。
从图3(b)可以看出,函数A和函数B不被其他任何函数调用,所以函数A和函数B不被任何函数支配。如果要调用函数C,可以经过函数A,也可以经过函数B,因此函数A和函数B都不支配函数C,则函数C也不被任何函数支配。因此在函数支配树上,函数C处于和函数A和函数B相同的层级上。
从图3(b)还可以看出,如果要调用函数D、函数E、函数F、函数G、函数H,都必然经过函数C,因此函数C支配函数D、函数E、函数F、函数G、函数H,其中函数C直接支配函数D、函数E。
关于函数H,可以通过函数C→函数D→函数F→函数H的路径来调用函数H,也可以通过函数C→函数E→函数G→函数H的路径来调用函数H。因此函数H被函数C支配,而不被函数D、函数E、函数F或函数G中的任何一个支配。
关于函数D和函数F,由于调用函数F必须经过函数D,但是调用函数D不是必须经过函数F,因此函数D支配函数F但函数F不支配函数D。
类似地,可以推导出其他函数之间的支配关系,从而得到图3(c)所示的函数支配树。
从前面的描述可以看出,函数支配树依据的是函数之间的调用关系。调用关系的信息记载在原始函数调用树中。因此,可以省略步骤202而直接从图3(a)所示的原始函数调用树得到图3(c)所示的函数支配树。
以下是根据本发明实施例的用于实现步骤203的伪代码:
步骤204,根据步骤203中得到的函数支配树处理原始函数调用树,得到简化函数调用树。
从图3(c)中可以看到,不被任何函数所支配的函数包括:函数A、函数B和函数C。结合图3(a)和图3(b),这些函数具有不同的支配性质。其中,函数A和函数B不被任何其他函数调用,这样的函数可以称为弱支配者函数。函数C称为强支配者函数,其特征在于:(1)函数C支配至少一个其他函数;(2)函数C被多个其他函数(即函数A和函数B)调用;(3)没有任何一个强支配者函数支配这些多个其他函数的全部。
函数H不支配其他函数,则上述条件(1)不满足,因此函数H不是强支配者函数。即便函数H支配其他函数,函数H也不是强支配者函数。这是因为,虽然函数H被函数F和函数G调用即满足上述条件(2),但是强支配者函数C支配函数F和函数G的全部,即上述条件(3)不满足。
函数F不支配其他函数,则上述条件(1)不满足,因此函数F不是强支配者函数。如果函数F支配其他函数,则上述条件(1)被满足。如果进一步,函数F被多个其他函数调用,例如函数F被函数D和函数E调用,则满足上述条件(2)。如果支配函数D和函数E的全部的函数C不是强支配者函数,则满足上述条件(3)。这样,函数F就可以成为强支配者函数。类似地,在满足变化的条件的情况下,函数G也可以成为强支配者函数。
如前所述,在动态分析方法中,通过捕捉入栈、出栈、跳转等动作来检测调用。这些入栈、出栈、跳转等动作可能是发生在一些基本函数包内部。基本函数包封装了完成一些常用功能的代码,并且通常已经经过了优化。应用编程接口(API,Application Programming Interface)就是一种典型的基本函数包。一般的应用程序通过调用特定的API来实现常用的功能,并不需要了解API内部的具体实现。API在封装时已经经过了优化,优化的余地也比较小。此外,有的API以目标代码的形式提供,从而难以进行优化。强支配者函数的特征正好与基本函数包的入口函数的特征相吻合,因此从函数支配树中识别出强支配者函数就可以识别出基本函数包的入口函数。在后续分析时,可以省略对API内部的分析,从而更加集中于对应用程序本身的分析。
具体而言,可以遍历原始函数调用树,如果某个节点对应于强支配者函数,就将这个节点的所有子节点移除,从而得到简化函数调用树。这里的移除可以是所述子节点收缩到所述强支配者函数所对应的节点,也可以是删除所述子节点。在前一种实施例中,如果需要,还可以将对应于强支配者函数的节点展开,从而得到基本函数包内部的信息。图3(d)是图3(a)经过原始函数调用树经过简化后得到的简化函数调用树。
以下是根据本发明实施例的用于实现步骤204的伪代码:
根据本发明实施例的方法,可以对调用树进行简化。这种简化不仅体现在调用树的节点数目上,也体现在调用树的层级深度上。作为一个实际的例子,对一个具有62301个节点,19个层级的原始函数调用树进行处理,处理后得到的简化函数调用树具有16303个节点,14个层级。
根据本发明实施例的方法可以和基于过滤标准的方法结合起来使用。例如,可以先通过根据本发明实施例的方法,排除诸如API的基本函数包的内部函数,得到简化函数调用树。然后针对简化函数调用树,进行根据调用次数等过滤标准的过滤。
图4是根据本发明实施例的用于控制流分析的设备的框图。所述设备包括:
获取装置,配置为获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;
生成装置,配置为根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;
简化装置,配置为根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑卷功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
虽然以上结合具体实施例,对本发明的各个装置和方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。
Claims (6)
1.一种用于控制流分析的方法,该方法包括:
获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;
根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;
根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树,包括:
在所述函数支配树中识别强支配者函数,其中所述强支配者函数被多个其他函数调用,并且没有任何其他强支配者函数支配所述多个其他函数的全部;
将所述强支配者函数作为基本函数包的入口函数;和
从所述原始函数调用树中移除所述入口函数对应的节点的子节点,从而得到简化函数调用树。
2.如权利要求1所述的方法,其中根据所述调用关系生成对应的函数支配树包括:
将所述原始函数调用树转换成函数调用有向图;和
将函数调用有向图转换成函数支配树。
3.如权利要求1所述的方法,进一步包括:
根据过滤标准对所述简化函数调用树进行过滤。
4.一种用于控制流分析的设备,该设备包括:
获取装置,配置为获取程序的原始函数调用树,其中所述原始函数调用树的节点表示函数,节点之间的父子关系表示调用关系;
生成装置,配置为根据所述调用关系生成对应的函数支配树,其中函数支配树的节点表示函数,节点之间的父子关系表示支配关系,其中如果对第二函数的调用都由第一函数发起,则第一函数支配第二函数;
简化装置,配置为根据所述函数支配树对所述原始函数调用树进行简化从而得到简化函数调用树,包括:
配置为在所述函数支配树中识别强支配者函数的装置,其中所述强支配者函数被多个其他函数调用,并且没有任何其他强支配者函数支配所述多个其他函数的全部;
配置为将所述强支配者函数作为基本函数包的入口函数的装置;和
配置为从所述原始函数调用树中移除所述入口函数对应的节点的子节点,从而得到简化函数调用树的装置。
5.如权利要求4所述的设备,其中所述生成装置包括:
配置为将所述原始函数调用树转换成函数调用有向图的装置;和
配置为将函数调用有向图转换成函数支配树的装置。
6.如权利要求4所述的设备,进一步包括:
配置为根据过滤标准对所述简化函数调用树进行过滤的装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110461369.9A CN103186406B (zh) | 2011-12-30 | 2011-12-30 | 用于控制流分析的方法和装置 |
US13/721,185 US9176842B2 (en) | 2011-12-30 | 2012-12-20 | Control flow analysis utilizing function dominator trees |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110461369.9A CN103186406B (zh) | 2011-12-30 | 2011-12-30 | 用于控制流分析的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103186406A CN103186406A (zh) | 2013-07-03 |
CN103186406B true CN103186406B (zh) | 2016-08-17 |
Family
ID=48677584
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110461369.9A Expired - Fee Related CN103186406B (zh) | 2011-12-30 | 2011-12-30 | 用于控制流分析的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9176842B2 (zh) |
CN (1) | CN103186406B (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8175863B1 (en) | 2008-02-13 | 2012-05-08 | Quest Software, Inc. | Systems and methods for analyzing performance of virtual environments |
US9164743B2 (en) * | 2012-07-02 | 2015-10-20 | International Business Machines Corporation | Strength reduction compiler optimizations for operations with unknown strides |
US10333820B1 (en) | 2012-10-23 | 2019-06-25 | Quest Software Inc. | System for inferring dependencies among computing systems |
US9557879B1 (en) | 2012-10-23 | 2017-01-31 | Dell Software Inc. | System for inferring dependencies among computing systems |
WO2014210050A1 (en) | 2013-06-24 | 2014-12-31 | Cylance Inc. | Automated system for generative multimodel multiclass classification and similarity analysis using machine learning |
US9195458B2 (en) * | 2013-07-31 | 2015-11-24 | International Business Machines Corporation | System and/or method for computing interprocedural dominators |
US9218169B2 (en) * | 2013-11-19 | 2015-12-22 | Google Inc. | Callpath finder |
US9262296B1 (en) | 2014-01-31 | 2016-02-16 | Cylance Inc. | Static feature extraction from structured files |
US8930916B1 (en) * | 2014-01-31 | 2015-01-06 | Cylance Inc. | Generation of API call graphs from static disassembly |
EP3103070B1 (en) | 2014-02-07 | 2023-09-13 | Cylance Inc. | Application execution control utilizing ensemble machine learning for discernment |
CN104899209B (zh) * | 2014-03-05 | 2018-05-18 | 阿里巴巴集团控股有限公司 | 针对开放式数据处理服务的优化方法和装置 |
US11005738B1 (en) | 2014-04-09 | 2021-05-11 | Quest Software Inc. | System and method for end-to-end response-time analysis |
US9479414B1 (en) | 2014-05-30 | 2016-10-25 | Dell Software Inc. | System and method for analyzing computing performance |
CN105335230A (zh) * | 2014-07-30 | 2016-02-17 | 阿里巴巴集团控股有限公司 | 一种服务处理方法及装置 |
US10291493B1 (en) | 2014-12-05 | 2019-05-14 | Quest Software Inc. | System and method for determining relevant computer performance events |
US9274758B1 (en) | 2015-01-28 | 2016-03-01 | Dell Software Inc. | System and method for creating customized performance-monitoring applications |
US9996577B1 (en) | 2015-02-11 | 2018-06-12 | Quest Software Inc. | Systems and methods for graphically filtering code call trees |
US9465940B1 (en) | 2015-03-30 | 2016-10-11 | Cylance Inc. | Wavelet decomposition of software entropy to identify malware |
US10187260B1 (en) | 2015-05-29 | 2019-01-22 | Quest Software Inc. | Systems and methods for multilayer monitoring of network function virtualization architectures |
CN105138335B (zh) * | 2015-08-28 | 2018-01-23 | 牟永敏 | 一种基于控制流图的函数调用路径提取方法及装置 |
CN106547520B (zh) * | 2015-09-16 | 2021-05-28 | 腾讯科技(深圳)有限公司 | 一种代码路径分析方法及装置 |
US10200252B1 (en) | 2015-09-18 | 2019-02-05 | Quest Software Inc. | Systems and methods for integrated modeling of monitored virtual desktop infrastructure systems |
US10296311B2 (en) * | 2015-11-25 | 2019-05-21 | International Business Machines Corporation | Finding uninitialized variables outside the local scope |
US9940068B2 (en) * | 2015-12-11 | 2018-04-10 | Wind River Systems, Inc. | Device and method for determining memory leaks |
US10230601B1 (en) | 2016-07-05 | 2019-03-12 | Quest Software Inc. | Systems and methods for integrated modeling and performance measurements of monitored virtual desktop infrastructure systems |
US10025570B2 (en) * | 2016-09-28 | 2018-07-17 | Intel Corporation | Modifying applications for incremental checkpoints |
CN107506299B (zh) * | 2017-08-09 | 2021-04-02 | 平安科技(深圳)有限公司 | 一种代码分析方法及终端设备 |
US10275235B2 (en) * | 2017-09-18 | 2019-04-30 | International Business Machines Corporation | Adaptable management of web application state in a micro-service architecture |
US10365905B1 (en) * | 2017-10-26 | 2019-07-30 | Facebook, Inc. | Systems and methods for evaluating application performance changes via comparative call graphs |
US10970055B2 (en) * | 2018-08-21 | 2021-04-06 | International Business Machines Corporation | Identifying software and hardware bottlenecks |
CN109933365B (zh) * | 2018-12-28 | 2022-08-19 | 蜂巢能源科技有限公司 | 一种函数调用树的生成方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5448737A (en) * | 1992-03-17 | 1995-09-05 | International Business Machines Corporation | System and method for optimizing computer code using a compact data flow representation |
US20070006191A1 (en) * | 2001-10-31 | 2007-01-04 | The Regents Of The University Of California | Safe computer code formats and methods for generating safe computer code |
CN101216803A (zh) * | 2008-01-09 | 2008-07-09 | 四川大学 | 基于基路径的测试程序控制流路径集生成方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6415433B1 (en) * | 1998-12-23 | 2002-07-02 | Cray Inc. | Method and system for identifying locations to move portions of the computer program |
US20030233640A1 (en) * | 2002-04-29 | 2003-12-18 | Hewlett-Packard Development Company, L.P. | Structuring program code |
US7496900B2 (en) | 2004-02-12 | 2009-02-24 | International Business Machines Corporation | Method for automatic detection of build regressions |
US7519961B2 (en) | 2004-02-12 | 2009-04-14 | International Business Machines Corporation | Method and apparatus for averaging out variations in run-to-run path data of a computer program |
US7506320B2 (en) * | 2004-09-09 | 2009-03-17 | International Business Machines Corporation | Generating sequence diagrams using call trees |
US7747653B2 (en) | 2005-08-26 | 2010-06-29 | International Business Machines Corporation | Summarizing application performance in a large system from a components perspective |
US7721269B2 (en) | 2005-12-23 | 2010-05-18 | Sas Institute Inc. | System and method for detecting redundant subroutine calls |
US8826255B1 (en) * | 2007-06-18 | 2014-09-02 | The Mathworks, Inc. | Restructuring control flow graphs generated from a model |
-
2011
- 2011-12-30 CN CN201110461369.9A patent/CN103186406B/zh not_active Expired - Fee Related
-
2012
- 2012-12-20 US US13/721,185 patent/US9176842B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5448737A (en) * | 1992-03-17 | 1995-09-05 | International Business Machines Corporation | System and method for optimizing computer code using a compact data flow representation |
US20070006191A1 (en) * | 2001-10-31 | 2007-01-04 | The Regents Of The University Of California | Safe computer code formats and methods for generating safe computer code |
CN101216803A (zh) * | 2008-01-09 | 2008-07-09 | 四川大学 | 基于基路径的测试程序控制流路径集生成方法 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103186406A (zh) | 2013-07-03 |
US20130174127A1 (en) | 2013-07-04 |
US9176842B2 (en) | 2015-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103186406B (zh) | 用于控制流分析的方法和装置 | |
CN107169358B (zh) | 基于代码指纹的代码同源性检测方法及其装置 | |
US9569179B1 (en) | Modifying models based on profiling information | |
CN111506900B (zh) | 漏洞检测方法、装置、电子设备及计算机存储介质 | |
JP6369736B2 (ja) | ソースコードの誤り検出における警報類型分類方法、そのためのコンピュータプログラム、およびその記録媒体 | |
CN103294517B (zh) | 堆栈溢出保护装置、堆栈保护方法、相关编译器和计算装置 | |
US10360027B2 (en) | Automatically extracting a model for the behavior of a mobile application | |
CN105320701B (zh) | 功能点测试实现方式的筛选方法、装置及终端 | |
CN108650684A (zh) | 一种关联规则确定方法及装置 | |
US10365905B1 (en) | Systems and methods for evaluating application performance changes via comparative call graphs | |
CN105447030B (zh) | 一种索引处理方法与设备 | |
CN105630797B (zh) | 数据处理方法及系统 | |
US9195730B2 (en) | Verifying correctness of a database system via extended access paths | |
CN107545182A (zh) | 一种ios应用中绕过函数调用链检测的方法及系统 | |
Niskanen et al. | Algorithms for dynamic argumentation frameworks: An incremental SAT-based approach | |
CN109583475A (zh) | 异常信息的监测方法及装置 | |
Dick et al. | A re-examination of the use of genetic programming on the oral bioavailability problem | |
CN109062915B (zh) | 一种文本数据集正负关联规则挖掘方法及装置 | |
US9037916B2 (en) | Dynamic concolic execution of an application | |
CN112559978A (zh) | 基于动态胎记的多线程程序抄袭检测方法及相关设备 | |
Holley et al. | Enrichment patterns for big data | |
CN101930401A (zh) | 一种基于检测对象的软件漏洞模型检测方法 | |
JP2016031567A (ja) | パーソナル情報匿名化装置 | |
US10754630B2 (en) | Build-time code section-specific compiler selection | |
CN107168848A (zh) | 一种多线程分析与运行可视化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160817 |