CN111104335A - 一种基于多层次分析的c语言缺陷检测方法及装置 - Google Patents

一种基于多层次分析的c语言缺陷检测方法及装置 Download PDF

Info

Publication number
CN111104335A
CN111104335A CN201911356465.XA CN201911356465A CN111104335A CN 111104335 A CN111104335 A CN 111104335A CN 201911356465 A CN201911356465 A CN 201911356465A CN 111104335 A CN111104335 A CN 111104335A
Authority
CN
China
Prior art keywords
node
function
analysis
information
flow graph
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
Application number
CN201911356465.XA
Other languages
English (en)
Other versions
CN111104335B (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.)
Tsinghua University
Original Assignee
Tsinghua University
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 Tsinghua University filed Critical Tsinghua University
Priority to CN201911356465.XA priority Critical patent/CN111104335B/zh
Publication of CN111104335A publication Critical patent/CN111104335A/zh
Application granted granted Critical
Publication of CN111104335B publication Critical patent/CN111104335B/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/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开一种基于多层次分析的C语言缺陷检测方法及装置。该方法包括:基于路径敏感的指针分析方法计算函数调用关系图中的每个函数的指针指向信息,对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析得到调用函数的摘要信息,针对控制流图中的每个节点,确定该节点对应的控制依赖对应关系和数据依赖对应关系,根据每个函数的指针指向信息、调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系生成值流图,根据值流图对待测C语言程序进行缺陷检测得到检测结果。应用本发明实施例提供的方案,能够兼顾缺陷检测的精确度和效率。

Description

一种基于多层次分析的C语言缺陷检测方法及装置
技术领域
本发明涉及缺陷检测技术领域,具体而言,涉及一种基于多层次分析的C语言缺陷检测方法及装置。
背景技术
目前,针对C语言程序中存在的缺陷,通常采用静态分析的方法来进行缺陷检测。
随着C语言程序的越来越完善,C语言程序中包含的代码的数量越来越多,例如:2003年Windows操作系统的代码量超过1993年的代码量的十倍,导致在如此复杂的操作系统中,缺陷往往变得更为复杂,例如缺陷可能需要跨多个函数进行调用,这就使得缺陷检测变得更加困难,无法兼顾缺陷检测的精确度和效率,因此,目前亟需一种可以兼顾缺陷检测的精确度和效率的缺陷检测方法。
发明内容
本发明提供了一种基于多层次分析的C语言缺陷检测方法及装置,以兼顾缺陷检测的精确度和效率。具体的技术方案如下。
第一方面,本发明提供了一种基于多层次分析的C语言缺陷检测方法,该方法包括:
读取待测C语言程序的源代码文件,对所述源代码文件进行预处理生成中间文件;
根据数据流分析方法对所述中间文件进行分析,生成反映所述待测C语言程序的执行过程的控制流图,以及包含所述待测C语言程序的标识符信息的符号表,其中,所述控制流图中的每个节点对应所述待测C语言程序代码的一条语句;
根据所述符号表对所述待测C语言程序进行函数调用关系分析,生成反映所述待测C语言程序所包含函数之间调用关系的函数调用关系图;
基于控制流图分析方法确定所述控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息;
针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,所述控制依赖对应关系表征在所述待测C语言程序执行过程中节点之间的有序约束关系,所述数据依赖对应关系表征在所述待测C语言程序执行过程中节点之间的关联关系;
根据每个函数的指针指向信息、所述调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映所述待测C语言程序执行过程中数据流动的值流图;
根据所述值流图对所述待测C语言程序进行缺陷检测,得到检测结果。
可选的,所述对所述源代码文件进行预处理生成中间文件的步骤,包括:
对所述源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
对所述处理后文件进行词法分析、语法分析和语义分析生成中间文件。
可选的,所述基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息的步骤,包括:
针对所述函数调用关系图中的每个函数,在所述控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在所述控制流图中对应的节点;
根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将所述地址作为该函数的指针指向信息。
可选的,所述对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息的步骤,包括:
判断所述函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,所述目标哈希表中存储有所述函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系;
如果是,将所存在的别名对应的摘要信息确定为所述函数调用语句对应的调用函数的摘要信息;
如果否,基于与当前C语言缺陷模式对应的计算方法计算所述函数调用语句对应的调用函数的摘要信息。
可选的,所述针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系的步骤,包括:
针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在所述待测C语言程序执行时所依赖的被依赖节点,建立该节点与所述被依赖节点之间的控制依赖对应关系;
根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与所述关联节点之间的数据依赖对应关系。
第二方面,本发明提供了一种基于多层次分析的C语言缺陷检测装置,该装置包括:
读取模块,用于读取待测C语言程序的源代码文件,对所述源代码文件进行预处理生成中间文件;
分析模块,用于根据数据流分析方法对所述中间文件进行分析,生成反映所述待测C语言程序的执行过程的控制流图,以及包含所述待测C语言程序的标识符信息的符号表,其中,所述控制流图中的每个节点对应所述待测C语言程序代码的一条语句;
函数调用关系图生成模块,用于根据所述符号表对所述待测C语言程序进行函数调用关系分析,生成反映所述待测C语言程序所包含函数之间调用关系的函数调用关系图;
计算模块,用于基于控制流图分析方法确定所述控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息;
确定模块,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,所述控制依赖对应关系表征在所述待测C语言程序执行过程中节点之间的有序约束关系,所述数据依赖对应关系表征在所述待测C语言程序执行过程中节点之间的关联关系;
值流图生成模块,用于根据每个函数的指针指向信息、所述调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映所述待测C语言程序执行过程中数据流动的值流图;
检测模块,用于根据所述值流图对所述待测C语言程序进行缺陷检测,得到检测结果。
可选的,所述读取模块,包括:
去除子模块,用于对所述源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
分析子模块,用于对所述处理后文件进行词法分析、语法分析和语义分析生成中间文件。
可选的,所述计算模块,包括:
节点确定子模块,用于针对所述函数调用关系图中的每个函数,在所述控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在所述控制流图中对应的节点;
地址确定子模块,用于根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将所述地址作为该函数的指针指向信息。
可选的,所述计算模块,包括:
判断子模块,用于判断所述函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,所述目标哈希表中存储有所述函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系,如果是,触发第一确定子模块,如果否,触发第二确定子模块;
所述第一确定子模块,用于将所存在的别名对应的摘要信息确定为所述函数调用语句对应的调用函数的摘要信息;
所述第二确定子模块,用于基于与当前C语言缺陷模式对应的计算方法计算所述函数调用语句对应的调用函数的摘要信息。
可选的,所述确定模块,包括:
第一建立子模块,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在所述待测C语言程序执行时所依赖的被依赖节点,建立该节点与所述被依赖节点之间的控制依赖对应关系;
第二建立子模块,用于根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与所述关联节点之间的数据依赖对应关系。
由上述内容可知,本实施例可以对待测C语言程序进行三个层次的分析:指针分析、函数摘要分析和依赖分析,然后在三个层次的分析结果的基础上建立反映待测C语言程序执行过程中数据流动的值流图,并根据值流图对所述待测C语言程序进行缺陷检测,得到检测结果。由于指针分析考虑了执行路径的路径信息使得指针分析更精准以及依赖分析可以检测内存相关缺陷,因此通过指针分析和依赖分析保证缺陷检测的精确度,由于函数摘要分析仅计算函数的摘要信息而不是展开各个函数,因此,通过函数摘要分析提升缺陷检测的效率,达到了兼顾缺陷检测的精确度和效率的目的。当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
本发明实施例的创新点包括:
1、本发明实施例对待测C语言程序进行三个层次的分析:指针分析、函数摘要分析和依赖分析,然后在三个层次的分析结果的基础上建立反映待测C语言程序执行过程中数据流动的值流图,并根据值流图对所述待测C语言程序进行缺陷检测,得到检测结果。由于指针分析考虑了执行路径的路径信息使得指针分析更精准以及依赖分析可以检测内存相关缺陷,因此通过指针分析和依赖分析保证缺陷检测的精确度,由于函数摘要分析仅计算函数的摘要信息而不是展开各个函数,因此,通过函数摘要分析提升缺陷检测的效率,达到了兼顾缺陷检测的精确度和效率的目的。
2、在控制流图分析过程中,基于待测C语言程序的执行路径的路径信息来计算指针指向信息,由于考虑了路径信息在进行缺陷检测时提高了指针分析的精准度,进一步提高了缺陷检测的精确度。
3、在控制流图分析过程中,不需要展开每个函数来确定函数中变量的状态,直接通过计算调用函数的摘要信息的方式就可以确定函数中变量的状态,实现惰性计算,在进行缺陷检测时大幅减少了函数间分析的计算量,提高了缺陷检测的效率。
4、在控制流图分析过程中,增加了数据依赖分析和控制依赖分析,不仅对代码进行分析,还对代码中语句间的依赖关系进行分析,使得在进行缺陷检测时不仅可以检测代码缺陷,还可以检测与内存相关的缺陷,提高了缺陷检测的精确度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于多层次分析的C语言缺陷检测方法的一种流程示意图;
图2为本发明实施例提供的基于多层次分析的C语言缺陷检测装置的一种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明实施例及附图中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含的一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
本发明实施例公开了一种基于多层次分析的C语言缺陷检测方法及装置,能够兼顾缺陷检测的精确度和效率。下面对本发明实施例进行详细说明。
图1为本发明实施例提供的基于多层次分析的C语言缺陷检测方法的一种流程示意图。该方法应用于电子设备。该方法具体包括以下步骤:
S110:读取待测C语言程序的源代码文件,对源代码文件进行预处理生成中间文件。
为了能够兼顾缺陷检测的精确度和效率,本发明实施例提出了一种C语言程序的值流图构造方法,然后基于构造的值流图进行缺陷检测,其中,值流图可以反映C语言程序执行过程中数据流动。
为了构造值流图,首先需要读取待测C语言程序的源代码文件,然后对源代码文件进行预处理生成中间文件。
由于源代码文件并不是可执行文件,因此需要通过预处理的方式将源代码文件转换为可执行的中间文件,其中,对源代码文件进行预处理生成中间文件,可以包括:
对源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
对处理后文件进行词法分析、语法分析和语义分析生成中间文件。
在预处理时,首先对源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件,然后利用Clang编译器作为前端对处理后文件进行词法分析、语法分析和语义分析,生成中间文件,该中间文件为基于图模型的待测C语言程序抽象表达,其中,图模型为待测C语言程序的执行流程图。
由此,通过预处理的方式,将源代码文件转换为可执行的中间文件,同时,基于中间文件的原子语义分析,可以减少冗余分析时间,降低了分析的复杂度。
S120:根据数据流分析方法对中间文件进行分析,生成反映待测C语言程序的执行过程的控制流图,以及包含待测C语言程序的标识符信息的符号表,其中,控制流图中的每个节点对应待测C语言程序代码的一条语句。
在将源代码文件转换为中间文件后,根据数据流分析方法对中间文件进行分析,基于图模型生成反映待测C语言程序的执行过程的CFG控制流图,以及包含待测C语言程序的标识符信息的符号表。
在数据流分析过程中,按照分析过程中所关注的范围,数据流分析可以分为过程内分析和过程间分析,过程内分析关注数据在同一函数内部的传递情况,过程间分析关注数据在若干函数间的传递情况。
CFG(Control Flow Graph,控制流图)是表示一个过程内所有基本块执行的可能流向和每个基本块所对应的语句表。一个控制流图可以反映一个C程序代码的实时执行过程。控制流图包括节点集合和有向边集合,是一个有向图,可以使用G=(Node,Line)表示,G为控制流图,Node为结点集合,Line为有向边集合。
控制流图中的每个节点对应待测C语言程序代码的一条语句。Line有向边集合包括多条边,每一条边代表一条控制流,每一条边由出发节点u和目标节点v两部分组成。当边(u,v)∈Line时,代表一条从出发节点u指向目标节点v的有向边,此时,目标节点v是出发节点u的后继节点,出发节点u是目标节点v的前趋节点,控制流图中的入口节点没有前趋节点,出口节点没有后继节点。
S130:根据符号表对待测C语言程序进行函数调用关系分析,生成反映待测C语言程序所包含函数之间调用关系的函数调用关系图。
由于待测C语言程序可能包含多个函数,在待测C语言程序执行过程中,多个函数之间可能存在相互调用的情况,因此,在生成符号表后,可以根据符号表对待测C语言程序进行函数调用关系分析,生成反映待测C语言程序所包含函数之间调用关系的函数调用关系图。在生成了函数调用关系图后,就可以获知待测C语言程序包含的各个函数之间是如何调用的。
S140:基于控制流图分析方法确定控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算函数调用关系图中的每个函数的指针指向信息,对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到调用函数的摘要信息。
为了能够兼顾缺陷检测的精确度和效率,在生成控制流图和函数调用关系图后,本发明对待测C语言程序进行三个层次的分析:指针分析、函数摘要分析和依赖分析,通过指针分析和依赖分析保证缺陷检测的精确度,通过函数摘要分析提升缺陷检测的效率。
由于在进行依赖分析时,需要基于控制流图中的节点所在的执行路径和节点对应的数据状态关联信息,因此,在生成控制流图和函数调用关系图后,需要基于控制流图分析方法确定控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径。
其中,控制流图分析方法包括过程内的控制流图分析和过程间的控制流图分析。在过程内的控制流图分析中,是按照拓扑顺序对函数调用关系图中的函数进行分析,主要针对函数中可能引起控制流图中的控制流走向改变的语句结构进行分析,如果某条语句不能改变控制流走向,则不进行处理。
由于一条控制流包含两个节点,且每个节点对应待测C语言程序代码的一条语句,只要两个节点中的至少一个节点对控制流有影响,那么即被视为对整条控制流有影响。表1展示了C语言中常见的语句结构类型以及该语句结构类型对控制流的影响,通过对待测C语言程序中的语句结构类型进行枚举,得到函数调用关系图中的每个函数包含的语句对相应的控制流图中的控制流的影响,进一步确定控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径。
表1:C语言常见语句结构类型对控制流的影响
代码语句类型 包含的语句结构类型 对控制流的影响
简单语句 变量声明、表达式语句 无影响
复合语句 if-else,switch,while,for,do-while 有影响,走向不确定
转移语句 break,continue,case,default 有影响,走向确定
本发明实施例中为了保证缺陷检测的精确度,在进行指针分析时结合执行路径进行分析,即基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息。
其中,基于路径敏感的指针分析方法计算函数调用关系图中的每个函数的指针指向信息,可以包括:
针对函数调用关系图中的每个函数,在控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在控制流图中对应的节点;
根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将地址作为该函数的指针指向信息。
由于控制流图中的每个节点对应待测C语言程序代码的一条语句,因此,针对函数调用关系图中的每个函数,在控制流图中可以查找到与该函数包含的语句相同的语句,然后确定查找到的语句在控制流图中对应的节点。
由于在过程内的控制流图分析时,已经得到控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,因此,已知每个节点所在的执行路径的路径信息,因此可以根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,即在指针分析的时候添加所确定的节点所在执行路径的路径信息,同时将常规名字空间中的函数调用路径作为参数传递映射成参数空间,由此每次指针分析只考虑一条路径的路径信息,减少了路径个数,同时有路径敏感的性质,在得到地址后,将地址作为该函数的指针指向信息。
由此,在控制流图分析过程中,基于待测C语言程序的执行路径的路径信息来计算指针指向信息,由于考虑了路径信息在进行缺陷检测时提高了指针分析的精准度,进一步提高了缺陷检测的精确度。
在执行待测C语言程序时,如果执行到函数调用语句,则进入过程间的控制流图分析得到调用函数的摘要信息,即对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到调用函数的摘要信息,其中,对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到调用函数的摘要信息,可以包括:
判断函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,目标哈希表中存储有函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系;
如果是,将所存在的别名对应的摘要信息确定为函数调用语句对应的调用函数的摘要信息;
如果否,基于与当前C语言缺陷模式对应的计算方法计算函数调用语句对应的调用函数的摘要信息。
在执行到函数调用语句时,本发明实施例中通过计算调用函数的摘要信息的方式来提高过程间的控制流图分析的效率。
本发明实施例中提供的目标哈希表中存储有函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系,在计算调用函数的摘要信息时,判断函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名。
如果存在,说明目标哈希表中已经存储了调用函数的摘要信息,此时,将所存在的别名对应的摘要信息确定为函数调用语句对应的调用函数的摘要信息。
如果不存在,说明目标哈希表中未存储调用函数的摘要信息,由于C语言缺陷模式有多种,此时,需要基于与当前C语言缺陷模式对应的计算方法计算函数调用语句对应的调用函数的摘要信息。
由此,在控制流图分析过程中,不需要展开每个函数来确定函数中变量的状态,直接通过计算调用函数的摘要信息的方式就可以确定函数中变量的状态,实现惰性计算,在进行缺陷检测时大幅减少了函数间分析的计算量,提高了缺陷检测的效率。
例如:检测空指针缺陷,只需要计算指针摘要信息和指针使用摘要信息就可以判断是否出现空指针,而不需要展开每个指针前面的多个函数来确定是否出现空指针。
过程间控制流图分析过程中,根据目标哈希表中已有调用函数的别名信息,分析入口处的函数的函数闭包复杂度和程序中循环的复杂度,自适应地选择展开深度,采用分层分析的方法,逐级、逐区域地对待测C语言程序进行模块化分析。
另外,在过程间控制流图分析时,还可以获得被调用函数的摘要信息,在从过程间控制流图分析回到过程内控制流图分析时,可以根据预设别名命名方式为被调用函数的摘要信息命名一个别名,然后将被调用函数的函数名、别名和摘要信息添加到目标哈希表中。
S150:针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,控制依赖对应关系表征在待测C语言程序执行过程中节点之间的有序约束关系,数据依赖对应关系表征在待测C语言程序执行过程中节点之间的关联关系。
依赖分析是解析代码中语句间的依赖关系,包括数据流依赖分析和控制流依赖分析。针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系。
其中,针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,可以包括:
针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在待测C语言程序执行时所依赖的被依赖节点,建立该节点与被依赖节点之间的控制依赖对应关系;
根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与关联节点之间的数据依赖对应关系。
控制依赖对应关系表征在待测C语言程序执行过程中节点之间的有序约束关系,由于控制流图中的每个节点对应一条语句,因此,控制依赖对应关系可以表征在待测C语言程序执行过程中语句之间的有序约束关系,例如:如果有语句b控制依赖于语句a,则a为谓语类型语句,语句a的执行结果将决定语句b否被执行。
为了确定节点之间的有序约束关系,可以针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在待测C语言程序执行时所依赖的被依赖节点,建立该节点与被依赖节点之间的控制依赖对应关系。
数据依赖对应关系表征在待测C语言程序执行过程中节点之间的关联关系。由于控制流图中的每个节点对应一条语句,因此,数据依赖对应关系可以表征在待测C语言程序执行过程中语句之间的关联关系,例如:如果语句b数据依赖于语句a,则表明a和b所在的控制流图中存在一条路径从语句a到语句b,并且语句a之中的一个程序点将对语句b中的某一个程序点造成影响。
为了确定节点之间的关联关系,可以针对控制流图中的每个节点,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与关联节点之间的数据依赖对应关系。
由此,在控制流图分析过程中,增加了数据依赖分析和控制依赖分析,不仅对代码进行分析,还对代码中语句间的依赖关系进行分析,使得在进行缺陷检测时不仅可以检测代码缺陷,还可以检测与内存相关的缺陷,提高了缺陷检测的精确度。
S160:根据每个函数的指针指向信息、调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映待测C语言程序执行过程中数据流动的值流图。
在对待测C语言程序进行三个层次的分析后,可以根据每个函数的指针指向信息、调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映待测C语言程序执行过程中数据流动的值流图。
本发明实施例提供的值流图具有三个特点:第一个特点:同一个变量在值流图中可以表示不同的值,第二个特点:支持稀疏分析,值流图可以记录偏离值流图核心部分的稀疏部分,第三个特点:在值流图中可以直接描述控制依赖和数据依赖。
S170:根据值流图对待测C语言程序进行缺陷检测,得到检测结果。
在生成值流图后,即可以根据值流图对待测C语言程序进行缺陷检测,得到检测结果。
由上述内容可知,本实施例可以基于控制流图分析方法确定控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到调用函数的摘要信息,针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,可见本发明实施例对待测C语言程序进行三个层次的分析:指针分析、函数摘要分析和依赖分析,然后在三个层次的分析结果的基础上建立反映待测C语言程序执行过程中数据流动的值流图,并根据值流图对所述待测C语言程序进行缺陷检测,得到检测结果。由于指针分析考虑了执行路径的路径信息使得指针分析更精准以及依赖分析可以检测内存相关缺陷,因此通过指针分析和依赖分析保证缺陷检测的精确度,由于函数摘要分析仅计算函数的摘要信息而不是展开各个函数,因此,通过函数摘要分析提升缺陷检测的效率,达到了兼顾缺陷检测的精确度和效率的目的。
图2为本发明实施例提供的基于多层次分析的C语言缺陷检测装置的一种结构示意图。本发明实施例提供的基于多层次分析的C语言缺陷检测装置,可以包括:
读取模块210,用于读取待测C语言程序的源代码文件,对所述源代码文件进行预处理生成中间文件;
分析模块220,用于根据数据流分析方法对所述中间文件进行分析,生成反映所述待测C语言程序的执行过程的控制流图,以及包含所述待测C语言程序的标识符信息的符号表,其中,所述控制流图中的每个节点对应所述待测C语言程序代码的一条语句;
函数调用关系图生成模块230,用于根据所述符号表对所述待测C语言程序进行函数调用关系分析,生成反映所述待测C语言程序所包含函数之间调用关系的函数调用关系图;
计算模块240,用于基于控制流图分析方法确定所述控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息;
确定模块250,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,所述控制依赖对应关系表征在所述待测C语言程序执行过程中节点之间的有序约束关系,所述数据依赖对应关系表征在所述待测C语言程序执行过程中节点之间的关联关系;
值流图生成模块260,用于根据每个函数的指针指向信息、所述调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映所述待测C语言程序执行过程中数据流动的值流图;
检测模块270,用于根据所述值流图对所述待测C语言程序进行缺陷检测,得到检测结果。
由上述内容可知,本实施例可以基于控制流图分析方法确定控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到调用函数的摘要信息,针对控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,可见本发明实施例对待测C语言程序进行三个层次的分析:指针分析、函数摘要分析和依赖分析,然后在三个层次的分析结果的基础上建立反映待测C语言程序执行过程中数据流动的值流图,并根据值流图对所述待测C语言程序进行缺陷检测,得到检测结果。由于指针分析考虑了执行路径的路径信息使得指针分析更精准以及依赖分析可以检测内存相关缺陷,因此通过指针分析和依赖分析保证缺陷检测的精确度,由于函数摘要分析仅计算函数的摘要信息而不是展开各个函数,因此,通过函数摘要分析提升缺陷检测的效率,达到了兼顾缺陷检测的精确度和效率的目的。
在本发明的另一实施例中,所述读取模块210,可以包括:
去除子模块,用于对所述源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
分析子模块,用于对所述处理后文件进行词法分析、语法分析和语义分析生成中间文件。
在本发明的另一实施例中,所述计算模块240,可以包括:
节点确定子模块,用于针对所述函数调用关系图中的每个函数,在所述控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在所述控制流图中对应的节点;
地址确定子模块,用于根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将所述地址作为该函数的指针指向信息。
在本发明的另一实施例中,所述计算模块240,可以包括:
判断子模块,用于判断所述函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,所述目标哈希表中存储有所述函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系,如果是,触发第一确定子模块,如果否,触发第二确定子模块;
所述第一确定子模块,用于将所存在的别名对应的摘要信息确定为所述函数调用语句对应的调用函数的摘要信息;
所述第二确定子模块,用于基于与当前C语言缺陷模式对应的计算方法计算所述函数调用语句对应的调用函数的摘要信息。
在本发明的另一实施例中,所述确定模块250,可以包括:
第一建立子模块,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在所述待测C语言程序执行时所依赖的被依赖节点,建立该节点与所述被依赖节点之间的控制依赖对应关系;
第二建立子模块,用于根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与所述关联节点之间的数据依赖对应关系。
上述装置实施例与方法实施例相对应,与该方法实施例具有同样的技术效果,具体说明参见方法实施例。装置实施例是基于方法实施例得到的,具体的说明可以参见方法实施例部分,此处不再赘述。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

Claims (10)

1.一种基于多层次分析的C语言缺陷检测方法,其特征在于,包括:
读取待测C语言程序的源代码文件,对所述源代码文件进行预处理生成中间文件;
根据数据流分析方法对所述中间文件进行分析,生成反映所述待测C语言程序的执行过程的控制流图,以及包含所述待测C语言程序的标识符信息的符号表,其中,所述控制流图中的每个节点对应所述待测C语言程序代码的一条语句;
根据所述符号表对所述待测C语言程序进行函数调用关系分析,生成反映所述待测C语言程序所包含函数之间调用关系的函数调用关系图;
基于控制流图分析方法确定所述控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息;
针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,所述控制依赖对应关系表征在所述待测C语言程序执行过程中节点之间的有序约束关系,所述数据依赖对应关系表征在所述待测C语言程序执行过程中节点之间的关联关系;
根据每个函数的指针指向信息、所述调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映所述待测C语言程序执行过程中数据流动的值流图;
根据所述值流图对所述待测C语言程序进行缺陷检测,得到检测结果。
2.如权利要求1所述的方法,其特征在于,所述对所述源代码文件进行预处理生成中间文件的步骤,包括:
对所述源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
对所述处理后文件进行词法分析、语法分析和语义分析生成中间文件。
3.如权利要求1所述的方法,其特征在于,所述基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息的步骤,包括:
针对所述函数调用关系图中的每个函数,在所述控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在所述控制流图中对应的节点;
根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将所述地址作为该函数的指针指向信息。
4.如权利要求1所述的方法,其特征在于,所述对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息的步骤,包括:
判断所述函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,所述目标哈希表中存储有所述函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系;
如果是,将所存在的别名对应的摘要信息确定为所述函数调用语句对应的调用函数的摘要信息;
如果否,基于与当前C语言缺陷模式对应的计算方法计算所述函数调用语句对应的调用函数的摘要信息。
5.如权利要求1所述的方法,其特征在于,所述针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系的步骤,包括:
针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在所述待测C语言程序执行时所依赖的被依赖节点,建立该节点与所述被依赖节点之间的控制依赖对应关系;
根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与所述关联节点之间的数据依赖对应关系。
6.一种基于多层次分析的C语言缺陷检测装置,其特征在于,包括:
读取模块,用于读取待测C语言程序的源代码文件,对所述源代码文件进行预处理生成中间文件;
分析模块,用于根据数据流分析方法对所述中间文件进行分析,生成反映所述待测C语言程序的执行过程的控制流图,以及包含所述待测C语言程序的标识符信息的符号表,其中,所述控制流图中的每个节点对应所述待测C语言程序代码的一条语句;
函数调用关系图生成模块,用于根据所述符号表对所述待测C语言程序进行函数调用关系分析,生成反映所述待测C语言程序所包含函数之间调用关系的函数调用关系图;
计算模块,用于基于控制流图分析方法确定所述控制流图中的每个节点对应的数据状态关联信息以及所在的执行路径,基于路径敏感的指针分析方法计算所述函数调用关系图中的每个函数的指针指向信息,对所述函数调用关系图中的函数调用语句对应的调用函数进行过程间分析,得到所述调用函数的摘要信息;
确定模块,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点对应的控制依赖对应关系,根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定该节点对应的数据依赖对应关系,其中,所述控制依赖对应关系表征在所述待测C语言程序执行过程中节点之间的有序约束关系,所述数据依赖对应关系表征在所述待测C语言程序执行过程中节点之间的关联关系;
值流图生成模块,用于根据每个函数的指针指向信息、所述调用函数的摘要信息和每个节点对应的控制依赖对应关系以及数据依赖对应关系,生成反映所述待测C语言程序执行过程中数据流动的值流图;
检测模块,用于根据所述值流图对所述待测C语言程序进行缺陷检测,得到检测结果。
7.如权利要求6所述的装置,其特征在于,所述读取模块,包括:
去除子模块,用于对所述源代码文件进行去除注释、去除错误代码、和/或展开宏定义处理,得到处理后文件;
分析子模块,用于对所述处理后文件进行词法分析、语法分析和语义分析生成中间文件。
8.如权利要求6所述的装置,其特征在于,所述计算模块,包括:
节点确定子模块,用于针对所述函数调用关系图中的每个函数,在所述控制流图中查找到与该函数包含的语句相同的语句,确定查找到的语句在所述控制流图中对应的节点;
地址确定子模块,用于根据所确定的节点所在的执行路径的路径信息确定该函数包含的指针表达式所指向的地址,将所述地址作为该函数的指针指向信息。
9.如权利要求6所述的装置,其特征在于,所述计算模块,包括:
判断子模块,用于判断所述函数调用语句对应的调用函数的函数名在目标哈希表中是否存在对应的别名,其中,所述目标哈希表中存储有所述函数调用关系图中的至少一个函数的函数名、别名与摘要信息的对应关系,如果是,触发第一确定子模块,如果否,触发第二确定子模块;
所述第一确定子模块,用于将所存在的别名对应的摘要信息确定为所述函数调用语句对应的调用函数的摘要信息;
所述第二确定子模块,用于基于与当前C语言缺陷模式对应的计算方法计算所述函数调用语句对应的调用函数的摘要信息。
10.如权利要求6所述的装置,其特征在于,所述确定模块,包括:
第一建立子模块,用于针对所述控制流图中的每个节点,根据该节点所在的执行路径,确定该节点在所述待测C语言程序执行时所依赖的被依赖节点,建立该节点与所述被依赖节点之间的控制依赖对应关系;
第二建立子模块,用于根据该节点所在的执行路径以及该节点对应的数据状态关联信息,确定与该节点在同一执行路径且存在数据状态关联关系的关联节点,建立该节点与所述关联节点之间的数据依赖对应关系。
CN201911356465.XA 2019-12-25 2019-12-25 一种基于多层次分析的c语言缺陷检测方法及装置 Active CN111104335B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911356465.XA CN111104335B (zh) 2019-12-25 2019-12-25 一种基于多层次分析的c语言缺陷检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911356465.XA CN111104335B (zh) 2019-12-25 2019-12-25 一种基于多层次分析的c语言缺陷检测方法及装置

Publications (2)

Publication Number Publication Date
CN111104335A true CN111104335A (zh) 2020-05-05
CN111104335B CN111104335B (zh) 2021-08-24

Family

ID=70424656

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911356465.XA Active CN111104335B (zh) 2019-12-25 2019-12-25 一种基于多层次分析的c语言缺陷检测方法及装置

Country Status (1)

Country Link
CN (1) CN111104335B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111967012A (zh) * 2020-07-13 2020-11-20 复旦大学 一种针对c/c++代码漏洞补丁的摘要生成方法
CN113076244A (zh) * 2021-03-30 2021-07-06 深圳前海微众银行股份有限公司 一种函数调用关系检测方法及装置
CN113220302A (zh) * 2021-04-14 2021-08-06 清华大学 面向物联网操作系统的代码缺陷静态检测方法和系统
CN113326047A (zh) * 2021-06-10 2021-08-31 南京大学 基于静态分析的c语言代码依赖关系提取方法
CN113448553A (zh) * 2021-06-23 2021-09-28 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统
CN113961475A (zh) * 2021-12-22 2022-01-21 清华大学 基于规约导向的错误处理缺陷的检测方法及系统
CN114282226A (zh) * 2021-12-31 2022-04-05 上海交通大学 单次多漏洞代码检测方法及系统
CN114389978A (zh) * 2021-12-21 2022-04-22 中国人民解放军32802部队 一种基于静态污点分析的网络协议侧信道检测方法和系统
WO2024109167A1 (zh) * 2022-11-22 2024-05-30 支付宝(杭州)信息技术有限公司 程序代码处理方法及装置

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
US7703081B1 (en) * 2005-09-22 2010-04-20 Symantec Corporation Fast system call hooking on x86-64 bit windows XP platforms
CN102521126A (zh) * 2011-12-05 2012-06-27 北京邮电大学 基于模块分解技术的软件缺陷检测系统的复杂性分析方法
CN101937396B (zh) * 2010-09-30 2012-07-11 中国科学院软件研究所 软件程序中变量的不安全使用的检测方法
US20120304158A1 (en) * 2011-05-26 2012-11-29 Oracle International Corporation Points-to analysis as value flow
CN103530471A (zh) * 2013-10-23 2014-01-22 中国科学院声学研究所 一种基于模拟器的关键路径分析方法
US20160315960A1 (en) * 2015-04-21 2016-10-27 International Business Machines Corporation Solution-Centric Reporting of Security Warnings
CN106372511A (zh) * 2016-08-24 2017-02-01 北京奇虎测腾安全技术有限公司 一种源代码检测系统及方法
CN108804332A (zh) * 2018-06-14 2018-11-13 南京大学 一种基于机器学习的c程序内存泄漏智能化检测方法
CN109426615A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 过程间的空指针解引用检测方法、系统、设备以及介质
CN106354632B (zh) * 2016-08-24 2019-03-12 北京奇虎测腾安全技术有限公司 一种基于静态分析技术的源代码检测系统及方法
CN109783386A (zh) * 2019-01-17 2019-05-21 南京大学 基于gpu的大规模软件高精度静态分析方法

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7703081B1 (en) * 2005-09-22 2010-04-20 Symantec Corporation Fast system call hooking on x86-64 bit windows XP platforms
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN101937396B (zh) * 2010-09-30 2012-07-11 中国科学院软件研究所 软件程序中变量的不安全使用的检测方法
US20120304158A1 (en) * 2011-05-26 2012-11-29 Oracle International Corporation Points-to analysis as value flow
CN102521126A (zh) * 2011-12-05 2012-06-27 北京邮电大学 基于模块分解技术的软件缺陷检测系统的复杂性分析方法
CN103530471A (zh) * 2013-10-23 2014-01-22 中国科学院声学研究所 一种基于模拟器的关键路径分析方法
US20160315960A1 (en) * 2015-04-21 2016-10-27 International Business Machines Corporation Solution-Centric Reporting of Security Warnings
CN106372511A (zh) * 2016-08-24 2017-02-01 北京奇虎测腾安全技术有限公司 一种源代码检测系统及方法
CN106354632B (zh) * 2016-08-24 2019-03-12 北京奇虎测腾安全技术有限公司 一种基于静态分析技术的源代码检测系统及方法
CN109426615A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 过程间的空指针解引用检测方法、系统、设备以及介质
CN109426614A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 缺陷检测方法、设备、系统和计算机可读存储介质
CN108804332A (zh) * 2018-06-14 2018-11-13 南京大学 一种基于机器学习的c程序内存泄漏智能化检测方法
CN109783386A (zh) * 2019-01-17 2019-05-21 南京大学 基于gpu的大规模软件高精度静态分析方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CHEN GUANG: ""VFQL: Combinational Static Analysis as Query Language"", 《ISSTA 2019:PROCEEDINGS OF THE 28TH ACM SIGSOFT INTERNATIONAL SYMPOSIUM ON SOFTWARE TESTING AND ANALYSIS》 *
董玉坤: ""基于区域内存模型的空指针引用缺陷检测"", 《电子学报》 *
陈光等: ""使用移动平均线预测云平台服务性能趋势"", 《计算机科学与探索》 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111967012A (zh) * 2020-07-13 2020-11-20 复旦大学 一种针对c/c++代码漏洞补丁的摘要生成方法
CN111967012B (zh) * 2020-07-13 2024-03-08 复旦大学 一种针对c/c++代码漏洞补丁的摘要生成方法
CN113076244B (zh) * 2021-03-30 2023-03-03 深圳前海微众银行股份有限公司 一种函数调用关系检测方法及装置
CN113076244A (zh) * 2021-03-30 2021-07-06 深圳前海微众银行股份有限公司 一种函数调用关系检测方法及装置
CN113220302A (zh) * 2021-04-14 2021-08-06 清华大学 面向物联网操作系统的代码缺陷静态检测方法和系统
CN113326047A (zh) * 2021-06-10 2021-08-31 南京大学 基于静态分析的c语言代码依赖关系提取方法
CN113326047B (zh) * 2021-06-10 2023-11-03 南京大学 基于静态分析的c语言代码依赖关系提取方法
CN113448553A (zh) * 2021-06-23 2021-09-28 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统
CN113448553B (zh) * 2021-06-23 2023-11-03 南京大学 一种c语言项目依赖信息管理和可视化的方法及系统
CN114389978A (zh) * 2021-12-21 2022-04-22 中国人民解放军32802部队 一种基于静态污点分析的网络协议侧信道检测方法和系统
CN114389978B (zh) * 2021-12-21 2024-04-02 中国人民解放军32802部队 一种基于静态污点分析的网络协议侧信道检测方法和系统
CN113961475B (zh) * 2021-12-22 2022-04-15 清华大学 基于规约导向的错误处理缺陷的检测方法及系统
CN113961475A (zh) * 2021-12-22 2022-01-21 清华大学 基于规约导向的错误处理缺陷的检测方法及系统
CN114282226A (zh) * 2021-12-31 2022-04-05 上海交通大学 单次多漏洞代码检测方法及系统
CN114282226B (zh) * 2021-12-31 2024-05-28 上海交通大学 单次多漏洞代码检测方法及系统
WO2024109167A1 (zh) * 2022-11-22 2024-05-30 支付宝(杭州)信息技术有限公司 程序代码处理方法及装置

Also Published As

Publication number Publication date
CN111104335B (zh) 2021-08-24

Similar Documents

Publication Publication Date Title
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
CN101286132B (zh) 一种基于软件缺陷模式的测试方法及系统
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
Tan et al. Making k-object-sensitive pointer analysis more precise with still k-limiting
US8645761B2 (en) Precise fault localization
KR20060045568A (ko) 프로그램 계측 동안의 프로브 최적화 방법 및 시스템
US20110145799A1 (en) Path-sensitive dataflow analysis including path refinement
KR101788279B1 (ko) 테스트 기법을 이용한 최악 실행 시간 측정 시스템 및 방법
CN112100072A (zh) 应用程序代码的静态检测方法、装置、设备及介质
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
Saifullah et al. Learning from examples to find fully qualified names of api elements in code snippets
KR101979329B1 (ko) 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치
KR20180129623A (ko) 연관된 다중 파일 정적 분석 장치
CN112948828A (zh) 一种二进制程序恶意代码检测方法、终端设备及存储介质
CN112016099A (zh) 二进制程序过程间静态污点分析方法及系统
CN112631925B (zh) 一种单变量原子违背缺陷的检测方法
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
CN112699376A (zh) 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质
CN113688403A (zh) 一种基于符号执行验证的智能合约漏洞检测方法及装置
US8572594B2 (en) Invasion analysis to identify open types
Xiao et al. Performing high efficiency source code static analysis with intelligent extensions
CN117555811B (zh) 基于静态符号执行的嵌入式软件分析方法、装置及存储介质
Pang Deep Learning for Code Repair

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