CN110286891A - 一种基于代码属性张量的程序源代码编码方法 - Google Patents

一种基于代码属性张量的程序源代码编码方法 Download PDF

Info

Publication number
CN110286891A
CN110286891A CN201910554093.5A CN201910554093A CN110286891A CN 110286891 A CN110286891 A CN 110286891A CN 201910554093 A CN201910554093 A CN 201910554093A CN 110286891 A CN110286891 A CN 110286891A
Authority
CN
China
Prior art keywords
node
code
tensor
code attribute
attribute
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
CN201910554093.5A
Other languages
English (en)
Other versions
CN110286891B (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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201910554093.5A priority Critical patent/CN110286891B/zh
Publication of CN110286891A publication Critical patent/CN110286891A/zh
Application granted granted Critical
Publication of CN110286891B publication Critical patent/CN110286891B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种基于代码属性张量的程序源代码编码方法,包括:对程序源代码生成代码属性图;创建符号表、节点表和代码属性张量并进行初始化;将AST节点的数据类型和AST节点之间的运算关系编码到代码属性张量中;将AST节点之间的父子关系编码到代码属性张量中;将CFG节点之间的邻接关系编码到代码属性张量中,输出最终的代码属性张量。本发明为了解决已有的程序源代码的编码方式无法充分体现程序语义特征的问题,提出了代码属性张量的概念,以及将程序源代码编码为代码属性张量的算法。本发明可以在避免语义信息的丢失的情况下,将程序源代码编码为张量形式的数据,作为机器学习模型的输入,为后续的程序静态分析工作提供支持。

Description

一种基于代码属性张量的程序源代码编码方法
技术领域
本发明属于计算机技术领域,涉及一种基于代码属性张量的程序源代码编码方法。
背景技术
随着计算机行业的发展,计算机软件已成为生活不可或缺的一部分,各行各业都在广泛地应用着计算机系统,包括医疗、教育、军事、政治和新零售等领域。在计算机系统的迅速发展和普及之下,如何提高软件质量并保证其行为的可信性,已然成为学术界和工业界共同关注的重要问题。程序的静态分析技术是一种常见的程序分析技术,其不需要运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等静态信息来检查程序的正确性,这类方法由于其操作的便捷性被广泛使用。
为有效地发现软件中存在的缺陷和漏洞,学术界一直在探索新型的静态分析方法。鉴于机器学习技术强大的特征学习能力,越来越多的基于机器学习的静态分析方法已经被提出。这些基于机器学习的静态分析技术通过对程序源代码进行编码,将特征转化为向量形式的数据,然后使用该数据对机器学习模型进行训练,从而预测其他待测代码中存在的缺陷或漏洞。然而,目前存在的对程序源代码的编码方式无法充分地体现程序的语义特征。例如,Zhao等在FSE 2018会议上提出的DeepSim将代码的控制流图编码成张量形式的数据,并使用该张量对深度学习模型进行训练。但是由于控制流图中仅包含程序的控制流信息,导致了其张量对代码语义特征表示的局限性。又例如Li等在NDSS 2018会议上提出的VulDeePecker直接将源代码看做纯文本,并使用自然语言处理中的词嵌入对其生成词向量,然后使用词向量对深度学习模型进行训练。然而由于程序源代码中包含比自然语言更多的语义结构,例如控制依赖和数据依赖,因此直接将程序源代码看做纯文本进行处理会导致代码语义信息的丢失。在上述例子中,语义信息的丢失将直接导致机器学习模型无法充分地学习到源代码的特征,进而导致模型预测的准确率降低,以及在缺陷或漏洞检测时具有较高的误报率和漏报率。
本发明为了解决已有程序源代码的编码方式无法充分体现程序语义特征的问题,提出代码属性张量的概念,以及将程序源代码编码为代码属性张量的算法。本发明在避免语义信息的丢失的情况下,有效地将程序源代码转换为张量形式的数据,作为机器学习模型的输入,为后续的程序静态分析工作提供支持。
发明内容
本发明的技术解决问题:克服现有技术的不足,提供一种基于代码属性张量的程序源代码编码方法,该方法通过对程序源代码生成代码属性图,采用独创的编码算法对代码属性图生成代码属性张量,以张量的数据形式对代码进行特征表示,可以有效地将程序源代码编码为张量形式的数据,作为机器学习模型的输入,并为后续的静态分析工作提供支持。
为实现上述目的,本发明采用如下技术方案:
本发明的一种基于代码属性张量的程序源代码编码方法,其步骤包括:
(1)对程序源代码生成代码属性图(Code Property Graph,CPG)。CPG是一种综合了抽象语法树(Abstract Syntax Tree,AST)、控制流图(Control Flow Graph,CFG)和程序依赖图(Program Dependence Graph,PDG)的联合数据结构。代码属性图G=(V,E,λ,μ)是一个有向的、边具有标记的属性多重图,其中V是节点的集合,E是有向边的集合。函数λ:E→∑对边进行标记,其中∑是标记符号的集合。函数μ:(V∪E)×K→S为节点和边赋予属性,其中K是属性的键的集合,S是属性的值的集合。
(2)创建符号表、节点表和代码属性张量并进行初始化。代码属性张量为一个三阶张量,假设代码属性张量为T,将T中坐标为(i,j,k)的元素记为Ti,j,k,则对均满足Ti,j,k∈{0,1}。对每一个Ti,j,k,其对应代码属性图中的一个特定的特征。代码属性张量T对应整个代码属性图的特征集合。源代码、代码属性图和代码特征张量三者相互等价。符号表用于记录关键字、运算符和代码的语句类型在代码属性张量第三维中的索引。节点表用于记录节点代码及节点在代码属性张量的第一维和第二维中的索引。
(3)将AST节点的数据类型和AST节点之间的运算关系编码到代码属性张量中。其中,对AST节点的数据类型进行编码可以有效地将变量的数据类型信息体现在代码属性张量中,进而发现数据长度、变量类型等错误导致的程序缺陷。对AST节点之间的运算关系进行编码可以有效地将数据之间的依赖关系体现在代码属性张量中,进而发现与特定运算相关的程序缺陷,例如除零错误等。
(4)将AST节点之间的父子关系编码到代码属性张量中。对AST节点之间的父子关系进行编码可以有效地将程序代码语句的语法结构体现在代码属性张量中,进而发现程序中的语法错误等与语法结构相关的程序缺陷。
(5)将CFG节点之间的邻接关系编码到代码属性张量中,输出最终的代码属性张量。对CFG节点之间的邻接关系进行编码可以有效地将程序的控制依赖等语义信息编码到代码属性张量中,进而发现由于缺少条件检查或其他与控制流相关的程序缺陷。对CFG节点之前的邻接关系编码是生成代码属性张量的最后一步,完成该步后将最终的代码属性张量输出。
进一步地,步骤(1)中,包括以下步骤:
a)对程序源代码生成AST,并将其变换为属性图,记为GA。具体方式为,假设属性图为GA=(VA,EA,λA,μA),其中节点集VA中的节点由原始抽象语法树的节点给出。边集EA中的边由原始抽象语法树的边给出。函数λA将边标记为AST边。函数μA为节点赋予code属性、type属性和order属性。其中,code属性的属性值是字符串类型,对应于该节点所代表的代码。type属性的属性值也是字符串类型,对应于该节点所代表的代码的语句类型,例如“CallExpression”代表函数调用语句,“ConditionExpression”代表条件语句。order属性的属性值是整数类型,对应于该节点在兄弟节点中的序位,以反映树的有序结构,例如1代表该节点是其父节点的第一个子节点。
b)对程序源代码生成CFG,并将其变换为属性图,记为GC。具体方式为,假设属性图为GC=(VC,EC,λC,·),其中节点集VC是VA的子集,其对应于AST中表示语句和谓词的节点。此外,边标记函数λc:Ec→∑c从标记符号集∑c={true,false,ε)中为每条边分配标记,以指示控制流图跳转的条件。
c)对程序源代码生成PDG,并将其变换为属性图,记为GP。具体方式为,假设属性图为GP=(VP,EP,λP,μP),其中节点集VP=VC,边集EP中的边对应于原始程序依赖图的边。此外,边标记函数λP:EP→∑P从标记符号集∑P={C,D}中为每条边分配标记,以指示控制依赖或数据依赖。函数μP为每条数据依赖边赋予symbol属性,以指示所依赖的相应符号,并为每条控制依赖边赋予condition属性,以指示控制依赖的谓词状态,例如true或false。
d)将GA,GC和GP组合成CPG,记为G。具体方式为,假设代码属性图为G=(V,E,λ,μ),其中V=VA,E=EA∪EC∪EP,λ=λA∪λC∪λP,并且μ=μA∪μP
进一步地,步骤(2)中,包括以下步骤:
a)创建符号表,记为Tablesymbol,将编程语言中的关键字和运算符以及CPG中节点语句类型的全集写入该符号表,用于记录关键字、运算符和代码语句类型在代码属性张量第三维中的索引。
b)创建节点表,记为Tablenode,将节点表清空,用于记录节点所代表的代码及节点在代码属性张量的第一维和第二维中的索引。
c)创建代码属性张量,记为T,Ti,j,k=0。
进一步地,步骤(3)中,包括以下步骤:
a)假设代码属性图为G=(V,E,λ,μ),VC是CFG节点集合,其中
b)对VC中节点按照其对应语句在源文件中的位置升序排序,并反向入栈。
c)取栈顶节点,判断节点类型。如果该节点是AST叶子节点并引入了新的变量,则将该节点的code属性值写入节点表中,对该变量的数据类型进行编码,例如假设该节点的code属性值在节点表中的索引为a,该变量数据类型的关键字在符号表中的索引为b,则Ta,*,b=1,其中*代表任意值。如果该节点是AST中间节点,那么将其子节点入栈,并将该中间节点的code属性值写入节点表中,并判断该节点的code属性值(即所代表的代码)中是否包含运算符,如果有,则对其操作数的运算关系进行编码,例如假设x op y中x和y是操作数,op是运算符,x在节点表中的索引为a,y在节点表中的索引为b,op在符号表中的索引为c,则令Ta,b,c=1。
d)根据b)中所述步骤对栈中所有节点进行处理,直到栈空。
进一步地,步骤4)中,包括以下步骤:
a)设代码属性图为G=(V,E,λ,μ),VA是AST节点集合,其中
b)获取任意两个节点vi和vj,其中vi,vj∈VA,vi≠vj
c)判断vi和vj的父子关系,如果vi是vj的子节点,并且vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1。
d)根据b)和c)中步骤对VA中所有节点进行处理。
进一步地,步骤5)中,包括以下步骤:
a)设代码属性图为G=(y,E,λ,μ),VC是CFG节点集合,其中
b)对VC中节点按照其对应语句在源文件中的位置升序排序,并将节点的code属性值按照顺序写入节点表中。
c)获取任意两个节点vi和vj,其中vi,vj∈VC,vi≠vj
d)判断vi和vj的邻接关系,如果vi与vj邻接,邻接边的方向是从vi指向vj,vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1。
e)根据c)和d)中步骤对VC中所有节点进行处理。
本发明与现有技术相比的优点在于:
(1)本发明通过将程序表示成代码属性图,有效地包含了源代码的语法结构、控制流转移、控制依赖和数据依赖四种语义信息,并通过编码算法将其生编码为张量形式的数据,可以在避免语义信息丢失的情况下,为程序分析任务中的机器学习模型训练和预测提供支持。
(2)本发明通过对代码属性图中的AST节点的数据类型、AST节点之间的运算关系、AST节点之间的父子关系和CFG节点之间的邻接关系进行编码,可以有效地覆盖数据长度错误、变量类型错误、运算错误、语法错误、控制流错误等问题导致的程序缺陷的关键特征,为缺陷发现提供支持。
附图说明
图1是基于代码属性张量的程序源代码编码方法的流程图;
图2是对程序源代码生成代码属性图的流程图;
图3是创建符号表、节点表和代码属性张量并进行初始化的流程图;
图4是对AST节点的数据类型和运算关系编码的流程图;
图5是对AST节点之间的父子关系进行编码的流程图;
图6是对CFG节点之间的邻接关系进行编码并输出代码属性张量的流程图。
具体实施方式
下面结合附图,对本发明做进一步的说明。
本实施例基于代码属性张量的程序源代码编码方法,其中总体流程如图1所示,主要包括以下步骤:
1)对程序源代码生成代码属性图,其流程如图2所示,具体说明如下:
1a)对程序源代码生成AST,为每个节点赋予code属性,其属性值对应于节点所代表的代码,为每个节点赋予type属性,其属性值对应于该节点所代表的代码的语句类型,为每个节点赋予order属性,以反映树的有序结构,转到1b)。
1b)对程序源代码生成CFG,对边的跳转条件进行标记,转到1c)。
1c)对程序源代码生成PDG,对边的依赖类型进行标记,为每个数据依赖赋予symbol属性,以指示相应的符号,同时为每个控制依赖赋予condition属性,以指示原始谓词的状态,转到1d)。
1d)将GA,GC和GP组合成CPG,记为G,G=(V,E,λ,μ),其中V=VA,E=EA∪EC∪EP,λ=λA∪λC∪λP,并且μ=μA∪μP
2)创建符号表、节点表和代码属性张量并进行初始化,其流程如图3所示,具体说明如下:
2a)创建符号表,记为Tablesymbol,将编程语言中的关键字和运算符以及CPG中节点的语句类型的全集写入该符号表,转到2b)。
2b)创建节点表,记为Tablenode,将节点表清空,转到2c)。
2c)创建代码属性张量,将其记为T, Ti,j,k=0。
3)对AST节点的数据类型和AST节点之间的运算关系进行编码,其流程如图4所示,具体说明如下:
3a)获取代码属性图中的所有CFG节点的集合VC,其中转到3b)。
3b)对CFG节点按照其对应语句在源文件中的位置进行升序排序,并反向入栈,转到3c)。
3c)取栈顶节点,并将该节点出栈,转到3d)。
3d)判断该节点的节点类型,如果节点类型是AST叶子节点,并且其code属性值在节点表中不存在,则转到3e),如果节点类型是AST中间节点,则转到3h)。如果节点类型是CFG节点,则转到31)。
3e)判断该AST叶子节点的code属性值在节点表中是否存在,若在节点表中不存在则转到3f),若在节点表中存在则转到3m)。
3f)将该AST叶子节点的code属性值写入节点表中,转到3g)。
3g)对该AST叶子节点代表的变量的数据类型进行编码,具体方式为,假设该节点的code属性值在节点表中的索引为a,该变量数据类型的关键字在符号表中的索引为b,则令Ta,*,b=1,其中*代表任意值,转到3m)。
3h)将该AST中间节点的code属性值写入节点表中,转到3i)。
3i)将该AST中间节点的子AST节点入栈,转到3j)。
3j)判断该AST中间节点代表的代码中是否包含符号表中的运算符,若是则转到3k),若否则转到3m)。
3k)对操作数之间的运算关系进行编码,具体方式为,假设x op y中x和y是操作数,op是运算符,x在节点表中的索引为a,y在节点表中的索引为b,op在符号表中的索引为c,则令Ta,b,c=1,转到3m)。
31)将该CFG节点邻接的AST节点入栈,转到3m)。
3m)判断栈是否为空,若否则转3c)。
4)对AST节点之间的父子关系进行编码,其流程如图5所示,具体说明如下:
4a)获取代码属性图中所有AST节点的集合VA,其中转到4b)。
4b)获取VA中两个节点vi和vj,其中vi,vj∈VA,vi≠vj,转到4c)。
4c)判断vi和vj的父子关系,如果vi是vj的子节点,则转到4d),否则转到4e)。
4d)假设vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1,转到4d)。
4e)判断是否VA中所有节点组合均已处理,若否则转到4b)。
5)对CFG节点之间的邻接关系进行编码,并输出代码属性张量,其流程如图6所示,具体说明如下:
5a)获取代码属性图中的所有CFG节点的集合VC,其中转到5b)。
5b)对VC中节点按照对应语句在源文件中的位置升序排序,并将节点的code属性值按照顺序写入节点表中,转到5c)。
5c)获取VC中的两个节点vi和vj,其中vi,vj∈VC,vi≠vj,转到5d)。
5d)判断vi和vj的邻接关系,如果vi与vj邻接,转到5e),否则转到5f)。
5e)假设邻接边的方向从vi指向vj,vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1,转到5f)。
5f)判断是否VC中所有节点组合均已处理,若否则转到5c)。
总之,本发明为了解决已有的程序源代码的编码方式无法充分体现程序语义特征的问题,提出了代码属性张量的概念,以及将程序源代码编码为代码属性张量的算法。本发明可以在避免语义信息的丢失的情况下,将程序源代码转换为张量形式的数据,作为机器学习模型的输入,为后续的静态分析工作提供支持。
以上虽然描述了本发明的具体实施方法,但是本领域的技术人员应当理解,这些仅是举例说明,在不背离本发明原理和实现的前提下,可以对这些实施方案做出多种变更或修改,因此,本发明的保护范围由所附权利要求书限定。

Claims (10)

1.一种基于代码属性张量的程序源代码编码方法,其特征在于,包括以下步骤:
(1)对程序源代码生成代码属性图;
(2)创建符号表、节点表和代码属性张量,并进行初始化;
(3)根据代码属性图中抽象语法树(AST)数据类型和运算关系信息,将AST节点的数据类型和AST节点之间的运算关系编码到代码属性张量中;
(4)根据代码属性图中AST的节点父子关系信息,将AST节点之间的父子关系编码到代码属性张量中;
(5)根据代码属性图中控制流图(CFG)的邻接关系信息,将CFG节点之间的邻接关系编码到代码属性张量中,输出最终的代码属性张量,该张量中有效地包含了源代码的语义信息,用于后续对而程序静态分析任务中的机器学习模型进行训练。
2.根据权利要求1所述的方法,其特征在于:所述步骤(1)中通过使用静态分析工具Joern对源代码生成代码属性图。
3.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,符号表和节点表用于在后续步骤中辅助进行编码,代码属性张量用于构建最终的代码属性张量,在后续步骤中向其中填入非零元素后,其成为最终的代码属性张量。
4.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,代码属性张量T为一个三阶张量,将T中坐标为(i,j,k)的元素记为Ti,j,k,则对均满足Ti,j,k∈{0,1},并且每一个Ti,j,k均对应代码属性图中的一个特定的特征。
5.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,符号表中记录关键字、运算符和代码的语句类型在代码属性张量第三维中的索引;节点表中记录节点代码及节点在代码属性张量的第一维和第二维中的索引。
6.根据权利要求1所述的方法,其特征在于:所述步骤(2)中,假设符号表中条目数量为|Tablesymbol|,节点表中条目数量为|Tablenode|,代码属性张量T∈R|Tablenode|×|Tablenode|×|Tablesymbol|。
7.根据权利要求1所述的方法,其特征在于:所述步骤(3)中,对AST节点的数据类型进行编码的方式为,若该节点的code属性值在节点表中的索引为a,该变量数据类型的关键字在符号表中的索引为b,则Ta,*,b=1,其中*代表任意值。
8.根据权利要求1所述的方法,其特征在于:所述步骤(3)中,对AST节点之间的运算关系进行编码的方式为,若操作数在节点表中的索引分别为a和b,运算符在符号表中的索引为c,则令Ta,b,c=1。
9.权利要求1所述的方法,其特征在于,所述步骤(4)中,对AST节点之间的父子关系进行编码的方式为,若节点vi是节点vj的子节点,并且vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1。
10.根据权利要求1所述的方法,其特征在于,所述步骤(5)中,对CFG节点之间的邻接关系进行编码的方式为:若节点vi与节点vj邻接,并且邻接边的方向从vi指向vj,vi和vj的code属性值在节点表中的索引分别为a和b,vj的type属性值在符号表中的索引为c,则令Ta,b,c=1。
CN201910554093.5A 2019-06-25 2019-06-25 一种基于代码属性张量的程序源代码编码方法 Active CN110286891B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910554093.5A CN110286891B (zh) 2019-06-25 2019-06-25 一种基于代码属性张量的程序源代码编码方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910554093.5A CN110286891B (zh) 2019-06-25 2019-06-25 一种基于代码属性张量的程序源代码编码方法

Publications (2)

Publication Number Publication Date
CN110286891A true CN110286891A (zh) 2019-09-27
CN110286891B CN110286891B (zh) 2020-09-29

Family

ID=68005508

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910554093.5A Active CN110286891B (zh) 2019-06-25 2019-06-25 一种基于代码属性张量的程序源代码编码方法

Country Status (1)

Country Link
CN (1) CN110286891B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162738A (zh) * 2020-10-26 2021-01-01 广东粤港澳大湾区硬科技创新研究院 数据转化方法、装置、终端设备及存储介质
CN112947908A (zh) * 2021-02-26 2021-06-11 上海商汤智能科技有限公司 代码生成方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN109416719A (zh) * 2016-04-22 2019-03-01 谭琳 用于确定软件代码中的缺陷和漏洞的方法
CN109426614A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 缺陷检测方法、设备、系统和计算机可读存储介质
US20190108342A1 (en) * 2017-10-07 2019-04-11 Shiftleft Inc. System and method for securing applications through an application-aware runtime agent
CN109670318A (zh) * 2018-12-24 2019-04-23 中国科学院软件研究所 一种基于核控制流图循环验证的漏洞检测方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101017458A (zh) * 2007-03-02 2007-08-15 北京邮电大学 基于源代码静态分析的软件安全代码分析器及其检测方法
CN109416719A (zh) * 2016-04-22 2019-03-01 谭琳 用于确定软件代码中的缺陷和漏洞的方法
CN108932192A (zh) * 2017-05-22 2018-12-04 南京大学 一种基于抽象语法树的Python程序类型缺陷检测方法
CN109426614A (zh) * 2017-09-01 2019-03-05 深圳市源伞新科技有限公司 缺陷检测方法、设备、系统和计算机可读存储介质
US20190108342A1 (en) * 2017-10-07 2019-04-11 Shiftleft Inc. System and method for securing applications through an application-aware runtime agent
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN109670318A (zh) * 2018-12-24 2019-04-23 中国科学院软件研究所 一种基于核控制流图循环验证的漏洞检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
FABIAN YAMAGUCHI 等: "Automatic Inference of Search Patterns", 《2015 IEEE SYMPOSIUM ON SECURITY AND PRIVACY》 *
吴敬征 等: "基于有向信息流的Android 隐私泄露类恶意应用检测方法", 《中国科学院大学学报》 *
李珍 等: "面向源代码的软件漏洞静态检测综述", 《网络与信息安全学报》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162738A (zh) * 2020-10-26 2021-01-01 广东粤港澳大湾区硬科技创新研究院 数据转化方法、装置、终端设备及存储介质
CN112162738B (zh) * 2020-10-26 2022-11-29 广东粤港澳大湾区硬科技创新研究院 数据转化方法、装置、终端设备及存储介质
CN112947908A (zh) * 2021-02-26 2021-06-11 上海商汤智能科技有限公司 代码生成方法、装置、设备及存储介质
WO2022179024A1 (zh) * 2021-02-26 2022-09-01 上海商汤智能科技有限公司 代码生成方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN110286891B (zh) 2020-09-29

Similar Documents

Publication Publication Date Title
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
Buratti et al. Exploring software naturalness through neural language models
Allamanis et al. A survey of machine learning for big code and naturalness
CN112733137B (zh) 一种面向漏洞检测的二进制代码相似性分析方法
Zhu et al. A higher-order lambda calculus: PowerEpsilon
Gulwani et al. Programming by examples: PL meets ML
Pan et al. Automatic repair of regular expressions
WO2022226716A1 (zh) 基于深度学习的Java程序内部注释的生成方法及系统
Gao et al. Program repair
CN110286891A (zh) 一种基于代码属性张量的程序源代码编码方法
Reynolds et al. Datatypes with shared selectors
Pommereau et al. Petri Nets Semantics of Reaction Rules (RR) A Language for Ecosystems Modelling
Wang et al. Synergy between machine/deep learning and software engineering: How far are we?
Paaßen et al. ast2vec: Utilizing recursive neural encodings of python programs
Plump et al. The semantics of graph programs
Fernández Venero et al. Model checking multi-level and recursive nets
Tucci et al. Parsing nonlinear languages
Boucherit et al. Automatic generating algorithm of rewriting logic specification for multi-agent system models based on petri nets
Bercic et al. The Space of Mathematical Software Systems--A Survey of Paradigmatic Systems
CN116628695A (zh) 基于多任务学习的漏洞挖掘方法及装置
Khardon Learning Horn Expressions with LogAn-H.
Mohan Automatic repair and type binding of undeclared variables using neural networks
Iwashokun et al. Parsing of Research Documents into XML Using Formal Grammars
Bárány et al. Decidable classes of documents for XPath
Wullinger Supporting format migration with ontology model comparison

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