[发明专利]一种基于程序分析的软件日志行为自动识别方法有效
申请号: | 201611016393.0 | 申请日: | 2016-11-18 |
公开(公告)号: | CN106598843B | 公开(公告)日: | 2018-12-18 |
发明(设计)人: | 廖湘科;李姗姗;贾周阳;刘晓东;董威;林彬;周书林;徐向阳;郦旺 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 湖南兆弘专利事务所(普通合伙) 43008 | 代理人: | 赵洪 |
地址: | 410073 湖南省长沙市砚瓦池*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种基于程序分析的软件日志行为自动识别方法,目的是解决现有日志增强工作难以自动、准确识别软件已有日志行为的问题。技术方案是先将目标工程Proj的源代码以函数为单位分割,识别函数中的分支语句、函数调用语句、日志语句,并分别放到该函数的分支语句集合、函数调用语句集合和日志语句集合中,筛选出调用集和分支集之间存在数据依赖的元素,在存在数据依赖的元素中再筛选出与日志集元素存在控制依赖的元素,得到日志行为集。采用本发明可以自动识别源代码中面向故障诊断的日志行为,也可以精确识别函数调用语句、分支语句与日志语句之间的对应关系,提升日志增强的有效性,使得日志行为识别更为快速、准确。 | ||
搜索关键词: | 一种 基于 程序 分析 软件 日志 行为 自动识别 方法 | ||
【主权项】:
1.一种基于程序分析的软件日志行为自动识别方法,其特征在于包括以下步骤:第一步、准备输入输出,方法为:1.1记目标工程为Proj,将Proj的源代码以函数为单位分割,得到函数集F={func1,func2,...,funcf},其中func1为Proj中的第1个函数,f为Proj中函数的个数;1.2建立日志行为集LB,用于保存日志行为识别结果,并将LB初始化为空;第二步、建立函数的分支语句、函数调用语句和日志语句的集合,方法为:2.1令变量i=0;2.2令i=i+1,如果i>f,执行第六步;否则执行2.3;2.3建立分支集B(i)、调用集C(i)和日志集L(i),分别表示funci中的分支语句集合、函数调用语句集合和日志语句集合,并将B(i)、C(i)和L(i)全部初始化为空;第三步、填充B(i)、C(i)和L(i),方法是:3.1填充分支集B(i):使用前端分析工具识别funci中的所有分支语句,并加入B(i)中,得到B(i)={brani,1,brani,2,...,brani,b(i)},其中brani,1为funci的第1个分支语句,b(i)为funci中分支语句的个数;3.2填充调用集C(i):使用前端分析工具识别funci中的所有函数调用语句,并加入C(i)中,得到C(i)={calli,1,calli,2,...,calli,c(i)},其中calli,1为funci的第1个函数调用语句,c(i)为funci中函数调用语句的个数;3.3填充日志集L(i),方法是:3.3.1令变量j=0;3.3.2令j=j+1,如果j>c(i),则L(i)={logi,1,logi,2,...,logi,l(i)},其中logi,1为第i个函数的第1个日志语句,l(i)为第i个函数中日志语句的个数,执行第四步;如果j<=c(i),执行3.3.3;3.3.3判断calli,j是否为日志语句,若是,则将calli,j所表示的函数调用语句作为日志语句加入L(i)中,若不是,则执行3.3.2;第四步、筛选出集合C(i)和B(i)之间存在数据依赖的元素,方法是:4.1枚举C(i)和B(i)中的元素,方法是:4.1.1令变量m=0,令变量n=0;4.1.2令m=m+1,如果m>c(i),执行第2.2步;否则执行4.1.3;4.1.3令n=n+1,如果n>b(i),执行4.1.2;否则执行4.2;4.2判断brani,n与calli,m之间是否存在数据依赖,若存在数据依赖,执行第五步;若不存在数据依赖,执行4.1.3;判断brani,n与calli,m之间是否存在数据依赖的方法是:4.2.1使用前端分析工具分别获得brani,n的行号bran‑line(i,n)和calli,m的行号call‑line(i,m),如果bran‑line(i,n)等于call‑line(i,m),令变量y=0,判定brani,n与calli,m之间存在数据依赖,判定结束;否则执行4.2.2;4.2.2建立brani,n的变量集V(i,n)={vari,n,1,vari,n,2,...,vari,n,v(i,n)},其中vari,n,1为brani,n中的第1个变量,v(i,n)为brani,n中变量的个数;4.2.3建立calli,m的参数集A(i,m)={argi,m,1,argi,m,2,...,argi,m,a(i,m)},其中argi,m,1为calli,m中的第1个参数,a(i,m)为calli,m中参数的个数,将calli,m的返回值记为argi,m,0,并加入A(i,m),则集合A(i,m)中有a(i,m)+1个元素;4.2.4枚举V(i,n)和A(i,m)中的元素,方法是:4.2.4.1令变量x=0;4.2.4.2令变量x=x+1,y=‑1,如果x>v(i,n),返回否,否则执行4.2.4.3;4.2.4.3令变量y=y+1,如果y>a(i,m),执行4.2.4.2,否则执行4.2.5;4.2.5利用别名分析工具判断vari,n,x和argi,m,y是否为别名,如果是别名,执行4.2.6,否则执行4.2.4.3;4.2.6确定不同的依赖形式,包括在函数调用前,对函数参数进行判断;以及在函数调用后,对函数返回值和指针类型的参数进行判断,方法是:4.2.6.1如果bran‑line(i,n)0,判定brani,n与calli,m之间存在数据依赖,判定结束,否则执行4.2.6.2;4.2.6.2如果bran‑line(i,n)>call‑line(i,m)且y=0,判定brani,n与calli,m之间存在数据依赖,判定结束,否则执行4.2.6.3;4.2.6.3如果bran‑line(i,n)>call‑line(i,m)且argi,m,y是指针类型参数,判定brani,n与calli,m之间存在数据依赖,判定结束,否则执行4.2.4.3;第五步、筛选出集合L(i)中与brani,n存在控制依赖的元素,方法是:5.1判断brani,n是if语句还是switch语句,是if语句时执行5.2,是switch时执行5.3;5.2使用前端分析工具获得if语句包含的then语句块和else语句块,执行5.2.1;5.2.1顺序搜索then语句块中的所有语句,当有语句stmt=logi,z时,执行5.2.2,否则执行5.2.3;5.2.2建立六元组lb=,并将lb加入LB,lb表示在目标工程Proj的第i个函数体中,通过第n个判断语句对第m个函数调用语句的第y个参数进行了判断,并在if‑then块中加了日志语句,且此日志语句为本函数体中的第z个日志语句,1<=z<=l(i),y等于0时表示函数返回值,y等于I时表示函数的第I个参数,I为正整数;5.2.3顺序搜索else语句块中的所有语句,当有语句stmt=logi,z时,执行5.2.4,否则执行5.2.5;5.2.4建立六元组lb=,并将lb加入日志行为集LB;5.2.5calli,m和brani,n之间存在的日志行为识别完成,执行4.1.3;5.3使用前端分析工具获得switch语句包含的case语句块和default语句块,执行5.3.1;5.3.1顺序搜索case语句块中的所有语句,当有语句stmt=logi,z时,执行5.3.2,否则执行5.3.3;5.3.2建立六元组lb=,并将lb加入日志行为集LB;5.3.3顺序搜索default语句块中的所有语句,当有语句stmt=logi,z时,执行5.3.4,否则执行5.3.5;5.3.4建立六元组lb=,并将lb加入日志行为集LB;5.3.5calli,m和brani,n之间存在的日志行为识别完成,执行4.1.3;第六步、识别日志行为结束,输出LB。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201611016393.0/,转载请声明来源钻瓜专利网。