CN106020950B - 基于复杂网络分析的函数调用图关键节点识别和标识方法 - Google Patents
基于复杂网络分析的函数调用图关键节点识别和标识方法 Download PDFInfo
- Publication number
- CN106020950B CN106020950B CN201610313138.6A CN201610313138A CN106020950B CN 106020950 B CN106020950 B CN 106020950B CN 201610313138 A CN201610313138 A CN 201610313138A CN 106020950 B CN106020950 B CN 106020950B
- Authority
- CN
- China
- Prior art keywords
- node
- function
- data
- degree
- analysis
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于复杂网络分析的函数调用图关键节点识别和标识方法。首先通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码调用关系数据和函数长度数据,将全部数据分类存储在数据库中;然后根据获取的数据生成调用图,利用复杂网络分析方法进行调用图节点指标计算,包括交互度、接近中心性、节点介数和函数长度,最终利用多属性决策方法进行节点关键程度计算;然后结合用户的需求和数据库中保存的状态数据,利用获得的函数调用图节点的关键程度数据计算关键节点排序和相应灰度比例数据,并进行可视化展示。本发明可快速的在复杂调用关系图中识别和标识出关键节点,显著提高工作效率。
Description
技术领域
本发明涉及复杂网络分析技术,特别涉及函数调用关系图和关键节点识别和标识方法,提出了一种实用的基于复杂网络分析的函数调用关系图关键节点的识别和标识方法。
背景技术
复杂网络即呈现高度复杂性的网络,一般认为具有小世界特性和无标度特性即为复杂网络。小世界特性描述了复杂网络通常具有很小的特征路径长度和较大的平均聚集系数,它揭示了短链效应普遍存在,如著名的“六度分离”理论。无标度特性刻画了复杂网络的不均匀复杂性,节点和连接呈幂律度分布,即大部分节点只有少数连接,而少数节点则拥有大量的连接。复杂网络分析是以数学中的图论为理论基础,大量地应用统计物理学的方法,对网络的几何性质、形成机制、演化规律、结构稳定性和动力学等方面的特性进行研究的方法。其常用的网络复杂性指标有度,包括入度(以某顶点为弧头,终止于该定点的弧的数目称为该顶点的入度)和出度(以某顶点为弧尾,起始于该顶点的弧的数目称为该顶点的出度)。介数,网络中所有最短路径中经过该节点的路径的数目占最短路径总数的比例。节点介数代表了函数节点在软件执行过程中的重要性,节点介数越大,其影响的路径范围越广。本发明提出的新方法依靠复杂网络分析来获取函数调用关系图中关键节点的排序,并最终按照实际需求在给定的调用关系图中进行标识。
函数调用关系图展示了程序代码块之间不同层次的函数调用关系,包括顶层的模块间函数调用关系、文件间函数调用关系和底层的函数调用关系。图中的节点可代表一个模块、文件或者函数,而边代表了节点之间的调用关系。函数调用关系图展示了所有可能执行的路径,这些执行路径在实际的一次执行过程中不会全部发生。目前利用静态分析即可获得函数调用关系数据,现有的生成函数调用图的工具非常之多。这些工具基本功能类似,虽然提供了不同的布局和展示方式,但并没有标识关键节点的能力,例如Doxygen、CodeViz等。Doxygen作为一个功能强大的文档生成工具,除了能根据注释生成文档,还能可视化文档间的关系,提取代码结构并自动生成依赖图、协作图和函数调用关系图等。而CodeViz则利用源代码编译过程收集函数调用信息,结合Graphviz可视化工具将调用数据展示出来。本发明提出的新方法中对函数调用关系和节点采用相应技术进行进一步分析,将识别和标识出其中的关键节点。
本发明涉及到另一背景是开源软件的分析问题。由于较为庞大的软件函数调用关系图非常复杂,泛泛的分析和展示其调用关系图必不能把握其重点和核心节点。而本发明的方法可以基于复杂网络分析来识别和标识关键节点,也可提供以关键节点为中心的裁剪和过滤方式,从而使调用图体量适中且重点突出,不再让开发者依赖个人经验和手工分析。而软件多版本升级演化往往涉及到重要BUG的修复和新功能的增加,在多版本差异对比图中利用该方法同样可以识别和标识出关键差异节点,对于用户版本定制和升级都具有相当重要的意义。另一方面,关键节点的识别和标识有助于理解函数调用的关键路径,在漏洞威胁等级关联性分析以及热点函数性能瓶颈分析中应用该方法,可以快速收敛到目标结果。但是,目前还没有一种方法(或软件)能够进行模块或文件调用/依赖关系图关键节点的识别和标识,更没有函数调用关系图、多版本函数调用关系差异图的关键节点识别和标识能力。
发明内容
本发明的目的在于提供一种基于复杂网络分析的函数调用关系图关键节点的识别和标识方法。通过这种方法可以高效的识别和标识出模块调用关系图、文件依赖关系图、函数调用关系图、多版本函数调用关系差异图等调用图中的关键节点,为其提供明确的裁剪和过滤方式,使问题简单化且重点突出。本发明能够将开发者从繁重的逐行代码分析和关键节点分析工作中解放出来,同时应用于漏洞威胁等级关联性分析以及热点函数性能瓶颈分析等问题中,可以加速相关分析结果收敛,引导开发者辅助定位核心问题,显著提高工作效率。
本发明的基于复杂网络分析的函数调用关系图关键节点的识别和标识方法,包括三部分,如图1所示,第一部分是调用关系获取,第二部分是复杂网络分析,第三部分是关键节点标识,具体描述如下:
1)调用关系获取:通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码调用关系,并通过括号匹配分析技术获取函数长度数据(即函数占用的代码行数),将全部数据分类存储在数据库中,利用以上数据即可生成调用图;
2)复杂网络分析:利用复杂网络分析方法进行调用图节点指标计算,主要指标包括交互度、接近中心性、节点介数和函数长度,最终利用多属性决策方法进行节点关键程度计算;
3)关键节点标识:结合用户的需求和数据库中保存的状态数据,利用函数调用图节点关键程度数据计算关键节点排序和相应灰度比例数据,并进行可视化标识。
下面对本发明方法进行具体说明。
1)调用关系获取
调用关系获取阶段主要通过源码静态分析技术进行词法分析、语法分析和控制流分析等,完成函数定义和调用等信息的分析和获取。本方法从源代码的编译过程中获取函数定义和调用信息,通过括号匹配分析函数起止行号并计算出函数长度数据。为了便于后期的查询、分析和调用图生成,将这些数据录入数据库中以下相关表格中:
目录文件列表:用来记录源码目录和文件路径。主要包括文件/目录名称,所属版本信息等。
函数定义列表:用来记录所有函数的定义相关信息。主要包括函数名称,函数所属的文件,函数的起止行号等。
静态函数调用列表:用来记录静态函数调用的相关信息。主要包括调用函数信息,被调用函数信息,以及这两个函数所属的文件等。
2)复杂网络分析
复杂网络分析阶段主要根据获取的调用信息生成调用图,利用复杂网络分析的思想计算该图各个节点的交互度、接近中心性和节点介数,通过代码括号匹配分析技术获取节点函数长度,并利用多属性决策方法计算节点的最终关键程度。多属性决策方法即为将获取到的节点交互度、接近中心性、节点介数和节点函数长度信息按不同的权重系数加权求和,系数可以根据人工评估结果对比调优,最终依据加权和评估每个节点的关键程度。
交互度,即综合考虑出度和入度,其中出度为该节点调用其他节点的次数,入度为该节点被调用的次数。交互度表征节点的局部交互程度,以D表示,计算公式如下,其中X表示节点入度、Y表示节点出度,Xmin表示节点入度最小值、Ymin表示节点出度最小值,Xmax表示节点入度最大值、Ymax表示节点出度最大值。出度和入度可类比为调用和被调用进行理解。整体来讲,Xmax、Ymax表示出度和入度的正理想方案;Xmin、Ymin表示出度和入度的负理想方案,公式分子为每个方案到负理想方案的距离,分母为每个方案到负理想方案的距离与每个方案到正理想方案的距离之和。整个公式计算结果表示每个方案对理想方案的贴近程度,也可理解为节点出度与入度接近各自最大值并且远离各自最小值的程度。
接近中心性,考虑了节点间通信的独立性,即当前节点与其他节点通信的可能性对通信所需中间媒介的最少个数的依赖程度,可类比调用图数据流进行理解。假设dij表示以节点i为起点j为终点的最短路径中所含边的数量,则节点i的接近中心性可以表示为其到网络中其他所有节点距离之和的倒数,具体计算公式如下,其中CCi表示接近中心性,N表示调用图中总的节点个数,i表示被计算指标的当前节点,j表示除当前计算指标节点之外的其他节点
节点介数定义为调用图中所有最短路径中经过该节点的路径的数目占最短路径总数的比例。介数反映了相应的节点在整个调用图中的作用和影响力,是一个重要的全局几何量,具体计算公式如下,CB(v)表示节点介数,分子表示图中任意两节点的最短路径经过该节点的个数,分母表示图中任意两节点之间最短路径个数。其中,v表示被计算介数指标的当前节点,v属于整个节点集合V,s、t表示整个节点集合V中其他任意两个节点。
之后将交互度、接近中心性、节点介数和如前所述方法计算得到的函数长度数据等指标,利用如前所述的多属性决策方法进行计算,最终得出加权和代表节点的关键程度。
3)关键节点标识
关键节点标识阶段主要完成函数调用关系图的生成与标识。通过分析第一步和第二步中生成的函数定义、调用信息和关键程度数据,计算关键节点排序信息并结合用户的输入信息以svg图(可缩放矢量图形)表现出不同层次的函数调用关系及其关键节点,包括模块(目录)级别的调用信息、文件级别的调用信息和函数调用关系图。在图中用圆型节点表示模块/文件或者函数;用带有权值的有向线条表示两个节点之间存在的调用关系,调用方向与箭头方式一致,权值代表调用次数。每次可以选择特定版本的一个或多个模块,一个或多个文件,一个或多个文件所包含的函数进行调用图可视化和关键节点标识。函数调用关系图中关键节点的具体表现形式有两种,一种为模块/文件级节点,另一种为函数级节点。
a)模块/文件级节点:
为了表示出更加丰富的信息,将模块/文件级节点设置为不同灰度的颜色。白色节点代表普通节点(即没有被标识为关键节点的一般节点),灰色节点代表关键节点,且灰度越大代表该节点的关键程度越高。每个节点都有统计数据,模块/文件级节点的关键程度是其所包含的全体函数关键程度的加权平均和,而边上的权值则是两个节点所包含的全体函数之间调用关系的总和。并有开关菜单来裁剪边和节点,显示和隐藏一般或关键节点数据,下一级菜单提供分层展示等。
b)函数级节点:
同理,为了表示出更加丰富的信息,函数级节点也设置为不同灰度的颜色。白色节点代表普通函数节点(即没有被标识为关键节点的一般节点),灰色节点代表关键函数节点,且灰度越大代表该函数的关键程度越高。每个节点同样都有统计数据,函数级节点的关键程度由如前所述方法算得出,边的权值可表示为对应两个节点函数之间调用次数的总和。并有开关菜单来裁剪边和节点,函数调用关系图及其关键节点标识为最低层次的视图。
本发明方案的具体的步骤如下:
1)调用关系获取,图5是调用关系获取流程图,包括:
1a)进入复杂网络分析系统,查看是否存在待分析的调用图版本。
1b)如果已经存在该版本调用图,进入1f),否则进入1c)。
1c)加入对应源码版本的源代码。
1d)进行源代码静态分析。
i.遍历源代码目录,获取代码中所有文件的相对路径信息。
ii.修改源代码的编译参数。
iii.编译源码,生成隐藏函数定义信息和函数调用信息的中间结果。
iv.从中间文件中分析出函数定义和行号等信息。
v.从中间文件中分析出函数调用信息。
1e)将1d)分析得到的文件路径信息、函数定义信息、调用关系和函数长度数据入库,分别录入目录文件列表,函数定义列表和静态调用列表等,进入1b)。
1f)进行复杂网络分析。
2)复杂网络分析,图6是复杂网络分析流程图,包括:
2a)计算关键节点指标。
2b)如果已经计算完成所有节点交互度指标数据,进入2e),否则进入2c)。
2c)利用交互度公式计算所有节点的该项指标数据,进入2d)。
2d)缓存所有节点交互度指标数据,存入临时文件,进入2b)。
2e)如果已经计算完成所有节点接近中心性指标数据,进入2h),否则进入2f)。
2f)利用接近中心性公式计算所有节点的该项指标数据,进入2g)。
2g)缓存所有节点接近中心性指标数据,存入临时文件,进入2e)。
2h)如果已经计算完成所有节点介数指标数据,进入2k),否则进入2i)。
2i)利用介数公式计算所有节点的该项指标数据,进入2j)。
2j)缓存所有节点介数指标数据,存入临时文件,进入2h)。
2k)利用多属性决策方法计算各节点的关键程度。
3)关键节点标识,图7是关键节点标识流程图,包括:
3a)根据已生成的指标数据和多属性决策结果,进行节点的关键程度排序。
3b)如果已经生成对应调用图的节点关键程度排序数据,则进入3d),否则进入3c)。
3c)根据节点关键程度排序结果计算关键节点的灰度比例,进入3b)。
3d)根据关键节点灰度比例数据生成调用图的关键节点标识视图。
本发明结合复杂网络分析和调用图展示技术,提出了一种实用的基于复杂网络分析的函数调用关系图关键节点的识别和标识方法。该方法通过静态分析开源软件特定版本源代码,获取函数调用关系相关数据并入库,通过计算网络复杂性指标,包括交互度、接近中心性和介数等指标并进行自适应的多属性决策来计算调用图中各个节点的重要度数据,生成相应节点灰度显示比例,最终使用Graphviz等开源工具按照本发明的识别和标识方法生成调用关系关键节点标识视图。该发明及图形化展示填补了函数调用关系关键节点识别及标识的空白,克服了关键节点分析依靠开发者的个人经验和手工方式效率低下、分析门槛较高、分析结果不易存储等困难。
本发明提出的新方法可快速的在复杂调用关系图中识别和标识出关键节点,可用于函数调用关系图按关键节点的裁剪和过滤,将复杂而庞大的函数调用关系图按重要度分解,使问题简单化且重点突出。本发明能够将开发者从繁重的关键代码人工分析和依据个人经验的分析工作中解放出来,同时可应用于漏洞威胁等级关联性分析以及热点函数性能瓶颈分析、测试用例排序等问题中,可以结合节点重要度和分析目标,加速相关分析结果快速收敛或引入新的有效分析指标,引导开发者快速辅助定位核心问题,为开源软件的分析、开发、升级和维护等问题的部分过程提供高效的辅助方法,显著提高工作效率。
附图说明
图1是基于复杂网络分析的函数调用关系图关键节点的识别和标识流程图。
图2是调用关系获取流程图。
图3是复杂网络分析流程图。
图4是关键节点标识流程图。
图5、6是实施例1的函数调用示意图。
图7、8是实施例2的函数调用示意图。
具体实施方式
下面通过实施例对本发明作进一步的说明,但不以任何方式限制本发明的范围。
实施例1
设定如下使用场景:
用户使用本方法对linux3.5.4源码中的ipc/msg.c文件中的函数调用图进行关键函数识别和标识。
用户登录Linux内核函数调用关系平台,并在平台中选择选项生成ipc/msg.c文件内函数调用关系,平台显示ipc/msg.c文件内函数调用关系并生成相应数据存储在数据库,数据库中的数据描述了ipc/msg.c中的函数、函数之间的静态调用关系、函数静态调用次数、在网页中显示的颜色等信息。数据库中的部分数据如表1所示:
表1.数据库中部分数据
F_path | C_path | COUNT |
ipc/msg.c/do_msgrcv | ipc/msg.c/ss_wakeup | 1 |
ipc/msg.c/freeque | ipc/msg.c/expunge_all | 1 |
ipc/msg.c/freeque | ipc/msg.c/ss_wakeup | 1 |
ipc/msg.c/msgctl_down | ipc/msg.c/copy_msqid_from_user | 1 |
ipc/msg.c/msgctl_down | ipc/msg.c/expunge_all | 1 |
ipc/msg.c/msgctl_down | ipc/msg.c/freeque | 1 |
ipc/msg.c/msgctl_down | ipc/msg.c/ss_wakeup | 1 |
ipc/msg.c/msg_init | ipc/msg.c/msg_init_ns | 1 |
ipc/msg.c/msg_init_ns | ipc/msg.c/recompute_msgmni | 1 |
ipc/msg.c/sys_msgctl | ipc/msg.c/copy_msqid_to_user | 1 |
ipc/msg.c/sys_msgctl | ipc/msg.c/msgctl_down | 1 |
ipc/msg.c/sys_msgrcv | ipc/msg.c/do_msgrcv | 1 |
ipc/msg.c/sys_msgsnd | ipc/msg.c/do_msgsnd | 1 |
平台中ipc/msg.c文件的函数调用图如图5所示。
2)用户选择关键函数识别功能,系统按照图3中的流程进行节点关键程度的计算,可以得到函数节点的各个指标以及函数关键程度值,如表2所示:
表2.函数节点的各个指标以及函数关键程度值
函数节点 | 交互度 | 接近中心性 | 介数 | 函数长度 | 函数关键程度 |
msgctl_down | 0.673368 | 4 | 0.67 | 57 | 0.548 |
sys_msgctl | 0.356789 | 4 | 0 | 107 | 0.745 |
freeque | 0.441518 | 1 | 0 | 20 | 0.348 |
ss_wakeup | 0.428571 | 0 | 0 | 14 | 0.272 |
do_msgrcv | 0.281729 | 1 | 0.167 | 150 | 0.735 |
sys_msgrcv | 0.190744 | 1.5 | 0 | 13 | 0.228 |
expunge_all | 0.326632 | 0 | 0 | 15 | 0.228 |
do_msgsnd | 0.182744 | 0 | 0 | 89 | 0.475 |
copy_msqid_to_user | 0.182744 | 0 | 0 | 42 | 0.255 |
copy_msqid_from_user | 0.182744 | 0 | 0 | 28 | 0.165 |
sys_msgsnd | 0.190744 | 1 | 0 | 8 | 0.191 |
3)将计算得出的关键节点以灰度等级的形式展现出来,修改数据库中ipc/msg.c文件的节点颜色,使用修改后的文件展示ipc/msg.c文件内函数调用关系如图6所示,图中灰度等级越深代表该函数节点在文件中的关键程度越高是较为关键的节点。ipc/msg.c文件中最关键的函数节点是系统调用sys_msgctl,用黑色表示;关键程度第二的关键节点do_msgrcv,用深灰色表示;其他关键节点依次用灰度较浅的颜色表示;关键节点之外的函数节点统一用的浅灰色表示。
4)为检验本方法的正确率,对Linux源码文件ipc/msg.c熟悉的人员对文件进行人工关键节点识别,与本方法自动识别相比如表3所示:
表3.两种方法对比
本方法自动识别的关键节点 | 人工识别的关键节点 |
sys_msgctl | sys_msgcl |
do_msgrcv | do_msgrcv |
msgctl_down | do_msgsnd |
do_msgsnd | msgctl_down |
从表中可以得出本方法对Linux内核源码函数调用图关键节点的识别正确率较高。
实施例2
设定如下使用场景:
用户使用本方法对linux3.5.4源码中的kernel/fork.c文件中的函数调用图进行关键函数识别和标识。用户登录Linux内核函数调用关系平台,并在平台中选择选项生成kernel/fork.c文件内函数调用关系,平台显示kernel/fork.c文件内函数调用关系并生成相应数据存储在数据库,数据库中的数据描述了kernel/fork.c中的函数、函数之间的静态调用关系、函数静态调用次数、在网页中显示的颜色等信息。数据库中部分信息如表4所示:
表4.数据库中部分信息
平台中kernel/fork.c文件的函数调用图如图7所示。
2)用户选择关键函数识别功能,系统按照图3中的流程进行节点关键程度的计算,可以得到函数节点的各个指标以及关键程度值,如表5所示:
表5.函数节点的各个指标以及函数重要程度值
函数节点 | 交互度 | 接近中心性 | 介数 | 函数长度 | 函数关键程度 |
account_kernel_stack | 0.247440 | 0 | 0 | 5 | 0.13856 |
arch_release_thread_info | 0.247440 | 0 | 0 | 0 | 0.13702 |
copy_process | 0.863473 | 8 | 0.526 | 392 | 1 |
do_fork | 0.285714 | 6.3 | 0 | 80 | 0.38465 |
dup_mm | 0.467251 | 4 | 0.158 | 133 | 0.437126 |
fork_idle | 0.146392 | 5.3 | 0 | 13 | 0.27929 |
free_task | 0.406878 | 2 | 0.053 | 5 | 0.23501 |
get_mm_exe_file | 0.136527 | 0 | 0 | 12 | 0.08605 |
get_task_mm | 0.136527 | 0 | 0 | 14 | 0.08754 |
mmput | 0.474068 | 2 | 0.263 | 20 | 0.264471 |
mm_access | 0.285714 | 3 | 0 | 18 | 0.232677 |
mm_alloc | 0.146392 | 1 | 0 | 6 | 0.10886 |
mm_init | 0.247440 | 0 | 0 | 6 | 0.140016 |
set_mm_exe_file | 0.136527 | 0 | 0 | 8 | 0.083586 |
__cleanup_sighand | 0.136527 | 0 | 0 | 6 | 0.082632 |
__mmdrop | 0.136527 | 0 | 0 | 8 | 0.083586 |
__put_task_struct | 0.207992 | 2 | 0 | 13 | 0.172006 |
3)将计算得出的关键节点以灰度等级的形式展现出来,修改数据库中kernel/fork.c文件的节点颜色,使用修改后的文件展示kernel/fork.c文件内函数调用关系如图8所示,图中灰度等级越深代表该函数节点在文件中的关键程度越高是较为关键的节点。kernel/fork.c文件中最关键的函数节点是系统调用copy_process,用黑色表示;关键程度第二的关键节点dup_mm,用深灰色表示;其他关键节点依次用灰度较浅的颜色表示;关键节点之外的函数节点统一用白色表示。
4)为检验本方法的正确率,对Linux源码文件kernel/fork.c熟悉的人员对文件进行人工关键节点识别,与本方法自动识别相比如表6所示:
表6.两种方法对比
本方法自动识别的关键节点 | 人工识别的关键节点 |
copy_process | copy_process |
dup_mm | dup_mm |
do_fork | do_fork |
fork_idle | fork_idle |
从表中可以得出本方法对Linux内核源码函数调用图关键节点的识别正确率较高。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。
Claims (7)
1.一种基于复杂网络分析的函数调用图关键节点的识别和标识方法,包括以下步骤:
1)通过源码静态分析技术进行词法分析、语法分析和控制流分析,获取源码调用关系数据,并通过括号匹配分析技术获取函数长度数据,将全部数据分类存储在数据库中;
2)根据步骤1)获取的数据生成调用图,利用复杂网络分析方法进行调用图节点指标计算,所述指标包括交互度、接近中心性、节点介数和函数长度,最终利用多属性决策方法进行节点关键程度计算;所述交互度表征节点的局部交互程度,其综合考虑出度和入度,其中出度为该节点调用其他节点的次数,入度为该节点被调用的次数;所述接近中心性考虑节点间通信的独立性,即当前节点与其他节点通信的可能性对通信所需中间媒介的最少个数的依赖程度;所述节点介数为调用图中所有最短路径中经过该节点的路径的数目占最短路径总数的比例;
所述交互度的计算公式为:
其中,D表示交互度,X表示节点入度、Y表示节点出度,Xmin表示节点入度最小值、Ymin表示节点出度最小值,Xmax表示节点入度最大值,Ymax表示节点出度最大值;
所述接近中心性的计算公式为:
其中,CCi表示接近中心性,dij表示以节点i为起点j为终点的最短路径中所含边的数量,N表示调用图中总的节点个数,i表示被计算指标的当前节点,j表示除当前计算指标节点之外的其他节点;
所述节点介数的计算公式为:
其中,CB(v)表示节点介数,分子表示图中任意两节点的最短路径经过该节点的个数,分母表示图中任意两节点之间最短路径个数;v表示被计算介数指标的当前节点,v属于整个节点集合V,s、t表示整个节点集合V中其他任意两个节点;
3)结合用户的需求和数据库中保存的状态数据,利用步骤2)获得的函数调用图节点的关键程度数据计算关键节点排序和相应灰度比例数据,并进行可视化展示。
2.如权利要求1所述的方法,其特征在于,步骤1)从源代码的编译过程中获取函数定义和调用信息,通过括号匹配分析函数起止行号并计算出函数长度数据,并将这些数据录入数据库中的以下相关表格中:目录文件列表,用来记录源码目录和文件路径;函数定义列表,用来记录所有函数的定义相关信息;静态函数调用列表,用来记录静态函数调用的相关信息。
3.如权利要求1所述的方法,其特征在于,步骤1)进行调用关系获取的具体步骤包括:
1a)进入复杂网络分析系统,查看是否存在待分析的调用图版本;
1b)如果已经存在该版本调用图,进入1f),否则进入1c);
1c)加入对应源码版本的源代码;
1d)进行源代码静态分析;
i.遍历源代码目录,获取代码中所有文件的相对路径信息;
ii.修改源代码的编译参数;
iii.编译源码,生成隐藏函数定义信息和函数调用信息的中间结果;
iv.从中间文件中分析出函数定义和行号信息;
v.从中间文件中分析出函数调用信息;
1e)将1d)分析得到的文件路径信息、函数定义信息、调用关系和函数长度入库,分别录入目录文件列表,函数定义列表和静态函数调用列表,进入1b);
1f)进行复杂网络分析。
4.如权利要求1所述的方法,其特征在于,步骤2)进行复杂网络分析的具体步骤包括:
2a)计算关键节点指标;
2b)如果已经计算完成所有节点交互度指标数据,进入2e),否则进入2c);
2c)利用交互度公式计算所有节点的该项指标数据,进入2d);
2d)缓存所有节点交互度指标数据,存入临时文件,进入2b);
2e)如果已经计算完成所有节点接近中心性指标数据,进入2h),否则进入2f);
2f)利用接近中心性公式计算所有节点的该项指标数据,进入2g);
2g)缓存所有节点接近中心性指标数据,存入临时文件,进入2e);
2h)如果已经计算完成所有节点介数指标数据,进入2k),否则进入2i);
2i)利用介数公式计算所有节点的该项指标数据,进入2j);
2j)缓存所有节点介数指标数据,存入临时文件,进入2h);
2k)利用多属性决策方法计算各节点的关键程度。
5.如权利要求1所述的方法,其特征在于,步骤3)在函数调用关系图中用圆型节点表示模块/文件或者函数;用带有权值的有向线条表示两个节点之间存在的调用关系,调用方向与箭头方式一致,权值代表调用次数;每次选择特定版本的一个或多个模块,一个或多个文件,一个或多个文件所包含的函数进行调用图可视化和关键节点标识。
6.如权利要求5所述的方法,其特征在于,步骤3)中,函数调用关系图中关键节点的具体表现形式有两种:
a)模块/文件级节点:将模块/文件级节点设置为不同灰度的颜色,白色节点代表普通节点,灰色节点代表关键节点,且灰度越大代表该节点的关键程度越高;模块/文件级节点的关键程度是其所包含的全体函数关键程度的加权平均和,而边上的权值则是两个节点所包含的全体函数之间调用关系的总和;
b)函数级节点:将函数级节点也设置为不同灰度的颜色,白色节点代表普通函数节点,灰色节点代表关键函数节点,且灰度越大代表该函数的关键程度越高;函数级节点的关键程度由多属性决策方法计算得出,边的权值为对应两个节点函数之间调用次数的总和。
7.如权利要求6所述的方法,其特征在于,步骤3)进行关键节点标识的具体步骤包括:
3a)根据已生成的指标数据和多属性决策方法,进行关键节点的关键程度排序;
3b)如果已经生成对应调用图的关键节点标识数据,则进入3d),否则进入3c);
3c)根据关键节点关键程度数据和排序结果计算关键节点的灰度比例,进入3b);
3d)根据关键节点灰度比例数据生成调用图的关键节点标识视图。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610313138.6A CN106020950B (zh) | 2016-05-12 | 2016-05-12 | 基于复杂网络分析的函数调用图关键节点识别和标识方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610313138.6A CN106020950B (zh) | 2016-05-12 | 2016-05-12 | 基于复杂网络分析的函数调用图关键节点识别和标识方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106020950A CN106020950A (zh) | 2016-10-12 |
CN106020950B true CN106020950B (zh) | 2019-08-16 |
Family
ID=57100110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610313138.6A Active CN106020950B (zh) | 2016-05-12 | 2016-05-12 | 基于复杂网络分析的函数调用图关键节点识别和标识方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106020950B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121710A (zh) * | 2016-11-28 | 2018-06-05 | 北京国双科技有限公司 | 一种关键用户的判定方法及装置 |
CN106599187B (zh) * | 2016-12-14 | 2020-06-16 | 北京航空航天大学 | 一种基于边不稳定度的社区发现系统及方法 |
CN106506537B (zh) * | 2016-12-15 | 2019-11-26 | 北京邮电大学 | 基于重要节点差异化保护的双层耦合网络防护方法 |
CN106897620B (zh) * | 2017-02-13 | 2020-05-15 | 中国科学院信息工程研究所 | 一种基于恶意行为函数调用图的安卓应用程序安全可视化分析方法 |
CN108512764B (zh) * | 2017-02-24 | 2020-07-17 | 中国科学院声学研究所 | 一种基于局部介数的网络内容扩散方法 |
CN107038247B (zh) * | 2017-04-20 | 2020-08-25 | 南京航空航天大学 | 推荐系统中基于核搜索策略的推荐者搜索方法 |
CN107632924B (zh) * | 2017-09-08 | 2020-09-01 | 携程旅游信息技术(上海)有限公司 | 告警应用可视化展示方法、系统、设备及存储介质 |
CN107733710A (zh) * | 2017-10-17 | 2018-02-23 | 平安科技(深圳)有限公司 | 链路调用关系的构建方法、装置、计算机设备及存储介质 |
CN108363587B (zh) * | 2018-03-07 | 2022-02-01 | 平安普惠企业管理有限公司 | 应用程序运行监控方法、装置、计算机设备和存储介质 |
CN108549605B (zh) * | 2018-04-13 | 2021-06-29 | 郑州云海信息技术有限公司 | 一种自动化测试方法 |
CN110943877B (zh) * | 2018-09-21 | 2022-02-22 | 华为技术有限公司 | 网络状态测量方法、设备及系统 |
CN109379220B (zh) * | 2018-10-10 | 2021-06-15 | 太原理工大学 | 基于组合优化的复杂网络关键节点簇挖掘的方法 |
EP3705993B1 (de) * | 2019-03-04 | 2021-07-21 | Siemens Aktiengesellschaft | System und verfahren zum auffinden und identifizieren von rechenknoten in einem netzwerk |
WO2020191549A1 (zh) * | 2019-03-22 | 2020-10-01 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN110147245A (zh) * | 2019-05-23 | 2019-08-20 | 广东电网有限责任公司 | 软件模块的运维管理方法、装置、设备及可读存储介质 |
CN112099838B (zh) * | 2019-06-17 | 2023-08-15 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN111858322B (zh) * | 2020-07-10 | 2022-01-11 | 中国科学技术大学 | 一种Python语言特征自动识别系统和方法 |
CN112256644B (zh) * | 2020-10-20 | 2024-05-24 | 抖音视界有限公司 | 一种信息处理方法、装置及计算机存储介质 |
CN112346856B (zh) * | 2020-10-21 | 2021-06-08 | 北京基调网络股份有限公司 | 一种微服务架构下多链路调用拓扑展示方法、装置及设备 |
CN112784133B (zh) * | 2021-01-22 | 2024-05-17 | 中信银行股份有限公司 | 链路可视化方法、装置、设备及存储介质 |
CN112989137B (zh) * | 2021-04-21 | 2021-08-06 | 军事科学院系统工程研究院网络信息研究所 | 一种用于复杂网络信息系统构建的实体关系分析方法 |
CN113886251B (zh) * | 2021-09-30 | 2023-04-11 | 四川大学 | 基于热力图的热点函数确定方法 |
CN118036005B (zh) * | 2024-04-11 | 2024-07-02 | 山东省计算中心(国家超级计算济南中心) | 基于精简调用图的恶意应用检测方法、系统、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035773A (zh) * | 2014-06-11 | 2014-09-10 | 清华大学 | 基于扩展调用图的软件系统结点重要度评价方法 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN105068928A (zh) * | 2015-08-04 | 2015-11-18 | 中国人民解放军理工大学 | 一种基于复杂网络理论的软件测试用例生成方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8694979B2 (en) * | 2012-06-26 | 2014-04-08 | International Business Machines Corporation | Efficient egonet computation in a weighted directed graph |
-
2016
- 2016-05-12 CN CN201610313138.6A patent/CN106020950B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN104035773A (zh) * | 2014-06-11 | 2014-09-10 | 清华大学 | 基于扩展调用图的软件系统结点重要度评价方法 |
CN105068928A (zh) * | 2015-08-04 | 2015-11-18 | 中国人民解放军理工大学 | 一种基于复杂网络理论的软件测试用例生成方法 |
Non-Patent Citations (2)
Title |
---|
Analysis on Key Nodes Behavior for Complex Software Network;Xizhe Zhang,Guolong Zhao,Tianyang Lv,Ying Yin,Bin Zhang;《Information Computing and Applications》;20120916;全文 * |
基于复杂网络的软件执行函数调用网络分析;汪金祥;《中国优秀硕士学位论文数据库 信息科技辑》;20150515;第2章第2.1节 * |
Also Published As
Publication number | Publication date |
---|---|
CN106020950A (zh) | 2016-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106020950B (zh) | 基于复杂网络分析的函数调用图关键节点识别和标识方法 | |
Kaliszyk et al. | Holstep: A machine learning dataset for higher-order logic theorem proving | |
US12001821B2 (en) | Generation and/or recommendation of tools for automating aspects of computer programming | |
US10073827B2 (en) | Method and system to generate a process flow diagram | |
Matthes et al. | Hybrid Wikis: Empowering Users to Collaboratively Structure Information. | |
CN1664810A (zh) | 辅助表格填充 | |
JP2023526116A (ja) | 高速スクリーニングのためのドメイン固有言語インタープリタ及び対話型視覚インターフェース | |
CN110543303A (zh) | 一种可视化业务平台 | |
CN105956087A (zh) | 数据及代码版本管理系统及方法 | |
AU2016201776B2 (en) | Functional use-case generation | |
CN110363662A (zh) | 一种个人信用评分系统 | |
KR20180130733A (ko) | 협업 의존성 기반 컴포넌트 재사용 추천 시스템 및 방법 | |
CN115358204A (zh) | 一种报表生成方法、装置、电子设备及存储介质 | |
Kuschke et al. | Pattern-based auto-completion of UML modeling activities | |
CN118093801A (zh) | 基于大语言模型的信息交互方法、装置以及电子设备 | |
CN116595191A (zh) | 一种交互式低代码知识图谱的构建方法及装置 | |
CN118227106A (zh) | 代码补全方法、装置、电子设备和介质 | |
CN114647981A (zh) | 数据处理方法、设备、存储介质及程序产品 | |
Diamantopoulos et al. | Semantically-enriched jira issue tracking data | |
CN117931852A (zh) | 一种基于自然语言处理的智能查询和可视化方法 | |
CN117369786A (zh) | 一种软件开发智能辅助方法及平台 | |
Uvidia Fassler et al. | Moving towards a methodology employing knowledge discovery in databases to assist in decision making regarding academic placement and student admissions for universities | |
Bakri et al. | SWANSTAT: A user-friendly web application for data analysis using shinydashboard package in R | |
Albers et al. | The world is complex therefore our research is needed-using data mining for literature reviews | |
Fill | Semantic evaluation of business processes using SeMFIS |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |