【技术实现步骤摘要】
一种动态函数调用的可视化方法
[0001]本专利技术属于信息可视化
,具体涉及一种动态函数调用的可视化方法。
技术介绍
[0002]计算机程序是一组由编程语言编写的、计算机能识别和执行的代码指令,用于实现特定的目的;函数是一个具有固定功能的、可复用的代码段;一个程序往往会调用若干个函数。分析程序动态运行过程中产生的函数调用数据,可以更直接地了解程序的行为意图和执行目的,是程序理解、程序测试、漏洞定位、恶意文件检测等工作中不可或缺的一个环节。
[0003]动态函数调用数据主要呈现出三大特性:(1)二元性,一条函数调用涉及一个源函数,即调用者(caller),和一个目标函数,即被调用者(callee);(2)层次性,函数调用可以是嵌套的,即一个函数调用另一个函数,另一个函数又调用别的函数,从而形成层次结构;(3)时序性,函数调用是按顺序发生的,有时候会出现单条函数调用或一组函数调用的连续或周期模式。分析动态函数调用数据时需要综合考察其中的二元、层次和时序信息。
[0004]查看动态函数调用的原始数据往往耗时 ...
【技术保护点】
【技术特征摘要】
1.一种动态函数调用的可视化方法,其特征在于:它包含以下步骤:步骤1:获取动态函数调用数据;动态函数调用数据为一个程序动态运行一次产生的函数调用记录,这些记录以表格的形式存储,每一条记录包含三个字段:caller、callee和index;其中caller字段保存了调用函数的名称、callee字段保存了被调用函数的名称,这两个字段的数据类型为STRING型;index字段保存了函数调用的索引,数据类型为INT型;通过index字段的值I
k
可以确定一条唯一的函数调用记录,表示程序动态运行过程中,第(I
k
+1)条调用为:caller字段的函数调用了callee字段的函数;步骤2:将原始数据转换为带索引信息的层次结构数据;将(步骤1)得到的原始数据转换为层次结构的数据;根据函数之间的调用和被调用关系来确定层次结构中的父子关系,合并同一个父节点下的相同调用边同时记录调用发生所对应的索引;(步骤2.1):初始化集合Funccall_set,用于记录所有的调用边对象;按照index的值,升序遍历(步骤1)中得到的动态函数调用记录,将每一条记录中caller和callee的组合视为一个调用边对象caller|callee;(步骤2.2):对Funccall_set进行遍历,生成以程序的入口函数作为根节点的层次结构数据Hie_calldata;步骤3:基于广度优先遍历算法确定函数节点布局及设置调用连边属性;根据(步骤2.2)获得的层次化数据Hie_calldata进行布局,生成相应的树节点数组和连边数组;树节点数组记录每一个函数节点对象,包括基本属性——函数名称、函数节点在树结构中的深度,以及布局属性——在画布上的位置;树连边数组记录每一条连边对象,包括两个基本属性——连边所对应的源节点对象和目标节点对象;(步骤3.1):定义一个起始位置的坐标(start_X,start_Y),函数节点之间的水平间距node_spaceX,节点之间的竖直间距node_spaceY;初始化一个函数节点数组tree_funcnode,和一个函数调用连边数组tree_calllink;(步骤3.2):对(步骤2.2)中获得的层次化数据Hie_calldata进行广度优先遍历,此步骤基于循环来实现,将函数节点对象添加到tree_funcnode数组中,将函数调用连边对象添加到tree_calllink数组中;(步骤3.3):由于程序的入口函数为根节点,单独位于一层中,为了节省竖直方向上的空间,移除(步骤3.2)得到的tree_funcnode数组中的根节点对象;移除(步骤3.2)得到的tree_calllink数组中的根节点到其子节点之间的调用连边对象;因此在下一步中不会绘制根节点及与之相关的连边;步骤4:绘制层次化的函数调用概览;根据(步骤3.3)中得到的tree_funcnode和tree_calllink,分层绘制函数节点和调用连边;将函数节点编码为等大的方块,将函数名称标记在方块内部,并显式绘制父节点到其第一个子节点的调用连边。层次化的布局可以确保动态函数调用数据中层次信息的呈现,连边则保证了二元信息的呈现;步骤5:将函数调用的索引区间映射到节点高度上;由于节点是等大的,方块状的,因此将节点的高度作为时间轴,将动态函数调用数据的
索引区间映射到节点高度上,以展示细粒度的动态函数调用的时序信息;获取动态函数调用数据的index区间[0,I
max
],表示函数调用数据共包含(1+I
max
)条调用,对应函数节点的高度node_size;计算分配给每一条函数调用的高度均为h_singleIndex,计算方式如下:h_singleIndex=node_size/(1+I
max
)步骤6:绘制细粒度的函数调用;在函数节点上进行图元设计,使用绘制在方块相应高度上,与节点同宽的水平条来表示该方块所对应的函数被其父节点调用的时序信息;同时借助水平条的颜色来编码被调用函数的类型;步骤6.1:定义水平条的高度为(步骤5)中计算得到的h_singleIndex;定义水平条的宽度和节点边长相等,为node_size;定义水平条的默认颜色为深灰色;用户按需通过水平条的颜色来编码其他类型的信息;步骤6.2:(步骤3.3)得到的tree_funcnode中,每个函数节点对象中都记录了函数的名称,函数被其父节点调用时对应的索引all_index、函数节点的x、y坐标等属性;循环遍历tree_funcnode,对于每一个函数节点对象N
(d,i)
,遍历all_index数组中的所有索引值,...
【专利技术属性】
技术研发人员:赵颖,吕胜蓝,韩非江,姜郦珈,范毅伦,陈茁,袁键,蒋昊瑾,周芳芳,
申请(专利权)人:中南大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。