CN114036072B - 一种支持自动化检测程序缺陷的方法和系统 - Google Patents

一种支持自动化检测程序缺陷的方法和系统 Download PDF

Info

Publication number
CN114036072B
CN114036072B CN202210009142.9A CN202210009142A CN114036072B CN 114036072 B CN114036072 B CN 114036072B CN 202210009142 A CN202210009142 A CN 202210009142A CN 114036072 B CN114036072 B CN 114036072B
Authority
CN
China
Prior art keywords
tested
function
program
information
analyzing
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
Application number
CN202210009142.9A
Other languages
English (en)
Other versions
CN114036072A (zh
Inventor
任飞
孙文川
肖剑明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Panlian Xin'an Information Technology Co ltd
Original Assignee
Hunan Panlian Xin'an Information Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Panlian Xin'an Information Technology Co ltd filed Critical Hunan Panlian Xin'an Information Technology Co ltd
Priority to CN202210009142.9A priority Critical patent/CN114036072B/zh
Publication of CN114036072A publication Critical patent/CN114036072A/zh
Application granted granted Critical
Publication of CN114036072B publication Critical patent/CN114036072B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种支持自动化检测程序缺陷的方法和系统,包括获取待测试程序,按照预设的程序完备配置原则给待测试程序配置信息得到完备后的待测试程序;分析完备后的待测试程序,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;分析LLVM中间码得到中间码指令上的附带信息,根据附带信息和待测函数信息对待测函数进行代码插桩,生成符号执行驱动程序;通过执行分析技术分析符号执行驱动程序,生成待测试程序的触发缺陷测试数据;解释器实际执行缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果。无需任何人工干预,大大减少了缺陷测试的工作量,保证系统在进行测试时的通用性和自动化程度。

Description

一种支持自动化检测程序缺陷的方法和系统
技术领域
本发明属于计算机技术领域,尤其涉及一种支持自动化检测程序缺陷的方法和系统。
背景技术
目前,对软件系统进行缺陷测试时,传统的测试方法对人员技术水平要求高,工作量大,且对于某些超出语言标准的编译器特性支持性不够完善,测试系统的兼容扩展性不尽人意,现有缺陷查找与验证技术自动化程度不够高和通用性弱,因此亟需一种可自动化检测程序缺陷的方法。
发明内容
针对以上技术问题,本发明提供一种支持自动化检测程序缺陷的方法和系统。
本发明解决其技术问题采用的技术方案是:
一种支持自动化检测程序缺陷的方法,方法包括以下步骤:
步骤S100:获取待测试程序,按照预设的程序完备配置原则给待测试程序配置信息得到完备后的待测试程序;
步骤S200:分析完备后的待测试程序,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;
步骤S300:分析LLVM中间码得到中间码指令上的附带信息,根据附带信息和待测函数信息对待测函数进行代码插桩,生成符号执行驱动程序;
步骤S400:通过执行分析技术分析符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
步骤S500:解释器实际执行缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果。
优选地,步骤S200中的待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量。
优选地,步骤S200包括:
步骤S210:分析完备后的待测试程序获取完备后的待测试程序中的关键字;
步骤S220:当根据关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;当根据关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码。
优选地,步骤S300包括:
步骤S310:分析LLVM中间码得到中间码指令上的附带信息;
步骤S320:根据影响待测函数行为的函数参数、全局变量和局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到附带信息中进行标记,生成调用待测函数的符号执行驱动函数。
优选地,步骤S400包括:
步骤S410:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;
步骤S420:利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将漏洞触发的输入作为缺陷测试用例数据。
优选地,步骤S500包括:
将缺陷测试用例数据封装成测试驱动程序,通过在解释器中将预设定义的程序声明作为解释器内嵌函数,解释执行相应的测试驱动程序,在解释执行的过程中收集执行指令的信息并导出到输出文件中,得到缺陷测试结果。
优选地,执行指令的信息包括指令的行数、调用指令调用的次数和是否引发缺陷。
一种支持自动化检测程序缺陷的系统,包括:
程序配置模块,用于获取待测试程序,按照预设的程序完备配置原则给待测试程序配置信息得到完备后的待测试程序;
编译模块,用于分析完备后的待测试程序,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;
代码插桩模块,用于分析LLVM中间码得到中间码指令上的附带信息,根据附带信息和待测函数信息对待测函数进行代码插桩,生成符号执行驱动程序;
触发缺陷测试数据生成模块,用于通过执行分析技术分析符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
缺陷验证模块,用于解释器实际执行缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果。
上述一种支持自动化检测程序缺陷的方法和系统,分析用户待测试程序的源代码级别程序信息,提取程序的待测函数及待测函数信息,并且将程序代码编译成LLVM 中间码,通过待测函数信息和中间码的交互,利用动态符号执行技术,为待测试程序生成触发缺陷测试数据,并为缺陷输入封装成测试驱动程序,通过基于LLVM中间码的解释器解释执行每个测试驱动程序,验证程序的缺陷。用户仅仅需要将待测试程序导入到系统,通过扩展优化LLVM中间码、编译前端的功能,让待测试程序信息的收集自动化,同时让触发缺陷的测试用例的生成和执行自动化,无需任何人工干预,大大减少了缺陷测试的工作量,并且系统的通用性强,保证系统在进行测试时的通用性和自动化程度。
附图说明
图1为本发明一实施例提供的一种支持自动化检测程序缺陷的方法流程图。
具体实施方式
为了使本技术领域的人员更好地理解本发明的技术方案,下面结合附图对本发明作进一步的详细说明。
在一个实施例中,如图1所示,一种支持自动化检测程序缺陷的方法,方法包括以下步骤:
步骤S100:获取待测试程序,按照预设的程序完备配置原则给待测试程序配置信息得到完备后的待测试程序。
具体地,输入待测试程序,配置好待测试程序的宏信息,头文件搜索路径等,确保待测试程序可正常完成编译。预设的程序完备配置原则待测试程序可正常完成编译,所谓的正常完成编译是指待测试程序必须在编译阶段没有语法错误,链接阶段没有符号重名的错误。
步骤S200:步骤S200:分析完备后的待测试程序,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码。
具体地,步骤S200中的待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量。
在一个实施例中,步骤S200包括:
步骤S210:分析完备后的待测试程序获取完备后的待测试程序中的关键字;
步骤S220:当根据关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;当根据关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码。
具体地,对于某些编译环境的方言,如嵌入式程序中的中断(interrupt)关键字,对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式进行兼容,满足超出语言标准部分的功能,实现提取待测函数及其相关信息通用性。
步骤S300:分析LLVM中间码得到中间码指令上的附带信息,根据附带信息和待测函数信息对待测函数进行代码插桩,生成符号执行驱动程序。
在一个实施例中,步骤S300包括:
步骤S310:分析LLVM中间码得到中间码指令上的附带信息;
步骤S320:根据影响待测函数行为的函数参数、全局变量和局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到附带信息中进行标记,生成调用待测函数的符号执行驱动函数。
具体地,根据每个待测函数信息,基于LLVM中间码对待测函数进行代码插桩,生成符号执行驱动函数,即根据影响待测函数行为的函数 参数、全局变量和局部静态变量进行代码插桩,生成一个调用待测函数的符号执行驱动函数,该驱动函数作为符号执行引擎的输入。插桩的过程中会通过LLVM中间码获取在指令上的附带信息,即metadata信息,通过修改这个附带信息,将变量的名称和类型添加到其中,从而标记出哪些变量是影响函数行为的变量,以作为符号执行引擎自动符号化的依据。的自动符号化依据,即根据影响函数行为的变量,包括函数的参数、全局变量在内存中的值是会影响到整个函数行为的,为了让符号执行引擎可以自动地分析测函数,生成测试用例,需要对它们进行识别和自动符号化。
步骤S400:通过执行分析技术分析符号执行驱动程序,生成待测试程序的触发缺陷测试数据。
在一个实施例中,步骤S400包括:
步骤S410:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;
步骤S420:利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将漏洞触发的输入作为缺陷测试用例数据。
具体地,通过混合符号执行技术分析S300生成的驱动函数,生成用于单元测试待测函数的测试用例数据。每个待测函数都会生成一个驱动函数进行符号执行,从驱动函数开始分析,将S300标记的变量进行符号化,而没有标记的变量给予其在函数中初始化时候的真实值,然后利用符号执行引擎解释执行程序,通过记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到路径走到函数的跳出语句。在路径探索的过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,然后将其加入到路径约束组中进行求解,判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,作为缺陷测试用例数据。上述符号执行生成缺陷测试用例的过程是全自动化,无需人工干预的。
步骤S500:解释器实际执行缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果。
在一个实施例中,步骤S500包括:
将缺陷测试用例数据封装成测试驱动程序,通过在解释器中将预设定义的程序声明作为解释器内嵌函数,解释执行相应的测试驱动程序,在解释执行的过程中收集执行指令的信息并导出到输出文件中,得到缺陷测试结果。进一步地,执行指令的信息包括指令的行数、调用指令调用的次数和是否引发缺陷。
具体地,解释器实际解释执行缺陷测试用例,输出缺陷测试信息。对S400中生成的一组缺陷测试用例数据,再利用系统内定义的一套函数声明接口(此处的接口为自主开发,目的是为了支持解释器来执行生成的测试用例程序),将测试用例数据封装成测试驱动程序,通过在解释器中将这套程序声明作为解释器内嵌函数实现其函数功能,解释执行相应的测试驱动程序,在解释执行的过程中收集执行指令的信息,包括指令的行数、调用指令调用的次数和是否引发缺陷,并导出到输出文件中,得到缺陷测试的结果。上述解释器解释执行测试用例的过程是全自动化,无需人工干预的。
在一个具体的实施例中,关键步骤的具体实施方法如下:
int test(int lhs, int rhs) {
int retValue = 10;
if(lhs > rhs)
return retValue /rhs;
else {
return retValue;
}
}
通过的缺陷测试系统对如上test函数进行缺陷测试流程:
(1)假设程序仅仅包含如上test函数,该函数没有语法错误,可以正确的编译,同时由于我们不需要将其编译链接为可执行程序,所以也不需要main函数。
(2)导入程序后,缺陷测试系统解析程序,利用开源框架LLVM的组件Clang编译器通过词法分析、语法分析、中间代码生成、中间代码链接得到程序的LLVM中间码文件。在这个过程的语法树阶段进行语法树分析得出上述待测函数test的函数名为test(如果是C++程序的话会得到其mangle后名字),圈复杂度为2,代码行数为7,分支数为2。(3)根据在(2)得到的函数名,在程序的LLVM中间码文件中寻找到test函数,分析得到test的参数为int类型的lhs和rhs,生成如下驱动函数调用test函数,同时对驱动函数中传递给test函数的实参添加附带信息,作为其标识。
void test_driver(int loop){
int a,b; // a和b变量都会添加标识信息,因为其将作为传递给test的实参
for(int i=0;i<loop;++i) {
test(a,b);
}
}
(4)符号执行引擎直接将test_driver作为入口开始分析,由于局部变量a和b在S3阶段被标识了,所以引擎会直接对其自动符号化,以便后续的符号执行。驱动函数的loop参数会被默认设置为1,表示只调用test一次。在符号执行引擎分析到test函数的时候,其中的retValue被其赋予了实际值10,所以符号执行引擎不将其符号化,而是直接用实际值10初始化retValue的内存。在符号执行结束后,生成两组测试用例,这两组测试用例可以分别覆盖到if的真分支和假分支,测试用例就是传递给test函数的实际参数的值。在符号执行中,路径搜索时,引擎检测到触发操作指令“/”, 故对可能触发漏洞的指令添加漏洞触发的约束,然后将其加入到路径约束组中进行求解,当b为0时,求解成功则可以得到漏洞触发的输入。
(5)对于(4)生成的每一个测试用例,分别封装成测试驱动函数,使得其实现调用test函数的功能。以下函数即封装测试用例的调用test函数的驱动函数,它会使得test函数从if的真分支返回。
void test_driver_interpret() {
int a =1, b=0;
test(a, b);
}
同时在解释执行的过程中,统计解释执行的代码行号。
上述一种支持自动化检测程序缺陷的方法,借助开源框架Clang和LLVM,分析用户待测试程序的源代码级别程序信息,提取程序的待测函数及相关的信息,并且将程序代码编译成LLVM 中间码。通过待测试程序的相关信息和中间码的交互,利用动态符号执行技术,为待测试程序生成触发缺陷的输入,并为缺陷输入封装成测试驱动程序,通过基于LLVM中间码的解释器解释执行每个测试驱动程序,验证程序的缺陷。用户仅仅需要将待测试程序导入到系统,通过扩展优化LLVM中间码、编译前端的功能,让待测试程序信息的收集自动化,同时让触发缺陷的测试用例的生成和执行自动化,无需任何人工干预,,大大减少了缺陷测试的工作量,系统的通用性强,不仅仅支持C/C++标准的特性,而且对于某些特定的嵌入式平台上的编译器提供的语言特性也可以支持,保证系统在进行测试时的通用性和自动化程度。
一种支持自动化检测程序缺陷的系统,包括:
程序配置模块,用于获取待测试程序,按照预设的程序完备配置原则给待测试程序配置信息得到完备后的待测试程序;
编译模块,用于分析完备后的待测试程序,解析并提取待测函数和待测函数信息,并将完备后的待测试程序编译成LLVM中间码;
代码插桩模块,用于分析LLVM中间码得到中间码指令上的附带信息,根据附带信息和待测函数信息对待测函数进行代码插桩,生成符号执行驱动程序;
触发缺陷测试数据生成模块,用于通过执行分析技术分析符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
缺陷验证模块,用于解释器实际执行缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果。
关于支持自动化检测程序缺陷的系统的具体限定可以参见上文中对于支持自动化检测程序缺陷的方法的限定,在此不再赘述。上述支持自动化检测程序缺陷的系统中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
以上对本发明所提供的一种支持自动化检测程序缺陷的方法和系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (4)

1.一种支持自动化检测程序缺陷的方法,其特征在于,所述方法包括以下步骤:
步骤S100:获取待测试程序,按照预设的程序完备配置原则给所述待测试程序配置信息得到完备后的待测试程序;
步骤S200:分析所述完备后的待测试程序,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
步骤S300:分析所述LLVM中间码得到中间码指令上的附带信息,根据所述附带信息和所述待测函数信息对所述待测函数进行代码插桩,生成符号执行驱动程序;
步骤S400:通过执行分析技术分析所述符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
步骤S500:解释器实际执行所述缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果;
步骤S200中的所述待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量;
步骤S200包括:
步骤S210:分析所述完备后的待测试程序获取所述完备后的待测试程序中的关键字;
步骤S220:当根据所述关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对所述待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;当根据所述关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
步骤S300包括:
步骤S310:分析所述LLVM中间码得到中间码指令上的附带信息;
步骤S320:根据所述影响待测函数行为的函数参数、所述全局变量和所述局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到所述附带信息中进行标记,生成调用待测函数的符号执行驱动函数;
步骤S400包括:
步骤S410:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;
步骤S420:利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将所述漏洞触发的输入作为缺陷测试用例数据。
2.根据权利要求1所述的方法,其特征在于,步骤S500包括:
将所述缺陷测试用例数据封装成测试驱动程序,通过在解释器中将预设定义的程序声明作为解释器内嵌函数,解释执行相应的测试驱动程序,在解释执行的过程中收集执行指令的信息并导出到输出文件中,得到缺陷测试结果。
3.根据权利要求2所述的方法,其特征在于,所述执行指令的信息包括指令的行数、调用指令调用的次数和是否引发缺陷。
4.一种支持自动化检测程序缺陷的系统,其特征在于,包括:
程序配置模块,用于获取待测试程序,按照预设的程序完备配置原则给所述待测试程序配置信息得到完备后的待测试程序;
编译模块,用于分析所述完备后的待测试程序,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
代码插桩模块,用于分析所述LLVM中间码得到中间码指令上的附带信息,根据所述附带信息和所述待测函数信息对所述待测函数进行代码插桩,生成符号执行驱动程序;
触发缺陷测试数据生成模块,用于通过执行分析技术分析所述符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
缺陷验证模块,用于解释器实际执行所述缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果;
所述编译模块中的所述待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量;
所述编译模块包括:分析所述完备后的待测试程序获取所述完备后的待测试程序中的关键字;当根据所述关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对所述待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;当根据所述关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
所述代码插桩模块包括:分析所述LLVM中间码得到中间码指令上的附带信息;根据所述影响待测函数行为的函数参数、所述全局变量和所述局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到所述附带信息中进行标记,生成调用待测函数的符号执行驱动函数;
所述触发缺陷测试数据生成模块包括:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将所述漏洞触发的输入作为缺陷测试用例数据。
CN202210009142.9A 2022-01-06 2022-01-06 一种支持自动化检测程序缺陷的方法和系统 Active CN114036072B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210009142.9A CN114036072B (zh) 2022-01-06 2022-01-06 一种支持自动化检测程序缺陷的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210009142.9A CN114036072B (zh) 2022-01-06 2022-01-06 一种支持自动化检测程序缺陷的方法和系统

Publications (2)

Publication Number Publication Date
CN114036072A CN114036072A (zh) 2022-02-11
CN114036072B true CN114036072B (zh) 2022-04-08

Family

ID=80147319

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210009142.9A Active CN114036072B (zh) 2022-01-06 2022-01-06 一种支持自动化检测程序缺陷的方法和系统

Country Status (1)

Country Link
CN (1) CN114036072B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114238154B (zh) * 2022-02-24 2022-05-06 湖南泛联新安信息科技有限公司 一种符号执行方法、单元测试方法、电子设备及存储介质
CN117555811B (zh) * 2024-01-11 2024-03-19 北京邮电大学 基于静态符号执行的嵌入式软件分析方法、装置及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103389939A (zh) * 2013-07-03 2013-11-13 清华大学 一种针对堆可控分配漏洞的检测方法及系统
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成系统和方法
CN105117336A (zh) * 2015-08-26 2015-12-02 中国科学院软件研究所 一种动态标记处理控制依赖的方法
CN105955877A (zh) * 2016-04-19 2016-09-21 西安交通大学 一种基于符号计算的动态并行程序污点分析方法
CN106354630A (zh) * 2016-08-23 2017-01-25 电子科技大学 一种基于动态符号执行的软件缺陷检测方法
CN108416219A (zh) * 2018-03-18 2018-08-17 西安电子科技大学 一种Android二进制文件漏洞检测方法及系统
CN109918903A (zh) * 2019-03-06 2019-06-21 西安电子科技大学 一种基于llvm编译器的程序非控制数据攻击防护方法
CN111859388A (zh) * 2020-06-30 2020-10-30 广州大学 一种多层次混合的漏洞自动挖掘方法
CN112631893A (zh) * 2019-09-24 2021-04-09 无锡江南计算技术研究所 面向异构平台的多层次存储结构内存检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104794401B (zh) * 2015-04-15 2018-01-16 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103389939A (zh) * 2013-07-03 2013-11-13 清华大学 一种针对堆可控分配漏洞的检测方法及系统
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成系统和方法
CN105117336A (zh) * 2015-08-26 2015-12-02 中国科学院软件研究所 一种动态标记处理控制依赖的方法
CN105955877A (zh) * 2016-04-19 2016-09-21 西安交通大学 一种基于符号计算的动态并行程序污点分析方法
CN106354630A (zh) * 2016-08-23 2017-01-25 电子科技大学 一种基于动态符号执行的软件缺陷检测方法
CN108416219A (zh) * 2018-03-18 2018-08-17 西安电子科技大学 一种Android二进制文件漏洞检测方法及系统
CN109918903A (zh) * 2019-03-06 2019-06-21 西安电子科技大学 一种基于llvm编译器的程序非控制数据攻击防护方法
CN112631893A (zh) * 2019-09-24 2021-04-09 无锡江南计算技术研究所 面向异构平台的多层次存储结构内存检测方法
CN111859388A (zh) * 2020-06-30 2020-10-30 广州大学 一种多层次混合的漏洞自动挖掘方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
基于Clang编译前端的Android源代码静态分析技术;曹原野等;《计算机系统应用》;20171015(第10期);全文 *
智能合约安全漏洞研究综述;倪远东等;《信息安全学报》;20200515(第03期);全文 *
符号执行,从漏洞扫描到自动化生成测试用例;王张军;《https://insights.thoughtworks.cn/symbolic-execution-testcases/》;20210525;全文 *

Also Published As

Publication number Publication date
CN114036072A (zh) 2022-02-11

Similar Documents

Publication Publication Date Title
US5651111A (en) Method and apparatus for producing a software test system using complementary code to resolve external dependencies
Kästner et al. CompCert: Practical experience on integrating and qualifying a formally verified optimizing compiler
CN114036072B (zh) 一种支持自动化检测程序缺陷的方法和系统
CN101739339B (zh) 一种基于程序动态依赖关系的软件故障定位方法
US5784553A (en) Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs
Xu et al. Regression test selection for AspectJ software
US9418230B2 (en) Automated tools for building secure software programs
US20020091968A1 (en) Object-oriented data driven software GUI automated test harness
US7823144B2 (en) Computer program code comparison using lexemes
US20070061641A1 (en) Apparatus and method for generating test driver
Hills et al. A case of visitor versus interpreter pattern
CN104156311B (zh) 一种基于cpu模拟器的嵌入式c语言目标码级单元测试方法
CN111222141B (zh) 一种汽车电控单元代码漏洞分析方法和系统
JPH0748182B2 (ja) プログラム・エラー検出方法
CN113868136A (zh) 一种基于Go语言可执行形式化语义的程序漏洞分析方法
Hoeflich et al. Highly illogical, Kirk: spotting type mismatches in the large despite broken contracts, unsound types, and too many linters
CN114281709A (zh) 一种单元测试方法、系统、电子设备及存储介质
CN115310095A (zh) 一种区块链智能合约混合形式化验证方法及系统
CN111694726A (zh) 一种基于类型标注的Python程序类型推导方法
CN112162921B (zh) 一种工业自动化测试与控制系统
CN115098355A (zh) 基于历史数据驱动的jvm测试程序生成方法
CN113849814A (zh) 一种可配置系统漏洞复现系统以及复现方法
Attallah et al. Towards a COSMIC FSM Programming Language Compiler
CN113836023A (zh) 一种基于体系结构交叉检查的编译器安全性测试方法
US5029170A (en) Assembly language programming potential error detection scheme which recognizes incorrect symbolic or literal address constructs

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