CN111813412A - 构建评测二进制代码比对工具的测试数据集的方法及系统 - Google Patents
构建评测二进制代码比对工具的测试数据集的方法及系统 Download PDFInfo
- Publication number
- CN111813412A CN111813412A CN202010599618.XA CN202010599618A CN111813412A CN 111813412 A CN111813412 A CN 111813412A CN 202010599618 A CN202010599618 A CN 202010599618A CN 111813412 A CN111813412 A CN 111813412A
- Authority
- CN
- China
- Prior art keywords
- version
- information
- project
- commit
- compiling
- 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.)
- Granted
Links
Images
Classifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及构建评测二进制代码比对工具的测试数据集的方法,包括:从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;项目的信息包括项目的各发布版本及父版本/子版本对的commit信息;构建分布式编译源代码的环境,以项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;基于获取的二进制代码数据样本及差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
Description
技术领域
本发明涉及二进制代码比对工具评测领域,特别涉及构建评测二进制代码比对工具的测试集的方法及系统。
背景技术
对于漏洞挖掘研究人员而言,对二进制代码进行比对是一项重要的工作。不同的二进制代码比对工具提供了不同的功能,二进制代码比对工具可以用于对二进制代码的相似性与差异进行研究。
二进制代码比对方法可以用于系统补丁分析,软件保护等领域。有多种二进制代码比对工具可以用于对二进制代码的相似性与差异进行研究。本专利提出了构建测试集的方法,所构建的测试集用于评测二进制代码比对工具的性能。
发明内容
本发明目的在于,提出构建测试数据集的方法,所构建的测试数据集用于评测二进制代码比对工具的性能。
为实现上述目的,一方面,本发明提供了构建评测二进制代码比对工具的测试数据集的方法,该方法包括以下步骤:
从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
基于获取的二进制代码数据样本及差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
另一方面,本发明提供了构建评测二进制代码比对工具的测试数据集的系统,该系统包括:
采集单元,用于从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
编译单元,用于构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
解析单元,用于依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
提取单元,用于基于获取的二进制代码数据样本及差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
本发明在构建的分布式编译环境中对项目不同版本的源代码样本进行分布式编译,以减少样本数据的准备时间;并比较父版本/子版本对commit信息,能够有效提取差异函数名称。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1为本发明实施例提供的构建评测二进制代码比对工具的测试数据集的方法流程示意图;
图2为分布式编译方法流程示意图;
图3为差异函数名称提取方法流程示意图;
图4为本发明实施例提供的构建评测二进制代码比对工具的测试数据集的方法系统结构示意图。
具体实施方式
图1为本发明实施例提供的构建评测二进制代码比对工具的测试数据集的方法流程示意图。如图1所示,该方法包括以下步骤:
步骤一,从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
步骤二,构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
具体地,在构建的分布式编译环境中对项目的各发布版本样本程序进行分布式编译,以减少样本数据的准备时间。分布式编译算法由主机程序和多个从机程序实现,如图2所示:
主机程序:
主机程序输入:从机编号。
主机程序输出:调度多个从机进行分布式编译。
主机程序是运行于主机的程序,从机程序是运行于从机的程序。在主机程序的第1行,是主机程序定义的起始。从第2行到第6行,设置分配任务的参数并且进行主机连接从机的操作。在第2行,设置从机数量,可以根据用户的具体的硬件环境进行配置,本发明实施例可以将算法部署至不同数量的从机的环境中。第3行定义从机数组,第4行定义进程数组,第5行,主机进行任务划分操作,以将任务均衡的分配至各从机。第6行,主机连接从机。第7行,循环结构遍历各从机,开启多进程,每个进程对应一台从机,每个进程调用进程执行函数。第8行,进程同步,以保证各进程正确完成本进程的任务。
第10行,是主机进程执行函数定义的起始。本函数运行于主机。在主程序中,将从机待执行的命令封装在字符串数组中,第11行,依据不同的功能,将字符串划分为不同的待执行的命令。第12行,将命令发送到各从机。从机接收到主机传递的命令,执行。
待编译的样本程序已经存储于各从机的存储器中,第15行,遍历各样本程序,调用从机本地脚本程序编译各样本。在从机内部,对各样本程序进行串行编译,从机之间,并行编译各样本程序。第18行到第20行,从机本地脚本程序设置工作目录,执行编译命令,并将编译生成的二进制代码数据样本拷贝至指定目录。
步骤三,依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
具体地,提出差异函数名提取的算法如图3所示。
差异函数名提取算法输入:父版本/子版本对的commit文件。
输出:代码被修改的函数名称。
差异函数名提取算法提取的是函数名称,所得结果表明本函数的代码被修改了。对应到父版本代码文件与子版本代码文件,表明这两个版本文件之间有差异。第1行定义数组变量diffPC以存储父/子版本对名称。通过构建基于MySQL的数据库存储系统,以爬虫程序爬取的源代码信息存储于TableSource表格中。第2行从数据库表格TableSource中查询源代码名称。
第4行对diffPC变量进行判断,如果已经提取了根父/子版本对信息,则进行提取差异函数名操作。其中第5行至第12行,将根父/子版本对之间的所有commits保存至数组变量ListCommit中。第13至第17行,循环遍历ListCommit数组中保存的所有父/子版本对信息,第14行,读取commit文件,提取函数名至matchfunc变量。第15行,提取特定位置的文本,保存至变量matchtxt。第16行,比较matchfunc变量与matchtxt变量是否相等,依据比较所得的不同结果,提取差异函数名称。
如果对第4行进行判断的结果表明,未提取根父/子版本对信息,则执行第19行,读取根父/子版本对信息,保存至变量diffPC中。
第20行,循环遍历SourceNames变量结束。
在一个差异commit文件示例中:
上述示例文件表示执行“git diff”命令之后,两个commit文件之间的差异结果。示例文件的第一行表示差异的总结信息。称为”@@”行。其他行称为非”@@”行。在第一行中,第一个”@@”后的内容表示差异所在的行号。第二个“@@”后的内容表示“函数名称”,这里函数名称添加了引号,是因为本发明需要提取差异函数名称,但是“git diff”命令的输出结果通常不是正确的“函数名称”。第2行到第9行表示特定的差异。第4行有“+”标记,表示在第二个commit文件中添加了本行。差异commit文件中也有“-”标记,表示第二个commit文件中无本行内容。本示例没有列出“-”标记的情况。行之前无“+”或者“-”标记,表示两个commit文件的本行内容相同。
步骤四,依据提取的差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
本发明实施例在构建的分布式编译环境中对多个样本程序进行分布式编译,以减少样本数据的准备时间;并比较父版本/子版本对commit信息,能够有效提取差异函数名称。
图4为本发明实施例提供的构建评测二进制代码比对工具的测试数据集的方法系统结构示意图。如图4所示,该系统包括:采集单元,编译单元,解析单元,提取单元。
采集单元,用于从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
编译单元,用于构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
解析单元,用于依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
提取单元,基于编译单元,获得了各版本对应的二进制文件,基于解析单元,获得了相邻两个版本间发生过变化的函数列表,结合编译单元及解析单元的结果,依据解析出的函数列表,在对应的二进制文件中提取出这些函数的二进制代码。
本发明实施例在构建的分布式编译环境中对多个样本程序进行分布式编译,以减少样本数据的准备时间;并比较父版本/子版本对commit信息,能够有效提取差异函数名称。
显而易见,在不偏离本发明的真实精神和范围的前提下,在此描述的本发明可以有许多变化。因此,所有对于本领域技术人员来说显而易见的改变,都应包括在本权利要求书所涵盖的范围之内。本发明所要求保护的范围仅由所述的权利要求书进行限定。
Claims (6)
1.构建评测二进制代码比对工具的测试数据集的方法,其特征在于,包括以下步骤:
从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
基于获取的二进制代码数据样本及差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
2.根据权利要求1所述的方法,其特征在于,所述构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本步骤,包括:
由主机程序设置分配任务的参数并且进行主机连接从机的操作,以及设置从机数量,主机进行任务划分操作,以将任务均衡的分配至各从机;主机连接从机,循环结构遍历各从机,开启多进程,每个进程对应一台从机,每个进程调用进程执行函数,进程同步,以保证各进程正确完成本进程的任务;
从机遍历各版本的源代码样本,调用从机本地脚本程序编译各版本的源代码样本;在从机内部,对各样本代码进行串行编译,从机之间,并行编译各样本代码;从机本地脚本程序设置工作目录,执行编译命令,并将编译生成的二进制程序拷贝至指定目录。
3.根据权利要求1所述的方法,其特征在于,提取差异函数名称步骤,包括:
定义存储父版本文件/子版本文件对的数组;
父版本/子版本对信息存储于数据库表格中;
连接数据库,遍历父版本/子版本对;
获取版本对的commit信息;
遍历各commit信息;
依据commit信息中的URL信息,下载对应的commit文件;
读取commit文件,提取非“@@”行中的函数名称结果,保存至变量matchfunc。
提取“@@”行中的文本,保存至变量matchtxt。
比较matchfunc变量与matchtxt变量是否相等,依据比较所得的不同结果,提取差异函数名称。
4.构建评测二进制代码比对工具的测试数据集的系统,其特征在于,包括:
采集单元,用于从GitHub代码托管服务平台采集多个项目的信息,并存储于数据库系统中;所述项目的信息包括项目的各发布版本及父版本/子版本对的commit信息,项目版本信息包含当前项目的多个不同版本的源代码;
编译单元,用于构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本;
解析单元,用于依据源代码名称获取对应父版本/子版本对的commit信息,以及遍历存储于数据库中的父版本/子版本对的commit信息,比较父版本/子版本对commit文件的信息,提取差异函数名称;
提取单元,用于基于获取的二进制代码数据样本及差异函数名称列表,在对应的二进制代码数据样本中提取各差异函数的二进制代码。
5.根据权利要求4所述的系统,其特征在于,所述编译单元,具体用于:
构建分布式编译源代码的环境,以所述项目各发布版本信息为输入,对项目不同版本的源代码进行编译,获取各版本源代码对应的二进制代码数据样本步骤,包括:
由主机程序设置分配任务的参数并且进行主机连接从机的操作,以及设置从机数量,主机进行任务划分操作,以将任务均衡的分配至各从机;主机连接从机,循环结构遍历各从机,开启多进程,每个进程对应一台从机,每个进程调用进程执行函数,进程同步,以保证各进程正确完成本进程的任务;
从机遍历各版本的源代码样本,调用从机本地脚本程序编译各版本的源代码样本;在从机内部,对各样本代码进行串行编译,从机之间,并行编译各样本代码;从机本地脚本程序设置工作目录,执行编译命令,并将编译生成的二进制程序拷贝至指定目录。
6.根据权利要求4所述的系统,其特征在于,所述解析单元,具体用于:
定义存储父版本文件/子版本文件对的数组;
父版本/子版本对信息存储于数据库表格中;
连接数据库,遍历父版本/子版本对;
获取版本对的commit信息;
遍历各commit信息;
依据commit信息中的URL信息,下载对应的commit文件;
读取commit文件,提取非“@@”行中的函数名称结果,保存至变量matchfunc。
提取“@@”行中的文本,保存至变量matchtxt。
比较matchfunc变量与matchtxt变量是否相等,依据比较所得的不同结果,提取差异函数名称。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010599618.XA CN111813412B (zh) | 2020-06-28 | 2020-06-28 | 构建评测二进制代码比对工具的测试数据集的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010599618.XA CN111813412B (zh) | 2020-06-28 | 2020-06-28 | 构建评测二进制代码比对工具的测试数据集的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111813412A true CN111813412A (zh) | 2020-10-23 |
CN111813412B CN111813412B (zh) | 2023-03-24 |
Family
ID=72855120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010599618.XA Active CN111813412B (zh) | 2020-06-28 | 2020-06-28 | 构建评测二进制代码比对工具的测试数据集的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111813412B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732678A (zh) * | 2021-01-18 | 2021-04-30 | 中国民航信息网络股份有限公司 | 数据比对的方法、系统、电子设备及计算机存储介质 |
CN112988217A (zh) * | 2021-03-10 | 2021-06-18 | 北京大学 | 用于快速全网代码溯源检测的代码库设计方法及检测方法 |
CN113127339A (zh) * | 2021-03-24 | 2021-07-16 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
CN113434146A (zh) * | 2021-06-22 | 2021-09-24 | 青岛海尔科技有限公司 | 代码的编译方法、装置、存储介质及电子装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN109426604A (zh) * | 2017-08-22 | 2019-03-05 | 阿里巴巴集团控股有限公司 | 代码开发的监控方法及设备 |
CN109766261A (zh) * | 2018-12-14 | 2019-05-17 | 中国平安财产保险股份有限公司 | 覆盖测试方法、装置、计算机设备和存储介质 |
CN110292775A (zh) * | 2019-07-01 | 2019-10-01 | 网易(杭州)网络有限公司 | 获取差异数据的方法及装置 |
CN110489126A (zh) * | 2019-08-08 | 2019-11-22 | 腾讯科技(深圳)有限公司 | 编译任务的执行方法和装置、存储介质及电子装置 |
-
2020
- 2020-06-28 CN CN202010599618.XA patent/CN111813412B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
CN109426604A (zh) * | 2017-08-22 | 2019-03-05 | 阿里巴巴集团控股有限公司 | 代码开发的监控方法及设备 |
CN109766261A (zh) * | 2018-12-14 | 2019-05-17 | 中国平安财产保险股份有限公司 | 覆盖测试方法、装置、计算机设备和存储介质 |
CN110292775A (zh) * | 2019-07-01 | 2019-10-01 | 网易(杭州)网络有限公司 | 获取差异数据的方法及装置 |
CN110489126A (zh) * | 2019-08-08 | 2019-11-22 | 腾讯科技(深圳)有限公司 | 编译任务的执行方法和装置、存储介质及电子装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112732678A (zh) * | 2021-01-18 | 2021-04-30 | 中国民航信息网络股份有限公司 | 数据比对的方法、系统、电子设备及计算机存储介质 |
CN112732678B (zh) * | 2021-01-18 | 2024-01-26 | 中国民航信息网络股份有限公司 | 数据比对的方法、系统、电子设备及计算机存储介质 |
CN112988217A (zh) * | 2021-03-10 | 2021-06-18 | 北京大学 | 用于快速全网代码溯源检测的代码库设计方法及检测方法 |
CN112988217B (zh) * | 2021-03-10 | 2023-11-17 | 北京大学 | 用于快速全网代码溯源检测的代码库设计方法及检测方法 |
CN113127339A (zh) * | 2021-03-24 | 2021-07-16 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
CN113127339B (zh) * | 2021-03-24 | 2023-02-10 | 西北大学 | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 |
CN113434146A (zh) * | 2021-06-22 | 2021-09-24 | 青岛海尔科技有限公司 | 代码的编译方法、装置、存储介质及电子装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111813412B (zh) | 2023-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111813412B (zh) | 构建评测二进制代码比对工具的测试数据集的方法及系统 | |
CN102135938B (zh) | 一种软件产品测试方法及系统 | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
US20080104096A1 (en) | Software development system | |
US20130179863A1 (en) | Bug variant detection using program analysis and pattern identification | |
CN105550268A (zh) | 大数据流程建模分析引擎 | |
JP5208635B2 (ja) | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム | |
CN106991100B (zh) | 数据导入方法及装置 | |
CN109791492B (zh) | 流水线相关树查询优化器和调度器 | |
CN108763064B (zh) | 一种基于黑盒函数与机器学习的代码测试生成方法和装置 | |
CN110737437A (zh) | 一种基于代码集成的编译方法和装置 | |
CN106662986A (zh) | 优化的浏览器渲染过程 | |
CN112364024A (zh) | 一种表数据批量自动比对的控制方法及装置 | |
US20160266875A1 (en) | Software automatic configuration apparatus, software automatic configuration method, and storage media | |
CN113535481A (zh) | 数据的回溯方法、装置和非易失性计算机可读存储介质 | |
CN115994085A (zh) | 代码覆盖率的测试处理方法、装置、设备及存储介质 | |
US9396239B2 (en) | Compiling method, storage medium and compiling apparatus | |
CN109491904B (zh) | 一种SparkSQL应用程序的自动化测试方法和装置 | |
Lanc et al. | Adapting bioinformatics applications for heterogeneous systems: a case study | |
CN112559339B (zh) | 一种基于数据模板引擎的自动化测试验证方法及其测试系统 | |
CN115455006A (zh) | 数据处理方法、数据处理装置、电子设备及存储介质 | |
EP2535813B1 (en) | Method and device for generating an alert during an analysis of performance of a computer application | |
CN103577170A (zh) | 网络应用的构建方法及装置 | |
CN112464242A (zh) | 一种网页平台漏洞采集方法、系统、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |