CN110457208B - 符号执行的引导方法、装置、设备及计算机可读存储介质 - Google Patents

符号执行的引导方法、装置、设备及计算机可读存储介质 Download PDF

Info

Publication number
CN110457208B
CN110457208B CN201910639918.3A CN201910639918A CN110457208B CN 110457208 B CN110457208 B CN 110457208B CN 201910639918 A CN201910639918 A CN 201910639918A CN 110457208 B CN110457208 B CN 110457208B
Authority
CN
China
Prior art keywords
program
loop
specific code
program loop
training data
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
CN201910639918.3A
Other languages
English (en)
Other versions
CN110457208A (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.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and 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 Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201910639918.3A priority Critical patent/CN110457208B/zh
Publication of CN110457208A publication Critical patent/CN110457208A/zh
Priority to US16/829,593 priority patent/US11119892B2/en
Application granted granted Critical
Publication of CN110457208B publication Critical patent/CN110457208B/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/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Biomedical Technology (AREA)
  • General Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本申请提供一种符号执行的引导方法、装置、设备及计算机可读存储介质。本申请实施例通过确定程序的特定代码区域,进而,则可以利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出,使得能够根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入,这样,可以利用所获得的所述特定代码区域所对应的所述程序的程序循环输入,引导符号执行过滤不可能的执行路径跳出程序循环到达所述特定代码区域,从而提高了符号执行的可靠性。

Description

符号执行的引导方法、装置、设备及计算机可读存储介质
【技术领域】
本申请涉及软件测试技术,尤其涉及一种符号执行的引导方法、装置、设备及计算机可读存储介质。
【背景技术】
符号执行(Symbolic Execution)是一种程序分析技术,它可以通过分析程序来获得到达特定代码区域的程序输入。例如,在软件测试中,符号执行(symbolic execution)可以被用于生成可到达程序的漏洞点所在代码区域的程序输入。
然而,在一些情况下,例如,符号执行在处理程序中的程序循环时可能会存在路径爆炸(Path Explosion)的现象,使得符号执行无法跳出程序循环,从而无法生成可到达程序的特定代码区域的程序输入,从而导致了符号执行的可靠性的降低。
【发明内容】
本申请的多个方面提供一种符号执行的引导方法、装置、设备及计算机可读存储介质,用以提高符号执行的可靠性。
本申请的一方面,提供一种符号执行的引导方法,包括:
确定程序的特定代码区域;
利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出;
根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入。
本申请的另一方面,提供一种符号执行的引导装置,包括:
确定单元,用于确定程序的特定代码区域;
执行单元,用于利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出;
预测单元,用于根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入。
本申请的另一方面,提供一种设备,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述一方面所提供的符号执行的引导方法。
本申请的另一方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述一方面所提供的符号执行的引导方法。
由上述技术方案可知,本申请实施例通过确定程序的特定代码区域,进而,则可以利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出,使得能够根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入,这样,可以利用所获得的所述特定代码区域所对应的所述程序的程序循环输入,引导符号执行过滤不可能的执行路径跳出程序循环到达所述特定代码区域,从而提高了符号执行的可靠性。
另外,采用本申请所提供的技术方案,能够生成程序到达该程序的特定代码区域的有效的程序循环输入,从而有效提高了程序的测试效率。
另外,采用本申请所提供的技术方案,无需进行复杂的静态分析程序循环内部的循环逻辑,也无需记录程序循环内部的所有循环逻辑,而是通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,无论是内存,还是CPU的消耗,都是轻量级的。
另外,采用本申请所提供的技术方案,通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,将比以往生成循环摘要(summary)更加具有广泛适用性。因为循环摘要仅仅对一些线性逻辑循环有作用,而机器学习的方法学习到的循环逻辑可以模拟非线性的逻辑。当符号执行因为循环无法到达程序特定代码区域时,它可以根据循环预测器预测的循环输入进行引导,快速到达指定区域。
另外,采用本申请所提供的技术方案,通过根据程序的特定代码区域所对应的该程序的程序循环输出,直接预测出该程序的程序循环输入,能够有效过滤掉其他的所有不可能的执行路径,使得能够快速地跳出程序循环到达所述特定代码区域,生成有效的测试用例,能有效提高程序的测试效率。
【附图说明】
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一实施例提供的符号执行的引导方法的流程示意图;
图2为本申请另一实施例提供的符号执行的引导装置的结构示意图;
图3为适于用来实现本申请实施方式的示例性计算机系统/服务器12的框图。
【具体实施方式】
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的全部其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中所涉及的终端可以包括但不限于手机、个人数字助理(Personal Digital Assistant,PDA)、无线手持设备、平板电脑(Tablet Computer)、个人电脑(Personal Computer,PC)、MP3播放器、MP4播放器、可穿戴设备(例如,智能眼镜、智能手表、智能手环等)等。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
如背景技术中所述,在一些情况下,例如,符号执行在处理程序中的程序循环时可能会因为程序循环执行次数较多而存在路径爆炸(Path Explosion)的现象,使得符号执行无法跳出程序循环,从而无法生成可到达程序的特定代码区域的程序输入。所谓的路径爆炸(Path Explosion),是指程序中的路径数量随着程序中的分支数量的增长而成指数级增长的现象。
现有技术中,可以有几种技术来解决符号执行的程序循环问题,但是他们却存在以下的几种问题:
1、将无限(unbounded)的程序循环转换为有限(bounded)的程序循环,使得符号执行跳出程序循环。这种技术将使符号执行失去完备性,从而丢失(miss)掉一些特定代码区域,例如,漏洞(Bug)所在的特定代码区域;
2、利用一些经验条件,引导符号执行跳出程序循环。这种方法不具有广泛(generic)的特性,并且也有失去完备性的可能。
3、利用循环摘要(loop summary)的方法,引导符号执行跳出程序循环。但是如何寻找一个有效的循环不变量(loop invariant)目前还在初步的研究阶段。而且大部分的程序循环很难生成循环不变量,从而使得跳出程序循环变得不可能。
目前,虽然符号执行可以精确执行每一条指令,但是它的精确性使得其在程序循环中消耗太多的资源,而且无法跳出程序循环,则会出现状态爆炸的问题,尤其当程序循环的边界没有确定的时候,符号执行基本陷入程序循环无法自动跳出。因此,状态爆炸将会导致符号执行无法分析大规模的含有程序循环的程序库。
鉴于上述,本申请提供一种符号执行的引导方法,用以解决符号执行的程序循环问题,提高符号执行的可靠性。
图1为本申请一实施例提供的符号执行的引导方法的流程示意图,如图1所示。
101、确定程序的特定代码区域。
102、利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出。
所谓的程序循环输出,是指符号执行执行程序循环之后的程序状态。
103、根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入。
所谓的程序循环输入,是指符号执行执行程序循环之前的程序状态。
至此,可以利用所获得的程序的特定代码区域所对应的所述程序的程序循环输入,能够有效地引导符号执行跳出程序循环,从而快速到达特定代码区域(如Bug点所在代码区域),生成所述程序的测试用例。
本申请中,通过根据程序循环预测器所预测的程序状态即程序的特定代码区域所对应的程序循环输入,设计有效执行路径引导符号执行的路径选择,使得它每次只选择预测的程序状态所挑选出的路径为下一个执行路径,直到到达触发特定代码区域(如Bug点所在代码区域)。
需要说明的是,101~103的执行主体的部分或全部可以为位于本地终端的应用,或者还可以为设置在位于本地终端的应用中的插件或软件开发工具包(SoftwareDevelopment Kit,SDK)等功能单元,或者还可以为位于网络侧服务器中的处理引擎,或者还可以为位于网络侧的分布式系统,本实施例对此不进行特别限定。
可以理解的是,所述应用可以是安装在终端上的本地程序(nativeApp),或者还可以是终端上的浏览器的一个网页程序(webApp),本实施例对此不进行特别限定。
这样,通过确定程序的特定代码区域,进而,则可以利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出,使得能够根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入,这样,可以利用所获得的所述特定代码区域所对应的所述程序的程序循环输入,引导符号执行过滤不可能的执行路径跳出程序循环到达所述特定代码区域,从而提高了符号执行的可靠性。
通常,在软件测试中,一般需要测试出程序的漏洞(Bug)点,进行进行分析与修复处理。因此,本申请中所涉及的程序的特定代码区域可以包括但不限于所述程序的漏洞点所在代码区域,本申请对比不进行特别限定。
可选地,在本实施例的一个可能的实现方式中,在101中,具体可以利用抽象解释,确定所述程序的特定代码区域。这样,通过利用抽象解释,就能够快速定位到程序的Bug产生的地点即Bug点。
所谓的抽象解释(Abstract Interpretation),是指使用另一个抽象对象域上的计算抽象逼近程序指称的对象域上的计算,使得程序抽象执行的结果能够反映出程序真实运行的部分信息。
抽象解释的基本原理是利用了程序静态分析中的数值分析(value analysis),数值分析的过程中存储每一步操作之后的程序状态。其中,程序状态在抽象解释中可以用一个映射(map)所表示,例如,键(key)表示程序中活跃的变量),值(value)是当前指令下该变量的可取值的范围。抽象解释就是遍历程序控制流图上的所有路径,为每一个在控制流图上的节点记录该节点操作之后的程序状态。
其中,控制流图(Control Flow Graph,CFG)也叫控制流程图,是一个程序的抽象表现,是用在编译器中的一个抽象数据结构,由编译器在内部维护,代表了一个程序的执行过程中会遍历到的所有路径。控制流图中每个在图形中的节点代表一个基本块。它用图的形式表示一个程序内所有基本块执行的可能流向,也能反映一个程序的实时执行过程。
可选地,在本实施例的一个可能的实现方式中,在102之前,还可以进一步执行构建程序循环预测器的操作。
在该实现方式中,可以利用抽象解释,采集训练数据集。训练数据集是由程序循环中的每次迭代操作所生成的程序状态集所组成的。这部分工作,可以由路径探索引擎来完成。
例如,路径探索引擎具体可以为程序循环预测器提供训练数据集。这里,可以采用抽象解释作为训练数据采集器,为路径探索引擎采集训练数据。因为程序循环预测器目的是用来学习程序循环内部的数值操作,因此,所采集的训练数据是每一次迭代操作之后所有的程序变量的当前值域。抽象解释在执行程序循环的同时,可以为每一次迭代操作记录所有的程序变量的当前值域。因此,我们利用抽象解释多次执行程序循环,每一次的执行程序可以提供不同的输入值。路径探索引擎就是记录抽象解释执行程序循环的过程中的程序变量的程序值域,将所有的程序变量的程序值域根据它们迭代操作的次数和执行路径存入到训练数据集中。
采集训练数据集完毕之后,则可以利用循环神经网络(Recurrent NeuralNetworks,RNN),学习抽象解释所生成的训练数据集,构建程序循环预测器。这样,利用神经网路,来模拟程序循环的内部逻辑,能够减少程序循环里的循环操作的复杂性,从而使得准确的符号执行成为可能。
所谓的训练数据集的学习目标是根据程序的特定代码区域所对应的所述程序的程序循环输出,来预测程序的特定代码区域所对应的所述程序的程序循环输入,使得根据程序的初始状态即程序循环输入每执行一步最接近所述特定代码区域的程序状态即程序循环输出。
在一个具体的实现过程中,具体可以利用抽象解释,获得所述程序的程序循环中第一次迭代操作之前的程序状态和每一次迭代操作之后的程序状态,进而,则可以将每一次迭代操作之前的程序状态和该次迭代操作之后的程序状态,作为一条训练数据。
具体来说,抽象解释是在程序的控制流上进行数值分析(value analysis)的。对于含有程序循环的控制流图,抽象解释执行程序循环中的每一次迭代操作之后,将会更新含有程序循环的控制流图上每一个基本块(block)上的程序状态,直到达到程序循环的迭代边界。对于未确定的边界,抽象解释需要做加宽处理(widening),用准确性换时间跳出程序循环。
在这个实现过程中,通过利用抽象解释来自动生成训练数据,并记录下每一次迭代操作之后的控制流图(即每个程序变量)上的程序状态,将其存入训练数据集中。对于一次迭代操作,程序循环内的程序是一个树状结构,每一个分支(branch)都会有不同的操作,它的操作结果的程序状态也是不同的。因此,可以将每一个从树的根节点到叶子节点的执行路径作为一条训练数据,它的输入是树的根节点在迭代操作之前的程序状态,输出是该树的叶子节点在迭代操作之后的程序状态。遍历整个树,可以得到一次迭代操作的数据p1=[i1,o1]。假设训练数据只采用迭代该程序循环前n次的数据为训练数据,每一次迭代操作i之后,可以得到数据pi。依次遍历n次迭代操作,可以得到一条训练数据data1=[p1,p2,p3,…,pn]。通过改变程序循环的输入值,通过抽象解释的多次执行,就可以生成一个具有足够多的训练数据的训练数据集。
在另一个具体的实现过程中,在生成所述至少两条训练数据之后,则可以利用至少两条训练数据,构建基于循环神经网络(Recurrent Neural Networks,RNN)的所述程序循环预测器。这部分工作,可以由路径学习引擎来完成。
可以理解的是,实际上,两条训练数据,甚至三条、四条训练数据是远远不够的,需要生成足够多的训练数据之后,再利用这些训练数据,构建基于RNN的程序循环预测器。
由于程序状态记录了所有程序变量的当前可取值的范围,是一个取值区间,而取值区间又不可以直接作用于RNN。因此,需要对程序变量的取值区间执行向量化(Embedding)的操作,将程序变量的取值区间进行预处理之后转化成RNN可以接受的数值形式。也就是说,可以将取值的区间形式转化成一个实数值。该实数值并不是简单的索引(index),而是能够保证转化之后的实数值与转化之前的取值区间的语法和语义的相似性是一致的。
具体地,具体可以将所述至少两条训练数据中的程序状态进行向量化处理,以获得状态向量,进而,则可以利用向量化处理之后的至少两条训练数据,构建基于RNN的所述程序循环预测器。
例如,可以我们借鉴词向量(word2vec)的向量化技术,来对程序状态进行向量化操作。Word2Vec在自然语言处理(Nature Language Processing,NLP)中用于对文本进行向量化操作。它将文本(word)通过映射到一个高维的向量,保证变换之后的高维向量使得最终的损失函数(loss function)的值最小化。例如,输入(input)为一个程序状态即程序变量的取值范围,通过映射之后,则可以获得输出(output)为(e1,e2,…en)的高维向量,每一个输出就是对应程序变量的向量化结果。
程序循环可以看作是一个RNN的网络结构图,程序循环是对单个迭代操作里的程序逻辑的重复操作,每一次的迭代操作都会以上一次迭代操作的输出(output)作为输入(input)。这里的RNN网络是模拟程序循环的内部逻辑,但是不同于程序循环之处在于,RNN的输入是第N次迭代操作之后的程序状态,输出为第1次迭代操作之前的程序状态。
本申请的所构建的基于RNN的程序循环预测器,是通过模拟程序循环预测出第N次迭代操作之后的程序状态所对应的输入值即程序状态。这样,就可以运用所预测出的的程序状态作为向导引导符号执行跳出程序循环到达特定代码区域(如Bug点所在代码区域)。
假设循环的迭代操作次数为N,{p1,p2,…,pN}记录了迭代操作N次中,每次迭代操作之后的输出。PN是指第N次迭代操作之后的输出。RNN的每次输入为迭代操作N次之后的程序状态,这里的程序状态是向量化操作之后的向量结果pn={y0,y1,...yn}。所构建的基于RNN的程序循环预测器的最终目的是引导符号执行跳出程序循环到达特定代码区域(如Bug点所在代码区域)。例如,可以将程序的程序循环输入的真实程序状态集作为标签(label),基于RNN的程序循环预测器的目标是训练出根据特定代码区域所对应的程序循环输出预测出该特定代码区域所对应的程序循环输入,那么,损失函数(loss function)则可以为如下:
Figure BDA0002131496070000101
其中,yi是RNN所预测的程序状态集第i位的值;
Figure BDA0002131496070000102
是程序循环的程序循环输入的真实程序状态集第i位的值。这样,可以计算出真实程序状态与RNN所预测的程序状态之间的值差,然后,用差值来引导RNN训练出程序循环的逻辑。为了防止学习率衰减(LearningRate Decay),本申请采用长短期记忆(Long Short Term Memory,LSTM)作为模拟程序循环的RNN的网络结构。
在构建完毕程序循环预测器之后,则可以根据所获得的程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入。
那么,可以进一步利用所获得的程序的特定代码区域所对应的所述程序的程序循环输入,有效地引导符号执行跳出程序循环,快速到达特定代码区域(如Bug点所在代码区域),生成所述程序的测试用例。这部分工作,可以由路径选择引擎来完成。本申请可以利用klee等符号执行工具来实现路径选择引擎进行测试用例的生成。
由于程序循环预测器是模拟了程序循环内部的循环逻辑,因此,可以对每一个抽象解释所生成的特定代码区域(如Bug点所在代码区域)所对应的程序循环输出,利用构建的程序循环预测器,预测生成一个相对应的程序循环输入。那么,符号执行执行程序循环的程序循环输入,则可以生成相对应的程序循环的程序循环输出,从而可以到达特定代码区域(如Bug点所在代码区域)。
因此,可以利用这个程序循环预测器生成的输入值引导符号执行筛选不必要的路径跳出循环,生成到达特定代码区域(如Bug点所在代码区域)的测试用例。
具体来说,路径选择引擎具体可以根据程序循环预测器预测的程序的特定代码区域所对应的所述程序的程序循环输入,来引导符号执行执行到达触发特定代码区域(如Bug点所在代码区域)的指令地址。因为程序循环预测器是根据特定代码区域(如Bug点所在代码区域)所对应的程序循环输出来预测可以到达该特定代码区域(如Bug点所在代码区域)所对应的程序循环输入,因此,利用预测的程序循环输入可以有效的保证一定可以到达特定代码区域(如Bug点所在代码区域)。符号执行每次执行是根据所预测的程序状态集里的变量值来选择分支。在符号执行的执行过程中,遇到分支会查找分支上的变量,此时在所预测的程序状态集里的变量值,根据该变量值,符号执行便可以快速地到达特定代码区域(如Bug点所在代码区域),而无需花费时间探索其他无效执行路径。
本申请中,通过根据程序循环的预测状态即程序的特定代码区域所对应的程序循环输入,设计有效路径引导符号执行的路径选择,使得它每次只选择预测状态所挑选出的路径为下一个执行路径,直到到达触发特定代码区域(如Bug点所在代码区域)。
本申请通过强化学习来学习程序的循环行为,进而生成程序的程序循环预测器。通过程序循环预测器可以有效地引导符号执行寻找一条优化的、有效的执行路径,从而快速生成程序的测试用例。
与传统的基于程序循环的循环摘要(summary)的方法相比,本申请所提提供的技术方案具有如下优点:
1、轻量级(light weight)。
本申请可以体现在生成循环不变量的方法比较的轻量级;以及与传统的基于程序循环的循环摘要(summary)的方法相比,无需考虑程序循环内部的所有循环逻辑,符号执行不需要记录程序循环内部的所有循环逻辑,就能够到达特定代码区域(如Bug点所在代码区域)。
这样,无需进行复杂的静态分析程序循环内部的循环逻辑,也无需记录程序循环里的所有循环逻辑,而是通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,无论是内存,还是CPU的消耗,都是轻量级的。
2、查错性。
本申请仅需要生成与程序的特定代码区域所对应的该程序的程序循环输出所对应的程序的特定代码区域所对应的该程序的程序循环输入,而并非生成程序循环的循环摘要(summary)。而当符号执行根据生成结果,无法到达程序的特定代码区域时,如果是基于程序循环的循环摘要(summary),如果摘要生成错误,符号执行将无法预知生成的无效程序输入是源于摘要的错误,还是真正的漏报率(false positive)。
这样,通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,将比以往生成循环摘要(summary)更加具有广泛适用性。因为循环摘要仅仅对一些线性逻辑循环有作用,而机器学习的方法学习到的循环逻辑可以模拟非线性的逻辑。当符号执行因为循环无法到达程序特定代码区域时,它可以根据循环预测器预测的循环输入进行引导,快速到达指定区域。
3、快速性。
传统的基于程序循环的循环摘要(summary)的方法,将记录程序循环内部的所有循环逻辑,并根据每一个所记录的循环逻辑探索(explore)下一步执行的程序逻辑,直到到达特定代码区域(如Bug点所在代码区域)。它需要基于每一条循环逻辑所生成的表达式(formula),计算出相对应的程序输入。如果循环逻辑数目剧增,所消耗的时间也是指数级增长的。
这样,通过根据程序的特定代码区域所对应的该程序的程序循环输出,直接预测出该程序的程序循环输入,能够有效过滤掉其他的所有不可能的执行路径,使得能够快速地跳出程序循环到达所述特定代码区域,生成有效的测试用例,能有效提高程序的测试效率。
本申请所提提供的技术方案,通过在抽象解释的中间结果(例如,程序的程序循环的执行路径上所有的程序变量的取值等)上学习程序循环的内部逻辑,从而生成程序循环预测器,并引导符号执行跳出程序循环产生有效的程序循环输入,进而形成有效的测试用例。具体的有益效果如下:
1、克服已有的人工添加抽象解释的值域的瓶颈,利用编译器的插桩(instrumentation)的特性自动化的完成抽象解释和符号执行的结合。
2、采用机器学习中的机器学习的方法,学习抽象解释对程序循环的分析结果,从而构建程序循环预测器来指导符号执行的执行路径,确保能够迅速地到达所述程序的特定代码区域,从而解决路径爆炸的问题。
3、以抽象解释的所产生的特定代码区域(如Bug点所在代码区域)为驱动,有效地定点(即特定代码区域)做符号执行,能够有效避免由于符号执行盲目地搜索程序空间而造成的时间和资源的浪费。
本实施例中,通过确定程序的特定代码区域,进而,则可以利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出,使得能够根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入,这样,可以利用所获得的所述特定代码区域所对应的所述程序的程序循环输入,引导符号执行过滤不可能的执行路径跳出程序循环到达所述特定代码区域,从而提高了符号执行的可靠性。
另外,采用本申请所提供的技术方案,能够生成程序到达该程序的特定代码区域的有效的程序循环输入,从而有效提高了程序的测试效率。
另外,采用本申请所提供的技术方案,无需进行复杂的静态分析程序循环内部的循环逻辑,而是通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,无论是内存,还是CPU的消耗,都是轻量级的。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
图2为本申请另一实施例提供的符号执行的引导装置的结构示意图,如图2所示。本实施例的符号执行的引导装置可以包括确定单元21、执行单元22和预测单元23。其中,确定单元21,用于确定程序的特定代码区域;执行单元22,用于利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出;预测单元23,用于根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入。
需要说明的是,本实施例所提供的符号执行的引导装置的部分或全部可以为位于本地终端的应用,或者还可以为设置在位于本地终端的应用中的插件或软件开发工具包(Software Development Kit,SDK)等功能单元,或者还可以为位于网络侧服务器中的搜索引擎,或者还可以为位于网络侧的分布式系统,本实施例对此不进行特别限定。
可以理解的是,所述应用可以是安装在终端上的本地程序(nativeApp),或者还可以是终端上的浏览器的一个网页程序(webApp),本实施例对此不进行特别限定。
可选地,在本实施例的一个可能的实现方式中,所述确定单元21,具体可以用于利用抽象解释,确定所述程序的特定代码区域。
通常,在软件测试中,一般需要测试出程序的漏洞(Bug)点,进行进行分析与修复处理。因此,本申请中所涉及的程序的特定代码区域可以包括但不限于所述程序的漏洞点所在代码区域,本申请对比不进行特别限定。
可选地,在本实施例的一个可能的实现方式中,所述预测单元23,还可以进一步用于利用抽象解释,获得所述程序的循环中第一次迭代操作之前的程序状态和每一次迭代操作之后的程序状态;将每一次迭代操作之前的程序状态和该次迭代操作之后的程序状态,作为一条训练数据;以及利用至少两条训练数据,构建基于循环神经网络RNN的所述程序循环预测器。
具体地,所述预测单元23,具体可以用于将所述至少两条训练数据中的程序状态进行向量化处理,以获得状态向量;以及利用向量化处理之后的至少两条训练数据,构建基于RNN的所述程序循环预测器。
需要说明的是,图1对应的实施例中方法,可以由本实施例提供的符号执行的引导装置实现。详细描述可以参见图1对应的实施例中的相关内容,此处不再赘述。
本实施例中,通过确定单元确定程序的特定代码区域,进而,则可以又执行单元利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出,使得预测单元能够根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入,这样,可以利用所获得的所述特定代码区域所对应的所述程序的程序循环输入,引导符号执行过滤不可能的执行路径跳出程序循环到达所述特定代码区域,从而提高了符号执行的可靠性。
另外,采用本申请所提供的技术方案,能够生成程序到达该程序的特定代码区域的有效的程序循环输入,从而有效提高了程序的测试效率。
另外,采用本申请所提供的技术方案,无需进行复杂的静态分析程序循环内部的循环逻辑,而是通过机器学习的方法学习程序循环输入和程序循环输出,来模拟程序循环的循环逻辑,无论是内存,还是CPU的消耗,都是轻量级的。
图3示出了适于用来实现本申请实施方式的示例性计算机系统/服务器12的框图。图3显示的计算机系统/服务器12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图3所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,存储装置或者系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图3中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如系统存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器25等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口44进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现图1所对应的实施例所提供的符号执行的引导方法。
本申请另一实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图1所对应的实施例所提供的符号执行的引导方法。
具体来说,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或页面组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一个计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (10)

1.一种符号执行的引导方法,其特征在于,包括:
确定程序的特定代码区域;
利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出;
根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入;其中,
所述根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入之前,还包括:
利用抽象解释,获得所述程序的循环中第一次迭代操作之前的程序状态和每一次迭代操作之后的程序状态;
将每一次迭代操作之前的程序状态和该次迭代操作之后的程序状态,作为一条训练数据;
利用至少两条训练数据,构建基于循环神经网络RNN的所述程序循环预测器。
2.根据权利要求1所述的方法,其特征在于,所述确定程序的特定代码区域,包括:
利用抽象解释,确定所述程序的特定代码区域。
3.根据权利要求1所述的方法,其特征在于,所述程序的特定代码区域包括所述程序的漏洞点所在代码区域。
4.根据权利要求1~3任一权利要求所述的方法,其特征在于,所述利用至少两条训练数据,构建基于RNN的所述程序循环预测器,包括:
将所述至少两条训练数据中的程序状态进行向量化处理,以获得状态向量;
利用向量化处理之后的至少两条训练数据,构建基于RNN的所述程序循环预测器。
5.一种符号执行的引导装置,其特征在于,包括:
确定单元,用于确定程序的特定代码区域;
执行单元,用于利用程序逆向分析方法,获得所述程序的特定代码区域所对应的所述程序的程序循环输出;
预测单元,用于根据所述程序的程序循环输出,利用程序循环预测器,获得所述特定代码区域所对应的所述程序的程序循环输入;其中,
所述预测单元,还用于
利用抽象解释,获得所述程序的循环中第一次迭代操作之前的程序状态和每一次迭代操作之后的程序状态;
将每一次迭代操作之前的程序状态和该次迭代操作之后的程序状态,作为一条训练数据;以及
利用至少两条训练数据,构建基于循环神经网络RNN的所述程序循环预测器。
6.根据权利要求5所述的装置,其特征在于,所述确定单元,具体用于
利用抽象解释,确定所述程序的特定代码区域。
7.根据权利要求5所述的装置,其特征在于,所述程序的特定代码区域包括所述程序的漏洞点所在代码区域。
8.根据权利要求5~7任一权利要求所述的装置,其特征在于,所述预测单元,具体用于
将所述至少两条训练数据中的程序状态进行向量化处理,以获得状态向量;以及
利用向量化处理之后的至少两条训练数据,构建基于RNN的所述程序循环预测器。
9.一种电子设备,其特征在于,所述电子设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1~4中任一权利要求所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1~4中任一权利要求所述的方法。
CN201910639918.3A 2019-07-16 2019-07-16 符号执行的引导方法、装置、设备及计算机可读存储介质 Active CN110457208B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201910639918.3A CN110457208B (zh) 2019-07-16 2019-07-16 符号执行的引导方法、装置、设备及计算机可读存储介质
US16/829,593 US11119892B2 (en) 2019-07-16 2020-03-25 Method, device and computer-readable storage medium for guiding symbolic execution

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910639918.3A CN110457208B (zh) 2019-07-16 2019-07-16 符号执行的引导方法、装置、设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN110457208A CN110457208A (zh) 2019-11-15
CN110457208B true CN110457208B (zh) 2023-01-06

Family

ID=68482759

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910639918.3A Active CN110457208B (zh) 2019-07-16 2019-07-16 符号执行的引导方法、装置、设备及计算机可读存储介质

Country Status (2)

Country Link
US (1) US11119892B2 (zh)
CN (1) CN110457208B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11860769B1 (en) * 2019-12-04 2024-01-02 Amazon Technologies, Inc. Automatic test maintenance leveraging machine learning algorithms
JP2023056953A (ja) * 2021-10-08 2023-04-20 株式会社日立製作所 不具合解析装置及び不具合解析方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径爆炸的动态符号执行方法
CN104503901A (zh) * 2014-12-04 2015-04-08 中国人民解放军总参谋部第五十四研究所 一种基于静态路径分析的导向符号执行方法
CN108763064A (zh) * 2018-05-10 2018-11-06 南京大学 一种基于黑盒函数与机器学习的代码测试生成方法和装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW200739419A (en) * 2006-04-07 2007-10-16 Univ Feng Chia Prediction mechanism of a program backward jump instruction
US8402444B2 (en) * 2009-10-09 2013-03-19 Microsoft Corporation Program analysis through predicate abstraction and refinement
US8645924B2 (en) * 2011-06-06 2014-02-04 Fujitsu Limited Lossless path reduction for efficient symbolic execution and automatic test generation
US8966457B2 (en) * 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
CN103559122B (zh) * 2013-10-14 2016-04-27 西安交通大学 基于程序行为切片的测试案例约减方法
US9524011B2 (en) * 2014-04-11 2016-12-20 Apple Inc. Instruction loop buffer with tiered power savings
US10275249B1 (en) * 2015-10-15 2019-04-30 Marvell International Ltd. Method and apparatus for predicting end of loop
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN105740149B (zh) * 2016-01-29 2018-02-16 中国人民解放军信息工程大学 基于脆弱性模型和符号执行结合的软件安全检测方法
US10503633B2 (en) * 2016-03-30 2019-12-10 International Business Machines Corporation Symbolic execution of alternative branches
US20180081681A1 (en) * 2016-09-16 2018-03-22 GM Global Technology Operations LLC Systems and methods to reverse engineer code to models using program analysis and symbolic execution
US10664601B2 (en) * 2016-10-25 2020-05-26 Nanjing University Method and system automatic buffer overflow warning inspection and bug repair
US10635576B2 (en) * 2018-06-18 2020-04-28 Fujitsu Limited Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101714118A (zh) * 2009-11-20 2010-05-26 北京邮电大学 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法
CN102708045A (zh) * 2012-04-13 2012-10-03 电子科技大学 一种缓解路径爆炸的动态符号执行方法
CN104503901A (zh) * 2014-12-04 2015-04-08 中国人民解放军总参谋部第五十四研究所 一种基于静态路径分析的导向符号执行方法
CN108763064A (zh) * 2018-05-10 2018-11-06 南京大学 一种基于黑盒函数与机器学习的代码测试生成方法和装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
[符号执行-入门1]软件测试中的符号执行;weixin_34307464;《https://blog.csdn.net/weixin_34307464/article/details/86363337》;20180821;第1-3页 *
Guided Dynamic Symbolic Execution Using Subgraph Control-Flow Information;Josselin Feist 等;《International Conference on Software Engineering and Formal Methods》;20160623;第76-81页 *
Python程序缺陷的自动检测与定位技术;徐兆桂;《中国博士学位论文全文数据库 信息科技辑》;20180615(第6期);I138-21 *
基于求解开销预测的符号执行搜索策略研究;刘经德 等;《计算机研究与发展》;20160515;第53卷(第5期);第1086-1094页 *

Also Published As

Publication number Publication date
US11119892B2 (en) 2021-09-14
CN110457208A (zh) 2019-11-15
US20210019250A1 (en) 2021-01-21

Similar Documents

Publication Publication Date Title
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
CN109426615A (zh) 过程间的空指针解引用检测方法、系统、设备以及介质
Brooks Survey of automated vulnerability detection and exploit generation techniques in cyber reasoning systems
CN111475820B (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
JP2007528059A (ja) ソフトウェアのモデル化、抽象、および分析のためのシステムと方法
EP2706459B1 (en) Apparatus and method for validating a compiler for a reconfigurable processor
US8065565B2 (en) Statistical debugging using paths and adaptive profiling
CN110457208B (zh) 符号执行的引导方法、装置、设备及计算机可读存储介质
Liu et al. Automatic generation of assertions from system level design using data mining
Li et al. SmartInjector: Exploiting intelligent fault injection for SDC rate analysis
Guha et al. Deepframe: A profile-driven compiler for spatial hardware accelerators
Mu et al. Renn: Efficient reverse execution with neural-network-assisted alias analysis
Yang et al. Efficient validation of self-adaptive applications by counterexample probability maximization
CN110543353A (zh) 结合符号执行和路径模型检验的mpi程序验证方法、系统及介质
JP2007122207A (ja) プログラム分析プログラム、プログラム分析装置、プログラム分析方法
US20230029250A1 (en) Type inference in dynamic languages
Lim et al. R High Performance Programming
Charvát et al. Automatic formal correspondence checking of ISA and RTL microprocessor description
Lezos et al. Dynamic source code analysis for memory hierarchy optimization in multimedia applications
Yan et al. A survey of human-machine collaboration in fuzzing
Wang et al. An embedded C language Target Code level Unit Test method based on CPU Simulator
Bartsch et al. Efficient SAT/simulation-based model generation for low-level embedded software.
CN117290856B (zh) 基于软件自动化测试技术的智能测试管理系统
CN116069602B (zh) 一种最坏情况执行时间分析方法和装置
Gamatié et al. Explainable AI for Embedded Systems Design: A Case Study of Static Redundant NVM Memory Write Prediction

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