一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

硬件语言代码克隆分析方法、装置、服务器及存储介质与流程

2022-07-10 07:15:57 来源:中国专利 TAG:


1.本发明涉及源代码分析技术领域,更具体地说,涉及一种硬件语言代码克隆分析方法、装置、服务器及存储介质。


背景技术:

2.开源软件已经渗透到信息技术领域的方方面面,在芯片领域,也出现了大量开源芯片项目。开源芯片项目主要是指用于芯片设计、验证和fpga/cpld 使用的开源项目。这些项目最终通过硬件语言编程语言进行设计和实现。硬件语言编程语言是用于芯片设计和可编程硬件(如fpga、cpld等)的开发语言,主要包括verilog、vhdl、systemverilog硬件语言。随着开源软件的持续发展和广泛应用,硬件语言开源项目也得到了快速发展,形成了各种类型的开源芯片项目。比如,开源cpu如risc-v、mips等,开源通信控制器如ethernet core 等,视频控制器如vga/lcd controller等,内存控制器如ddr3 sdram controller 等,soc如z80等、dsp如fir等,各个类型的开源芯片项目都不断涌现。
3.在芯片设计中,也存在基于开源芯片项目进行二次开发的情况,衍生出相关开源芯片项目,例如,risc-v开源指令集,目前已有大量基于risc-v指令集的开源cpu的硬件语言代码实现。在二次开发中,都可能有意或者无意的引入开源芯片项目的硬件语言代码,这些硬件语言代码都有各自的开源许可证要求,如果引入了有许可证风险的开源硬件语言代码,则会带来知识产权风险。
4.对于这些风险,可以使用代码克隆分析方法,识别克隆代码,进而避免风险。然而,现有的代码克隆分析,主要针对应用程序编程语言,如c、c 、 java、python等,没有针对硬件语言代码的克隆分析方法。


技术实现要素:

5.有鉴于此,本发明提供一种硬件语言代码克隆分析方法、装置、服务器及存储介质,以实现对硬件语言代码的克隆分析。技术方案如下所示:
6.一种硬件语言代码克隆分析方法,包括:
7.确定待进行克隆分析的硬件语言代码文件;
8.提取所述硬件语言代码文件的原文件哈希特征;
9.对所述硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;
10.基于所述目标硬件语言代码文件分别提取所述硬件语言代码文件的文件级克隆特征和代码级克隆特征;
11.基于所述原文件哈希特征、所述文件级克隆特征和所述代码级克隆特征对所述硬件语言代码文件进行多维度特征匹配,得到所述硬件语言代码文件的克隆分析结果。
12.优选的,所述基于所述原文件哈希特征、所述文件级克隆特征和所述代码级克隆特征对所述硬件语言代码文件进行多维度特征匹配,得到所述硬件语言代码文件的克隆分
析结果,包括:
13.将所述原文件哈希特征与预先设置的原文件哈希特征库进行特征匹配,得到所述硬件语言代码文件的第一克隆分析结果;
14.利用所述文件级克隆特征和预先设置的文件级克隆特征库进行特征匹配,得到所述硬件语言代码文件的第二克隆分析结果;
15.对所述代码级克隆特征和预先设置的代码级克隆特征库进行特征匹配,得到所述硬件语言代码文件的第三克隆分析结果;
16.其中,所述第一克隆分析结果、第二克隆分析结果和第三克隆分析结果构成所述硬件语言代码文件的克隆分析结果。
17.优选的,所述对所述硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件,包括:
18.利用硬件语言词法分析器对所述硬件语言代码文件进行去噪处理得到结构化的目标硬件语言代码文件。
19.优选的,根据所述目标硬件语言代码文件提取所述硬件语言代码文件的代码级克隆特征,包括:
20.分别将所述目标硬件语言代码文件中的每行代码作为目标代码;
21.在所述目标硬件语言代码文件中确定分别与每行所述目标代码对应的代码片段,所述代码片段由连续的预设行数代码构成,所述目标代码对应的代码片段以所述目标代码为起始行代码;
22.分别计算每段所述代码片段的片段特征值;
23.基于所述目标硬件语言代码文件对应的所有所述代码片段的片段特征值确定所述硬件语言代码文件的代码级克隆特征。
24.优选的,所述基于所述目标硬件语言代码文件对应的所有所述代码片段的片段特征值确定所述硬件语言代码文件的代码级克隆特征,包括:
25.对所有所述代码片段的片段特征值,利用长度为预设长度,步长为预设步长的滑窗,确定分别位于每个所述滑窗中的片段特征值;
26.针对每个所述滑窗,根据位于所述滑窗中的各个片段特征值确定所述滑窗的一个目标片段特征值;
27.利用各个所述滑窗的目标片段特征值确定所述硬件语言代码文件的代码级克隆特征。
28.优选的,所述对所述代码级克隆特征和预先设置的代码级克隆特征库进行特征匹配,得到所述硬件语言代码文件的第三克隆分析结果,包括:
29.从所述硬件语言代码文件的所有代码级克隆特征中,确定所述硬件语言代码文件的各个目标代码级克隆特征;所述目标代码级克隆特征为与预先设置的代码级克隆特征库特征匹配成功的代码级克隆特征;
30.统计所有所述目标代码级克隆特征对应所述硬件语言代码文件的代码行数;
31.基于所述代码行数和所述硬件语言代码文件的代码总行数,得到所述硬件语言代码文件的第三克隆分析结果。
32.优选的,所述基于所述代码行数和所述硬件语言代码文件的代码总行数,得到所
述硬件语言代码文件的第三克隆分析结果,包括:
33.计算所述代码行数占据所述硬件语言代码文件的代码总行数的比例;
34.将所述比例确定为所述硬件语言代码文件的第三克隆分析结果,所述第三克隆分析结果表征所述硬件语言代码文件的代码克隆度。
35.一种硬件语言代码克隆分析装置,包括:
36.硬件语言代码文件确定单元,用于确定待进行克隆分析的硬件语言代码文件;
37.原文件哈希特征提取单元,用于提取所述硬件语言代码文件的原文件哈希特征;
38.目标硬件语言代码文件生成单元,用于对所述硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;
39.克隆特征提取单元,用于基于所述目标硬件语言代码文件分别提取所述硬件语言代码文件的文件级克隆特征和代码级克隆特征;
40.克隆分析结果生成单元,用于基于所述原文件哈希特征、所述文件级克隆特征和所述代码级克隆特征对所述硬件语言代码文件进行多维度特征匹配,得到所述硬件语言代码文件的克隆分析结果。
41.一种服务器,包括:至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述存储器存储的程序,所述程序用于实现所述硬件语言代码克隆分析方法。
42.一种计算机可读存储介质,用于存储实现所述硬件语言代码克隆分析方法的程序。
43.本技术实施例提供一种硬件语言代码克隆分析方法、装置、服务器及存储介质,通过确定待进行克隆分析的硬件语言代码文件;提取硬件语言代码文件的原文件哈希特征;对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;并基于目标硬件语言代码文件分别提取硬件语言代码文件的文件级克隆特征和代码级克隆特征;进而基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配的方式可以得到硬件语言代码文件的克隆分析结果,以实现对硬件语言代码的克隆分析。
附图说明
44.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
45.图1为本技术实施例提供的一种硬件语言代码克隆分析方法流程图;
46.图2为本技术实施例提供的一种硬件语言代码克隆分析方法示意图;
47.图3为本技术实施例提供的一种基于目标硬件语言代码文件提取硬件语言代码文件的代码级克隆特征的方法流程图;
48.图4为本技术实施例提供的一种基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配,得到硬件语言代码文件的克隆分析结果的方法流程图;
49.图5为本技术实施例提供的一种硬件语言代码克隆分析装置的结构示意图;
50.图6为本技术实施例提供的一种硬件语言代码克隆分析方法所应用于的服务器的硬件结构框图。
具体实施方式
51.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
52.实施例:
53.图1为本技术实施例提供的一种硬件语言代码克隆分析方法流程图。图2 为本技术实施例提供的一种硬件语言代码克隆分析方法示意图。
54.结合图1-2可知,本技术实施例提供的一种硬件语言代码克隆分析方法包括:
55.s101、确定待进行克隆分析的硬件语言代码文件;
56.本技术实施例中,硬件语言代码可以包括verilog、vhdl、systemverilog 硬件语言。
57.以上仅仅是本技术实施例提供的硬件语言代码的优选内容,有关硬件语言代码文件的具体内容,本领域技术人员可根据自己的需求进行设置,在此不做限定。
58.s102、提取硬件语言代码文件的原文件哈希特征;
59.本技术实施例中,可以利用预先设置的第一特征提取算法提取硬件语言代码文件的原文件哈希特征。比如,可以利用第一特征提取算法对硬件语言代码文件进行特征计算得到该硬件语言代码文件的原文件哈希特征。
60.示例性的,第一特征提取算法可以为md5算法,利用md5算法计算硬件语言代码文件的md5值,将计算得到的该硬件语言代码文件的md5值作为该硬件语言代码文件的原文件哈希特征。
61.以上仅仅是本技术实施例提供的第一特征提取算法的优选内容,有关第一特征提取算法的具体内容,本领域技术人员可根据自己的需求进行设置,在此不做限定。
62.s103、对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;
63.利用硬件语言词法分析器对硬件语言代码文件进行去噪处理,将硬件语言代码文件结构化得到目标硬件语言代码文件。
64.本技术实施例中,硬件语言词法分析器对硬件语言代码文件进行去噪处理的处理种类主要涉及到过滤处理、名称替换处理、内容替换处理、保留处理中的任意一项或多项。对硬件语言代码文件进行硬件语言词法分析得到的结构化的目标硬件语言代码文件可以用于后续特征值的提取。
65.示例性的,过滤处理可以包括过滤空格、注释、空白行、预处理命令、可见度修饰符等;名称替换处理可以涉及到对变量名、函数名、参数名的替换等;内容替换可以涉及到预设数据格式的数值替换(比如,整型数值的替换、浮点型数值的替换、寄存器数值的替换等);保留处理主要涉及到对关键词、运算符的保留处理。
66.以上仅仅是本技术实施例提供的过滤处理的优选内容,有关过滤处理的具体内容,本领域技术人员可根据自己的需求进行设置,在此不做限定。
67.s104、根据目标硬件语言代码文件分别提取硬件语言代码文件的文件级克隆特征和代码级克隆特征;
68.本技术实施例中,可以利用预先设置的第二特征提取算法计算经过去噪后的结构化目标硬件语言代码文件的文件级克隆特征。比如,在对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件后,可以利用第二特征提取算法对目标硬件语言代码文件进行特征计算得到硬件语言代码文件的文件级克隆特征。
69.示例性的,第二特征提取算法可以为md5算法,在对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件后,可以利用 md5算法计算目标硬件语言代码文件的md5值,将计算得到的该目标硬件语言代码文件的md5值作为该硬件语言代码文件的文件级克隆特征。
70.以上仅仅是本技术实施例提供的第二特征提取算法的优选内容,有关第二特征提取算法的具体内容,本领域技术人员可根据自己的需求进行设置,在此不做限定。
71.本技术实施例,利用硬件语言词法分析器对硬件语言代码文件进行去噪处理得到结构化的目标硬件语言代码文件后,根据目标硬件语言代码文件提取硬件语言代码文件的代码级克隆特征的详细过程请参见图3,在此不做详细描述。
72.s105、基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配,得到硬件语言代码文件的克隆分析结果。
73.本技术实施例中,预先设置有原文件哈希特征库、文件级克隆特征库以及代码级克隆特征库。相应的,利用预先设置的原文哈希特征库、文件级克隆特征库以及代码级克隆特征库,对待进行克隆分析的硬件代码文件的原文件哈希特征、文件级克隆特征和代码级克隆特征进行多维度特征匹配,得到待进行克隆分析的硬件语言代码文件的克隆分析结果。有关该过程的详细描述请参见图4,在此不做详细说明。
74.图3为本技术实施例提供的一种根据目标硬件语言代码文件提取硬件语言代码文件的代码级克隆特征的方法流程图。
75.如图3所示,该方法包括:
76.s301、分别将目标硬件语言代码文件中的每行代码作为目标代码;
77.s302、在目标硬件语言代码文件中确定分别与每行目标代码对应的代码片段,代码片段由连续的预设行数代码构成,目标代码对应的代码片段以目标代码为起始行代码;
78.本技术实施例中,针对目标硬件语言代码文件中的每行目标代码分别执行如下过程:在目标硬件语言代码文件中确定与该目标代码对应的代码片段,与该目标代码对应的代码片段由目标硬件代码文件中以该行目标代码为起始行代码的连续预设行数的代码构成。
79.比如,目标硬件语言代码文件包括5行代码,这5行代码在目标硬件语言代码文件中的顺序依次为第一行代码、第二行代码、第三行代码、第四行代码和第五行代码;分别确定目标硬件语言代码文件中每行代码为目标代码,即分别确定第一行代码为目标代码、确定第二行代码为目标代码、确定第三行代码为目标代码、确定第四行代码为目标代码以及确定第五行代码为目标代码;若预设行数为2行,则在目标代码为第一行代码时,可以确定
第一行代码、第二行代码构成第一行代码对应的代码片段1;在目标代码为第二行代码时,确定第二行代码和第三行代码构成第二行代码对应的代码片段2;在目标代码为第三行代码时,确定第三行代码和第四行代码为第三行代码对应的代码片段3;在目标代码为第四行代码时,确定第四行代码和第五行代码为第四行代码对应的代码片段4;在目标代码为第五行代码时,因行数不足,未确定出第五行代码对应的代码片段;则代码片段1、代码片段2、代码片段3和代码片段4构成目标硬件语言代码文件对应的所有代码片段。
80.s303、分别计算每段代码片段的片段特征值;
81.本技术实施例,针对每段代码片段,计算该代码片段的特征值,为了便于区分,将代码片段的特征值称为代码片段的片段特征值。
82.仍以上述为例,计算代码片段1的片段特征值1,计算代码片段2的片段特征值2,计算代码片段3的片段特征值3,计算代码片段4的片段特征值4。
83.s304、基于目标硬件语言代码文件对应的所有代码片段的片段特征值确定硬件语言代码文件的代码级克隆特征。
84.仍以上述为例,基于目标硬件语言代码文件的代码片段1的片段特征值1、代码片段2的片段特征值2、代码片段3的片段特征值3、以及代码片段4的片段特征值4,确定待进行克隆分析的硬件语言代码文件的代码级克隆特征。
85.本技术实施例中,优选的,基于目标硬件语言代码文件对应的所有代码片段的片段特征值确定硬件语言代码文件的代码级克隆特征,包括:对所有代码片段的片段特征值,利用长度为预设长度,步长为预设步长的滑窗,确定分别位于每个滑窗中的片段特征值;针对每个滑窗,根据位于该滑窗中的各个片段特征值确定该滑窗的一个目标片段特征值;利用各个滑窗的目标片段特征值确定硬件语言代码文件的代码级克隆特征。
86.本技术实施例中,优选的,预设长度可以为w,预设步长可以为1、2、 3等等,有关预设长度和预设步长的具体内容,本领域技术人员可根据自己的需求进行设置,在此不做限定。
87.针对每个滑窗,可以确定位于该滑窗的各个片段特征值,并从位于该滑窗的各个片段特征值中选取一个片段特征值作为该滑窗的目标片段特征值。
88.作为本技术实施例提供的一种实现方式,可以从位于该滑窗的各个片段特征值中选取一个最小的片段特征值作为该滑窗的目标片段特征值。
89.作为本技术实施例提供的另一种实现方式,可以对位于该滑窗的各个片段特征值按照从大到小的顺序进行排序得到片段特征值序列,从片段特征值序列中选取倒数第3个片段特征值作为该滑窗的目标片段特征值。
90.以上仅仅是本技术实施例提供的确定滑窗的目标片段特征值的优选方式,有关确定滑窗的目标片段特征值的具体方式,本领域技术人员可根据自己的需求进行设置,在此不做限定。
91.示例性的,以预设长度为w,预设步长为1,选取滑窗的目标片段特征值的方式为从位于滑窗的各个片段特征值中选取最小的片段特征值作为滑窗的目标片段特征值为例,对所有代码片段的片段特征值,利用长度为w,步长为1的滑窗,选取每个滑窗中最小片段特征值;检测滑窗中是否存在多个最小片段特征值;如果滑窗中不存在多个最小片段特征值,将从滑窗中选取的最小片段特征值确定为滑窗的目标片段特征值;如果滑窗中存在多个最小
片段特征值,从滑窗的多个最小片段特征值中选取滑窗中最右边的一个最小片段特征值确定为滑窗的目标片段特征值。
92.本技术实施例,可以将每个滑窗的目标片段特征值确定为硬件语言代码文件的一个代码级克隆特征。以上仅仅是本技术实施例提供的利用各个滑窗的目标片段特征值确定硬件语言代码文件的代码级克隆特征的优选方式,有关利用各个滑窗的目标片段特征值确定硬件语言代码文件的代码级克隆特征的具体方式,本领域技术人员可根据自己的需求进行设置,在此不做限定。
93.下面为本技术实施例提供的一种基于目标硬件语言代码文件提取硬件语言代码文件的代码级克隆特征的方法的具体实现方式:
94.(a)按照固定数目行数(预设行数)n=10进行结合,形成一个代码片段;
95.(b)对该代码片段进行特征值计算,得到该代码片段的特征值(为了便于区分将代码片段的特征值称为片段特征值);
96.(c)偏移固定的行数m=1,按照固定数目n=10行进行结合,形成一个新的代码片段,并返回步骤(b)计算新代码片段的片段特征值;
97.(d)重复步骤(b)和步骤(c),直至目标硬件语言代码文件结束;
98.(e)对上述步骤生成的所有代码片段特征值,利用长度为w=5,步长为 1的滑窗,选取每个滑窗中最小片段特征值作为该滑窗的目标片段特征值;如果一个滑窗中存在多个最小片段特征值,则选取该滑窗中最右边的一个最小片段特征值作为该滑窗的目标片段特征值,进而根据各个滑窗的目标片段特征值确定硬件语言代码文件的代码级克隆特征,实现对硬件语言代码文件的代码级克隆特征的提取。
99.本技术实施例中,预先设置有原文件哈希特征库、文件级克隆特征库和代码级克隆特征库。现先先对建立原文件哈希特征库、文件级克隆特征库和代码级克隆特征库的方式进行说明。
100.1、使用原始硬件语言代码文件(原始硬件语言代码文件可以包括已有的硬件语言代码文件或者开源硬件语言代码文件),建立原文件哈希特征库。在这一步,保持原始硬件语言代码文件不变,利用第一特征提取算法,分别计算各个原始硬件语言代码文件的原文件哈希特征,将这些原文件哈希特征存入数据库中,建立原文件哈希特征库。
101.2、使用原始硬件语言代码文件(原始硬件语言代码文件可以包括已有的硬件语言代码文件或者开源硬件语言代码文件),利用词法分析器进行去噪操作,将原始硬件语言代码文件结构化。去噪方法如表1所示。经过去噪后,即可得到结构化的新文件,用于后续特征值的提取。
102.表1
[0103][0104]
3、使用第二特征提取算法,计算经过去噪后的结构化新文件的特征值作为原始硬件语言代码文件的文件级克隆特征,将这些文件级克隆特征存入数据库中,建立文件级克隆特征库。
[0105]
4、利用硬件语言词法分析处理后的结构化新文件内容,提取代码片段级特征。主要通过如下方法进行提取:
[0106]
(a)按照固定数目行数n=10进行结合,形成一个代码片段;
[0107]
(b)对该代码片段进行特征值计算,得到该代码片段的片段特征值;
[0108]
(c)偏移固定的行数m=1,按照固定数目n=10行进行结合,形成一个新的代码片段,并返回步骤(b)计算新片段的片段特征值;
[0109]
(d)重复步骤(b)和步骤(c),直至文件结束;
[0110]
(e)对上述步骤生成的片段特征值,利用长度为w=5,步长为1的滑窗,选取每个滑窗中最小片段特征值,如果滑窗中存在多个最小片段特征值,则选取滑窗最右边的一个最小片段特征值作为该滑窗的目标片段特征值,进而根据各个滑窗的目标片段特征值确定原始硬件语言代码文件的代码级克隆特征,实现对原始硬件语言代码文件的代码级克隆特征的提取。
[0111]
(f)将硬件语言代码文件的代码级克隆特征存入数据库中,建立代码级克隆特征库。
[0112]
以上为本技术实施例提供的建立原文件哈希特征库、文件级克隆特征库和代码级克隆特征库的优选方式。
[0113]
需要说明的是,在建立原文件哈希特征库时提取已有的硬件语言代码或者开源硬
件语言代码的原文件哈希特征的方式与本技术实施例提供的提取待进行克隆分析的硬件语言代码文件的原文件哈希特征的方式相同;提取已有的硬件语言代码或者开源硬件语言代码的文件级克隆特征的方式与本技术实施例提供的提取待进行克隆分析的硬件语言代码文件的文件级克隆特征的方式相同;提取已有的硬件语言代码或者开源硬件语言代码的代码级克隆特征的方式与本技术实施例提供的提取待进行克隆分析的硬件语言代码文件的代码级克隆特征的方式相同,在此不做详细描述。
[0114]
图4为本技术实施例提供的一种基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配,得到硬件语言代码文件的克隆分析结果的方法流程图。
[0115]
如图4所示,该方法包括:
[0116]
s401、将原文件哈希特征与预先设置的原文件哈希特征库进行特征匹配,得到硬件语言代码文件的第一克隆分析结果;
[0117]
将待进行克隆分析的硬件语言代码文件的原文哈希特征与原文件哈希特征库进行匹配,一旦匹配上,则表明待进行克隆分析的硬件语言代码文件与原文件哈希特征库中对应的硬件语言代码文件完全一样,硬件语言代码内容相似度100%。
[0118]
s402、利用文件级克隆特征和预先设置的文件级克隆特征库进行特征匹配,得到硬件语言代码文件的第二克隆分析结果;
[0119]
将待进行克隆分析的硬件语言代码文件的文件级克隆特征与文件级克隆特征库进行匹配,一旦匹配上,则表明待进行克隆分析的硬件语言代码文件与文件级克隆特征库中对应的硬件语言代码文件结构极度相似,硬件语言代码结构相似度100%。
[0120]
s403、对代码级克隆特征和预先设置的代码级克隆特征库进行特征匹配,得到硬件语言代码文件的第三克隆分析结果。
[0121]
将待进行克隆分析的硬件语言代码文件的代码级克隆特征与代码级克隆特征库进行匹配,统计匹配上的代码级克隆特征所对应的代码行数nc占待进行克隆分析的硬件语言代码文件的总代码行数na的比例,即可得到该待进行克隆分析的硬件语言代码文件的第三克隆分析结果,第三克隆分析结果可以认为是该待进行克隆分析的硬件语言代码文件的代码克隆度nc/na*100%。
[0122]
本技术实施例中,第一克隆分析结果、第二克隆分析结果和第三克隆分析结果构成硬件语言代码文件的克隆分析结果。
[0123]
进一步的,本技术实施例提供的一种硬件语言代码克隆分析结果还可以统计分析各个维度的匹配数量及代码克隆度情况,以根据需要进行排序、筛选等操作。
[0124]
下面对本技术实施例提供的一种硬件语言代码克隆分析方法进行进一步的详细说明。
[0125]
本技术实施例提供的一种硬件语言代码克隆分析方法,对硬件语言代码进行原文件哈希特征、文件级克隆特征和代码级克隆特征(也可称为代码片段级克隆特征)进行提取,然后进行相应维度的特征匹配,依据不同的匹配维度,计算硬件语言代码文件之间的克隆度。主要步骤如下:
[0126]
(1)对硬件语言代码文件提取原文件哈希特征。
[0127]
该步骤提取硬件语言代码文件的特征值,该特征值可以是md5、sha1等哈希值。
[0128]
(2)对硬件语言代码文件进行硬件语言词法分析,得到结构化的新文件。
[0129]
硬件语言词法分析器分为verilog、vhdl、systemverilog词法分析器,主要作用对verilog、vhdl、systemverilog硬件语言代码中与克隆分析相关度不大的内容进行去噪操作,从而提高克隆分析的分析能力。主要的去噪方法如上述表1所示。
[0130]
经过硬件语言词法分析器进行去噪操作后,即可得到结构化的新文件,该文件用于后续特征的提取。
[0131]
(3)对结构化的新文件提取硬件语言代码文件的文件级克隆特征。
[0132]
该步骤是提取硬件语言代码文件的文件级克隆特征,通过计算结构化的新文件的哈希值,即可得到硬件语言代码文件的文件级克隆特征。硬件语言代码文件的文件级克隆特征的特征类型和硬件语言代码文件的原文件哈希特征的特征类型一样。例如,原文件哈希特征选择md5作为特征值,那么硬件语言代码文件的文件级克隆特征也选择md5作为特征值。
[0133]
(4)对结构化的新文件提取硬件语言代码文件的代码级克隆特征。
[0134]
该步骤是提取硬件语言代码文件的代码级克隆特征,主要通过如下方法进行提取:
[0135]
(a)对硬件语言词法分析处理后的结构化新文件内容,按照固定数目行数n进行结合,形成一个代码片段;
[0136]
(b)对该代码片段进行特征值计算,得到该硬件语言代码片段的片段特征值;
[0137]
(c)偏移固定的行数m,按照固定数目n行进行结合,形成一个新的代码片段,并返回步骤(b)计算新代码片段的片段特征值;
[0138]
(d)重复步骤(b)和步骤(c),直至文件结束;
[0139]
(e)对上述步骤生成的代码级克隆特征,利用长度为w,步长为1的滑窗,选取每个滑窗中最小片段特征值;针对每个滑窗而言,如果滑窗中存在多个最小片段特征值,则选取该滑窗中最右边的一个最小片段特征值作为该滑窗的目标片段特征值,进而根据各个滑窗的目标片段特征值确定硬件语言代码文件的代码级克隆特征,实现硬件语言代码文件的代码级克隆特征的提取。
[0140]
(5)按照步骤(1)至步骤(4),建立用于比对的特征库;
[0141]
该步骤主要建立用于匹配的比对特征库。将作为匹配基准的硬件语言代码,按照步骤(1)至步骤(4),建立相应的特征库。
[0142]
(6)对待进行克隆分析的硬件语言代码文件,按照(1)到(4)的步骤提取相应的特征,对提取的特征与用于比对的特征库进行多维度匹配,分析硬件语言代码文件的克隆度。
[0143]
该步骤是对待进行克隆分析的硬件语言代码文件,进行多维度特征匹配,并进行克隆度分析。多维度特征分析,是指原文件哈希特征与原文件哈希特征(库)进行匹配,文件级克隆特征与文件级克隆特征(库)匹配,代码级克隆特征与代码级克隆特征(库)匹配。
[0144]
对于原文件哈希特征匹配上的硬件语言代码文件,硬件语言代码内容克隆度为百分之百;对于文件级克隆特征匹配上的硬件语言代码文件,硬件语言代码结果克隆度为百分之百;对于代码片段级克隆特征的匹配,硬件语言代码结构克隆度通过匹配的硬件语言代码片段计算所得。计算方法是,统计匹配上的代码级克隆特征所对应的代码行数nc占待分析文件的总行数na的比例,即可得到该代码片段级克隆文件的代码克隆度nc/na*100%。
[0145]
进一步,本技术实施例提供的一种硬件语言代码克隆分析方法还可以统计分析各个维度的匹配数量及代码克隆度情况;根据需要进行排序、筛选等操作。
[0146]
图5为本技术实施例提供的一种硬件语言代码克隆分析装置的结构示意图。
[0147]
如图5所示,该装置包括:
[0148]
硬件语言代码文件确定单元51,用于确定待进行克隆分析的硬件语言代码文件;
[0149]
原文件哈希特征提取单元52,用于提取硬件语言代码文件的原文件哈希特征;
[0150]
目标硬件语言代码文件生成单元53,用于对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;
[0151]
克隆特征提取单元54,用于基于目标硬件语言代码文件分别提取硬件语言代码文件的文件级克隆特征和代码级克隆特征;
[0152]
克隆分析结果生成单元55,用于基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配,得到硬件语言代码文件的克隆分析结果。
[0153]
在本技术实施例中,优选的,克隆分析结果生成单元包括:
[0154]
第一匹配单元,用于将原文件哈希特征与预先设置的原文件哈希特征库进行特征匹配,得到硬件语言代码文件的第一克隆分析结果;
[0155]
第二匹配单元,用于利用文件级克隆特征和预先设置的文件级克隆特征库进行特征匹配,得到硬件语言代码文件的第二克隆分析结果;
[0156]
第三匹配单元,用于对代码级克隆特征和预先设置的代码级克隆特征库进行特征匹配,得到硬件语言代码文件的第三克隆分析结果;
[0157]
其中,第一克隆分析结果、第二克隆分析结果和第三克隆分析结果构成硬件语言代码文件的克隆分析结果。
[0158]
在本技术实施例中,优选的,目标硬件语言代码文件生成单元具体用于利用硬件语言词法分析器对硬件语言代码文件进行去噪处理得到结构化的目标硬件语言代码文件。
[0159]
在本技术实施例中,优选的,用于基于目标硬件语言代码文件分别提取硬件语言代码文件的文件级克隆特征和代码级克隆特征的克隆特征提取单元,包括:
[0160]
目标代码确定单元,用于分别将目标硬件语言代码文件中的每行代码作为目标代码;
[0161]
代码片段确定单元,用于在目标硬件语言代码文件中确定分别与每行目标代码对应的代码片段,代码片段由连续的预设行数代码构成,目标代码对应的代码片段以目标代码为起始行代码;
[0162]
片段特征值计算单元,用于分别计算每段代码片段的片段特征值;
[0163]
代码级克隆特征提取单元,用于基于目标硬件语言代码文件对应的所有代码片段的片段特征值确定硬件语言代码文件的代码级克隆特征。
[0164]
在本技术实施例中,优选的,代码级克隆特征提取单元包括:
[0165]
选取单元,用于对所有代码片段的片段特征值,利用长度为w,步长为1 的滑窗,选取每个滑窗中最小片段特征值;
[0166]
检测单元,用于检测滑窗中是否存在多个最小片段特征值;
[0167]
第一确定单元,用于如果滑窗中不存在多个最小片段特征值,将从滑窗中选取的
最小片段特征值确定为硬件语言代码文件的一个代码级克隆特征;
[0168]
第二确定单元,用于如果滑窗中存在多个最小片段特征值,从滑窗的多个最小片段特征值中选取滑窗中最右边的一个最小片段特征值确定为硬件语言代码文件的一个代码级克隆特征。
[0169]
在本技术实施例中,优选的,第三匹配单元包括:
[0170]
目标代码级克隆特征确定单元,用于从硬件语言代码文件的所有代码级克隆特征中,确定硬件语言代码文件的各个目标代码级克隆特征;目标代码级克隆特征为与预先设置的代码级克隆特征库特征匹配成功的代码级克隆特征;
[0171]
统计单元,用于统计所有目标代码级克隆特征对应硬件语言代码文件的代码行数;
[0172]
计算单元,用于基于代码行数和硬件语言代码文件的代码总行数,得到硬件语言代码文件的第三克隆分析结果。
[0173]
在本技术实施例中,优选的,计算单元,包括:
[0174]
比例计算单元,用于计算代码行数占据硬件语言代码文件的代码总行数的比例;
[0175]
分析结果确定单元,用于将比例确定硬件语言代码文件的第三克隆分析结果,第三克隆分析结果表征硬件语言代码文件的代码克隆度。
[0176]
为了便于理解,现从服务器的角度对本技术实施例提供的一种硬件语言代码克隆分析方法进行详细说明。服务器可以是网络侧为用户提供服务的服务设备,其可能是多台服务器组成的服务器集群,也可能是单台服务器。
[0177]
图6为本技术实施例提供的一种服务器的硬件结构框图。参照图6,服务器的硬件结构可以包括:处理器61,通信接口62,存储器63和通信总线64;
[0178]
在本发明实施例中,处理器61、通信接口62、存储器63、通信总线64的数量均可以为至少一个,且处理器61、通信接口62、存储器63通过通信总线 64完成相互间的通信;
[0179]
处理器61可能是一个中央处理器cpu,或者是特定集成电路asic (application specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
[0180]
存储器63可能包含高速ram存储器,也可能还包括非易失性存储器 (non-volatile memory)等,例如至少一个磁盘存储器;
[0181]
其中,存储器存储有程序,处理器可调用存储器存储的程序,程序用于:
[0182]
确定待进行克隆分析的硬件语言代码文件;
[0183]
提取硬件语言代码文件的原文件哈希特征;
[0184]
对硬件语言代码文件进行硬件语言词法分析得到结构化的目标硬件语言代码文件;
[0185]
基于目标硬件语言代码文件分别提取硬件语言代码文件的文件级克隆特征和代码级克隆特征;
[0186]
基于原文件哈希特征、文件级克隆特征和代码级克隆特征对硬件语言代码文件进行多维度特征匹配,得到硬件语言代码文件的克隆分析结果。
[0187]
可选的,程序的细化功能和扩展功能可参照上文描述。
[0188]
进一步的,本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介
质中存储有计算机可执行指令,该计算机可执行指令用于执行上述硬件语言代码克隆分析方法。
[0189]
可选的,计算机可执行指令的细化功能和扩展功能可参照上文描述。
[0190]
本技术实施例提供一种硬件语言代码克隆度分析方法、装置、服务器及存储介质,用于分析硬件语言代码,特别是verilog、vhdl、systemverilog硬件语言代码的克隆情况。
[0191]
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0192]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0193]
对本发明所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献