CN112162932A - 一种基于线性规划预测的符号执行优化方法及装置 - Google Patents
一种基于线性规划预测的符号执行优化方法及装置 Download PDFInfo
- Publication number
- CN112162932A CN112162932A CN202011197098.6A CN202011197098A CN112162932A CN 112162932 A CN112162932 A CN 112162932A CN 202011197098 A CN202011197098 A CN 202011197098A CN 112162932 A CN112162932 A CN 112162932A
- Authority
- CN
- China
- Prior art keywords
- constraint
- bit vector
- linear programming
- array
- linear
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于线性规划预测的符号执行优化方法及装置,该方法步骤包括:S1.对待测源程序进行符号执行的过程中,收集分支条件信息,生成对应探索路径上的位向量路径约束;S2.在求解各探索路径上的路径约束前,预先扫描各位向量路径约束;S3.判断各位向量路径约束中是否存在数组操作,如果不存在,则直接转换为线性规划模型;如果存在,则根据数组内容信息,转换为对应的线性规划模型;S4.求解得到的线性规划模型并进行可满足性判断,如果判断结果不是不可满足的,则将对应的位向量约束传递给约束求解器以进行求解。本发明具有实现方法简单、效率高,能够快速检测数组约束的不可满足性,提高可达路径探索能力等优点。
Description
技术领域
本发明涉及软件自动测试中符号执行技术领域,尤其涉及一种基于线性规划预测的符号执行优化方法及装置。
背景技术
在软件开发流程中,测试是必不可少的一环。软件测试通过构造不同的测试用例来执行软件,期望尽早地发现软件中的漏洞。目前,测试用例一般都是人工构造的,存在构造成本高、构造效率低的问题,难以达到理想的覆盖率。测试用例自动生成技术旨在通过软件手段实现测试用例的自动化生成,从而提高软件测试的效率。符号执行是测试用例自动生成技术中的重要分支,可以有效生成高覆盖率的测试用例。在符号执行过程中,程序的输入被符号化。符号执行器通过符号输入来执行程序,构建符号路径条件并转换成位向量形式的路径约束加以求解,从而达到系统探索程序路径的目的,在这个过程里,约束求解的作用至关重要。每当一条程序路径被探索完时,符号执行器就调用约束求解器来求解该条路径上的约束,只有当该条路径上的约束是可满足的,也即存在某个解使得路径约束为真,符号执行器才能根据约束求解器返回的解构造测试用例。
约束求解是符号执行中最主要的性能瓶颈,也是影响符号执行高效生成测试用例的关键因素。目前符号执行时使用的约束求解器通常是基于可满足性模理论(Satisfiability-Modulo Theory,SMT)的,即SMT求解器,符号执行中产生的约束被转换成SMT公式后,再通过该SMT求解器检查其可满足性。SMT公式是一种结合了不同背景理论的一阶逻辑公式,包括整数理论、位向量理论、数组理论等。而在符号执行场景下,通常是使用位向量理论和数组理论综合的SMT公式,其可满足性的判定问题是一个NPC(Non-deterministic Polynomial Complete)问题。在实际程序中,往往会存在大量不可达的路径,因此对这些程序做符号执行会生成大量不可满足的路径约束,使得SMT求解器需要花费大量时间来判断这些约束的不可满足性。而且,由于这些路径约束不存在解,符号执行器无法生成对应的测试用例,造成大量不必要的时间耗费。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、效率高的基于线性规划预测的符号执行优化方法及装置,能够在符号执行过程中快速检测数组约束的不可满足性,提高符号执行过程中可达路径的探索能力。
为解决上述技术问题,本发明提出的技术方案为:
一种基于线性规划预测的符号执行优化方法,步骤包括:
S1.路径约束生成:对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
S2.扫描判断:在求解各探索路径上的路径约束前,预先扫描各所述位向量路径约束,若所述位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入步骤S3;
S3.模型构建:判断所述位向量路径约束中是否存在数组操作,如果不存在,则直接将所述位向量路径约束转换为线性规划模型;如果存在,则根据所述位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后再转换为对应的线性规划模型;
S4.模型求解:求解得到的所述线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
进一步的,所述非线性操作为乘数和被乘数均不是常数的乘法操作或除数不是常数的除法操作,所述无法线性化的操作为XOR操作、数组写操作、操作数均不是常数的有符号比较操作中任意一种。
进一步的,所述步骤S2中若所述位向量路径约束中包含非线性操作或包含无法线性化的操作,则直接将所述位向量路径约束转换成SMT公式,并调用SMT求解器进行最终判定以完成求解。
进一步的,所述步骤S3中构造线性规划模型时,具体将所述位向量路径约束中所有的位向量操作进行建模,其中所述位向量操作的语义中隐含有模运算x mod c,x和c为操作数,c为常数。对所述模运算x mod c做线性转换时,引入变量z表示运算结果,同时引入整数变量y作为中间变量,转换成(x=y*c+z)∧(z>=0)∧(z<=c-1)的线性形式。
进一步的,所述构造线性规划模型时,若为位向量加法bvadd操作,具体转换成(a+b–2^n*σ=c)∧(c>=0)∧(c<=2^n-1)∧(σ>=0)∧(σ<=1)的线性形式,其中,a和b为操作数,n为操作数长度,c为计算结果;若为按位与操作,具体抽象为(c<=a)∧(c<=b)∧(c>=0)的线性形式,若为按位或操作,具体抽象为(c>=a)∧(c>=b)∧(c<=2^n-1)的线性形式,其中a,b为操作数,c为计算结果。
进一步的,所述步骤S3中如果存在数组操作时构建线性规划模型包括:先计算所述位向量路径约束中数组读操作索引变量的取值范围,根据计算出的所述数组读操作索引变量的取值范围和数组的内容信息确定出所述位向量路径约束中数组读操作的取值范围,使用确定出的所述数组读操作的取值范围将所述数组读操作转化为线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
进一步的,所述步骤S3中如果存在数组操作时构建线性规划模型的具体步骤包括:
S301.对所述位向量路径约束中数组约束C进行分割,分割成不包含数组读操作的第一子约束Cv和包含数组读操作的第二子约束Carr,即C=Cv∧Carr,其中第一子约束Cv中包含第二子约束Carr中数组读操作的索引项;
S302.直接对所述第一子约束Cv进行抽象建模,生成对应所述第一子约束Cv的第一线性形式LPCv,以及对所述第二子约束Carr中数组读操作的索引项进行抽象建模,即将每一个索引项IDXi都转成对应的第二线性形式LPIi,其中i=0,1,2,…,n-1,n为所述索引项的数量;
S303.对每一个索引项IDXi,使用所述第一线性形式LPCv作为目的线性规划模型的约束部分,使用所述第二线性形式LPIi的最小值函数min(LPIi)、最大值函数max(LPIi)分别作为目的线性规划模型的目标函数,计算得到索引项IDXi的取值范围,根据得到的所述索引项IDXi的取值范围最终确定得到数组读操作的取值范围;
S304.根据步骤S303中确定出的数组读操作的取值范围将所述第二子约束Carr中的数组读操作抽象成线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
进一步的,所述步骤S303中,具体对于每一个索引项IDXi,使用所述第一线性形式LPCv作为目的线性规划模型的约束部分,以及先使用所述第二线性形式LPIi的最小值函数min(LPIi)作为目的线性规划模型的目标函数,求出各索引项IDXi的最小值minidx,再将所述第二线性形式LPIi的最大值函数max(LPIi)作为所述目的线性规划模型的目标函数,求出各索引项IDXi的最大值maxidx,得到索引项IDXi的取值范围为[minidx,maxidx],根据得到的所述索引项IDXi的取值范围以及数组的内容信息最终确定得到数组读操作的取值范围[minr,maxr],其中minr为所述数组读操作的最小值,maxr为所述数组读操作的最大值;所述步骤S304中根据确定得到的所述取值范围[minr,maxr],将所述第二子约束Carr中的数组读操作抽象成线性形式r>minr∧r<maxr。
进一步的,所述步骤S4的步骤包括:调用所述线性规划求解器对得到的所述线性规划模型进行求解,如果所述线性规划求解器的返回结果是不可满足的,则判定对应的目的路径约束为不可满足,对目的路径约束不进行约束求解,否则将对应的所述位向量约束传递给约束求解器以进行求解。
一种基于线性规划预测的符号执行优化装置,包括符号执行器,所述符号执行器包括:
路径约束生成模块,用于对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
扫描判断模块,用于在求解各探索路径上的路径约束前,预先扫描各所述位向量路径约束,若所述位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入模型构建模块;
模型构建模块,用于判断所述位向量路径约束中是否存在数组操作,如果不存在,则直接将所述位向量路径约束转换为线性规划模型;如果存在,则根据所述位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后再转换为对应的线性规划模型;
模型求解模块,用于求解得到的所述线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
与现有技术相比,本发明的优点在于:
1、本发明通过在符号执行过程中,收集各分支指令处的分支条件信息形成对应路径上的位向量路径约束,在求解各探索路径上的路径约束前预先扫描该位向量路径约束,如果可以,将收集到的位向量约束抽象成线性规划模型;对其中可能存在的数组操作抽象,把位向量数组约束间接转换成线性规划模型;能够基于线性规划实现轻量级预先检测,使得可以快速判断模型的不可满足性,进而判断位向量约束的不可满足性,加速位向量约束不可满足性的检测,从而提高符号执行效率;
2、本发明基于线性规划预测的方法,能够有效避免调用约束求解器来判断约束的不可满足性,增强可达路径的探索能力,进而高效地生成测试用例。
3、本发明基于线性规划预测的方法,能够针对符号执行中产生的位向量约束中不同的位向量操作进行比较全面的精确建模,对其中难以精确建模的位向量操作进行抽象建模,将位向量数组约束转换成线性规划模型,从而可以快速判断模型的不可满足性,进而高效地判断出位向量约束的不可满足性。
附图说明
图1是本实施例基于线性规划预测的符号执行优化方法的实现流程示意图。
图2是本实施例实现基于线性规划预先检测的实现流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
如图1、2所示,本实施例基于线性规划预测的符号执行优化方法的步骤包括:
S1.路径约束生成:对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
S2.扫描判断:在求解各探索路径上的路径约束前,预先扫描各位向量路径约束,若位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入步骤S3;
S3.模型构建:判断位向量路径约束中是否存在数组操作,如果不存在,则直接将位向量路径约束转换为线性规划模型;如果存在,则根据位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后再转换为对应的线性规划模型;
S4.模型求解:求解得到的线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
本实施例在符号执行过程中,通过收集各分支指令处的分支条件信息形成对应路径上的位向量路径约束,在调用约束求解器求解各探索路径上的路径约束前,预先扫描该位向量路径约束,判断约束中是否存在非线性操作和无法线性化的操作。其中对于不包含非线性操作且不包含无法线性化操作的位向量约束,如果不存在数组操作,则将约束直接转换成线性规划模型;如果存在数组操作,则根据数组读操作的范围信息来间接构建对应的线性规划模型。把位向量数组约束转换成线性规划模型,能够基于线性规划实现轻量级预先检测,使得可以快速判断模型的不可满足性,进而快速判断位向量约束的不可满足性,从而提高符号执行效率,且基于线性规划的方法,还能够有效避免调用笨重的约束求解器来判断约束的不可满足性,增强可达路径的探索能力,进而可以高效地生成测试用例。
本实施例中,非线性操作具体包括乘数和被乘数均不是常数的乘法操作或除数不是常数的除法操作等,无法线性化的操作具体包括XOR(异或)操作、数组写操作、操作数均不是常数的有符号比较操作等。
本实施例步骤S2中,若位向量路径约束中包含非线性操作或包含无法线性化的操作,则直接将位向量路径约束转换成SMT公式,并调用SMT求解器进行最终判定以完成求解。如果在位向量路径约束中存在上述的非线性操作、无法线性化的操作,由于不能构建线性规模模型,则可以直接使用传统的约束求解方法,即将约束转换成SMT公式,并调用SMT求解器进行最终判定,如果不存在上述操作,则需要转入步骤S3进一步判断约束中是否包含数组操作以进行线性规划模型构建。
参见图1,本实施例具体应用于进行软件测试,在进行软件测试时,先生成源程序的中间码指令序列,基于中间码指令序列做符号执行,探索程序路径,收集路径约束,即上述位向量路径约束;对路径约束进行基于线性规划的预先检测,将约束中数组操作转换为对应的线性形式,以快速检测路径约束的不可满足性;否则,将路径约束转换为SMT公式,再调用SMT求解器判断可满足性,根据约束求解器返回的结果构造新的测试用例。
本实施例中步骤S3中构建线性规划模型时,是将约束中所有的位向量操作都建模之后得到,可以直接对整个约束做抽象建模,转换成线性规划形式后,调用线性规划求解器判断其可满足性。由于位向量约束中所有位向量操作的语义都隐含了模运算,所以对约束中的各种位向量操作的建模都要考虑到模运算。本实施例具体的对模运算的建模方式,是在建模中引入中间变量以作为模运算的中间变量,转换得到对应的线性形式,如对于模运算x mod c,具体转换成(x=y*c+z)∧(z>=0)∧(z<=c-1)的线性形式,其中c为常数,变量z表示运算结果,整数变量y作为中间变量。
以位向量加法操作为例,位向量加法的语义里默认包含了模运算,因此建模时需处理模运算。具体对于bvadd操作,假设操作数是a和b,操作数长度为n,计算结果是c,引入整数变量σ作为模运算的中间变量,可以将位向量表达式(bvadd a b)转换成(a+b–2^n*σ=c)∧(c>=0)∧(c<=2^n-1)∧(σ>=0)∧(σ<=1)的线性形式。
对于位向量约束中的bvand(按位与)和bvor(按位或)操作,由于按位运算的复杂性,这两类操作无法精确转换成线性形式,需要进行抽象处理。本实施例对位向量路径约束中按位与操作或按位或操作,将按位与操作或按位或操作经过抽象处理后得到对应的线性规划模型,其中若为按位与操作,具体抽象为(c<=a)∧(c<=b)∧(c>=0)的线性形式,若为按位或操作,具体抽象为(c>=a)∧(c>=b)∧(c<=2^n-1)的线性形式,其中a、b为操作数,c为计算结果。其他如位向量约束中的无符号比较运算符,可以直接简单地对应到线性规划模型中的比较运算符。
其他运算操作可采用与上述线性形式转换方式一致或类似的原理进行线性转换,以将所需的位向量操作转换为线性形式。
本实施例步骤S3中,如果存在数组操作时构建线性规划模型包括:先计算位向量路径约束中数组读操作索引变量的取值范围,根据计算出的数组读操作索引变量的取值范围和数组的内容信息确定出位向量路径约束中数组读操作的取值范围,使用确定出的数组读操作的取值范围将数组读操作转化为线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。通过依据数组读操作的取值范围将位向量约束中数组读操作转化为线性形式,使得位向量约束中不再存在数组读操作,从而可以将转化后的位向量约束转换成线性规划模型,进一步再调用线性规划求解器即可判断其可满足性。
本实施例中,上述如果存在数组操作时构建线性规划模型的具体步骤包括:
S301.对位向量路径约束中数组约束C进行分割,分割成不包含数组读操作的第一子约束Cv和包含数组读操作的第二子约束Carr,即C=Cv∧Carr,其中第一子约束Cv中包含第二子约束Carr中数组读操作的索引项;
S302.直接对第一子约束Cv进行抽象建模,生成对应第一子约束Cv的第一线性形式LPCv,以及对第二子约束Carr中数组读操作的索引项进行抽象建模,即将每一个索引项IDXi都转成对应的第二线性形式LPIi,其中i=0,1,2,…,n-1,n为索引项的数量;
S303.对每一个索引项IDXi,使用第一线性形式LPCv作为目的线性规划模型的约束部分,使用第二线性形式LPIi的最小值函数min(LPIi)、最大值函数max(LPIi)分别作为目的线性规划模型的目标函数,计算得到索引项IDXi的取值范围,根据得到的索引项IDXi的取值范围最终确定得到数组读操作的取值范围;
S304.根据步骤S303中确定出的数组读操作的取值范围将所述第二子约束Carr中的数组读操作抽象成线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
线性规划模型具体包含两个部分:约束部分和目标函数部分,其中,约束部分为一系列的线性约束,也即是位向量操作转换成的形式;目标函数部分是一个min/max函数,本实施例具体取min(LPIi)/max(LPIi)。
在具体应用实施例中,上述步骤S303中,具体对于每一个索引项IDXi,使用第一线性形式LPCv作为目的线性规划模型的线性约束,以及各索引项的线性形式的最小值函数min(LPIi)作为目的线性规划模型的目标函数,求出每一个索引项IDXi的最小值minidx,再将各索引项的线性形式的最大值函数max(LPIi)作为目的线性规划模型的目标函数,求出每一个索引项IDXi的最大值maxidx,得到索引项IDXi的取值范围为[minidx,maxidx],根据得到的索引项IDXi的取值范围以及数组的内容信息最终确定得到数组读操作的取值范围[minr,maxr],其中minr为数组读操作的最小值,maxr为数组读操作的最大值;步骤S304中根据确定得到的取值范围[minr,maxr],将第二子约束Carr中的数组读操作抽象成线性形式r>minr∧r<maxr。
本实施例上述方法,能够针对符号执行中产生的位向量约束中不同的位向量操作进行全面的精确建模,对其中难以精确建模的位向量操作进行了抽象建模,将位向量数组约束转换成线性规划模型,能够基于线性规划实现轻量级预先检测,使得可以快速判断模型的不可满足性,进而高效的判断出位向量约束的不可满足性。
本实施例步骤S2、S3、S4即为进行预先检测,如图2所示,在具体应用实施例中进行预先检测时首先获取位向量路径约束,判断是否包含非线性操作或包含无法线性化的操作,以排除存在无法处理的操作的约束,如果存在,直接转换成SMT公式后调用SMT求解器进行求解,如果不存在则进一步判断是否存在数组读操作。如果不存在数组读操作,直接构造线性规划模型后判断不可满足性;如果存在数组读操作,则分割数组约束,对非数组约束部分直接线性化并作为线性规划模型的约束部分,对数组约束部分则把索引线性化并用其最大值函数和最小值函数分别作为线性规划模型的目标函数,计算索引取值范围,进而计算数组读操作的取值范围,利用数组读操作的取值范围对数组约束部分构造线性规划模型,并判断不可满足性,从而可判断原始路径约束的不可满足性,最终获取得到预先检测的结果。
本实施例中,步骤S4的具体步骤包括:调用线性规划求解器对得到的线性规划模型进行求解,如果线性规划求解器的返回结果是不可满足的,则判定对应的目的路径约束为不可满足,对目的路径约束不进行约束求解,否则将对应的位向量约束传递给约束求解器以进行求解。通过步骤S3将位向量约束转换为线性规划模型后,进一步判断约束的可满足性,如果线性规划求解器的返回结果是不可满足的,则可判定位向量约束一定是不可满足的,不需要再运行复杂的约束求解流程,从而实现快速检测;如果线性规划求解器的返回结果是可满足的,由于线性规划模型是位向量约束的抽象,因此并不能确定约束即是可满足的,需要进一步使用传统的约束求解流程继续进行判定;如果线性规划求解器无法判断线性规划模型的可满足性(unknown),则把位向量路径约束传递给约束求解组件,调用约束求解组件求解位向量路径约束,得到约束的求解结果后,如果约束的求解结果是可满足的,根据该求解结果构造新的测试用例,构造完毕后跳转到步骤2以继续探索下一条程序路径,直至遍历完成路径探索。
以下以本发明在具体应用实施例中采用上述方法实现软件测试中符号执行优化为例对本发明进行进一步说明,详细步骤包括:
步骤1:输入待测试软件的源代码,调用编译器编译被测试软件,生成适合进行符号执行的中间码指令序列,把该指令序列作为符号执行器的输入,并在符号执行器中设置好符号输入,开始符号执行;
步骤2:符号执行被测试软件的中间码指令序列,在分支指令处收集不同执行分支的分支条件,形成对应探索程序路径上的位向量路径约束,把该位向量路径约束传递给符号执行器的求解组件进行求解;
步骤3:在求解组件的入口处,预先扫描路径约束,判断该约束中是否包含非线性操作和无法线性化的操作,如果存在,则直接使用传统的约束求解流程,即把约束转换成SMT公式,并调用SMT求解器进行最终判定;如果不存在,判断该约束中是否包含数组操作,其中如果约束中不存在数组操作,转入步骤4;否则,转入步骤5;
步骤4:约束中不存在数组操作,则直接对整个约束做抽象建模,转换成线性规划形式后,调用线性规划求解器判断其可满足性,转入步骤6;
步骤5:约束中存在数组操作,先计算读操作索引变量的取值范围,再结合数组元素的具体内容计算出数组读操作的取值范围,构造出整个数组约束的线性规划模型,具体如上所述,再判断其可满足性,转入步骤6;
步骤6:判断约束的可满足性,如果线性规划求解器的返回结果不是不可满足的(可满足的或无法判断可满足性unknown),则直接使用传统的约束求解流程继续进行判定;如果线性规划求解器的返回结果是不可满足的,则约束一定是不可满足的,不需要再运行复杂的约束求解流程。得到约束的求解结果后,转入步骤7;
步骤7:如果约束的求解结果是可满足的,根据该求解结果构造新的测试用例,构造完毕后跳转到步骤2,继续探索下一条程序路径;否则,直接跳转到步骤2,开始探索下一条程序路径。
本实施例上述方法,在软件测试过程中,符号执行时基于线性规划实现轻量级预先检测,可以快速判断模型的不可满足性,进而高效的判断出位向量约束的不可满足性,避免不必要的约束求解,从而使得测试用例可以高效的生成。
本实施例还包括基于线性规划预测的符号执行优化装置,该装置包括符号执行器,符号执行器包括:
路径约束生成模块,用于对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
扫描判断模块,用于在求解各探索路径上的路径约束前,预先扫描各所述位向量路径约束,若所述位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入模型构建模块;
模型构建模块,用于判断所述位向量路径约束中是否存在数组操作,如果不存在,则直接将所述位向量路径约束转换为线性规划模型;如果存在,则根据所述位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后转换为对应的线性规划模型;
模型求解模块,用于求解得到的所述线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
本实施例中,模型构建模块中,若位向量路径约束中包含数组读操作,构建线性规划模型时,先计算位向量路径约束中数组读操作索引变量的取值范围,根据计算出的数组读操作索引变量的取值范围和数组的内容信息确定出位向量路径约束中数组读操作的取值范围,使用确定出的数组读操作的取值范围将数组读操作转化为线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
本实施例基于线性规划预测的符号执行优化装置与上述基于线性规划预测的符号执行优化方法为一一对应,在此不再一一赘述。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (10)
1.一种基于线性规划预测的符号执行优化方法,其特征在于,步骤包括:
S1.路径约束生成:对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
S2.扫描判断:在求解各探索路径上的路径约束前,预先扫描各所述位向量路径约束,若所述位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入步骤S3;
S3.模型构建:判断所述位向量路径约束中是否存在数组操作,如果不存在,则直接将所述位向量路径约束转换为线性规划模型;如果存在,则根据所述位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后再转换为线性规划模型;
S4.模型求解:求解得到的所述线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
2.根据权利要求1所述的基于线性规划预测的符号执行优化方法,其特征在于,所述非线性操作为乘数和被乘数均不是常数的乘法操作或除数不是常数的除法操作,所述无法线性化的操作为XOR操作、数组写操作、操作数均不是常数的有符号比较操作中任意一种。
3.根据权利要求1所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S2中若所述位向量路径约束中包含非线性操作或包含无法线性化的操作,则直接将所述位向量路径约束转换成SMT公式,并调用SMT求解器进行最终判定以完成求解。
4.根据权利要求1所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S3中,构造线性规划模型时,具体将所述位向量路径约束中所有的位向量操作进行建模,其中所述位向量操作的语义中隐含有模运算x mod c,x和c为操作数,c为常数,对所述模运算x mod c做线性转换时,引入变量z表示运算结果,同时引入整数变量y作为中间变量,转换成(x=y*c+z)∧(z>=0)∧(z<=c-1)的线性形式。
5.根据权利要求4所述的基于线性规划预测的符号执行优化方法,其特征在于,所述构造线性规划模型时,若为位向量加法bvadd操作,具体转换成(a+b–2^n*σ=c)∧(c>=0)∧(c<=2^n-1)∧(σ>=0)∧(σ<=1)的线性形式,其中,a和b为操作数,n为操作数长度,c为计算结果;若为按位与操作,具体抽象为(c<=a)∧(c<=b)∧(c>=0)的线性形式,若为按位或操作,具体抽象为(c>=a)∧(c>=b)∧(c<=2^n-1)的线性形式,其中a,b为操作数,c为计算结果。
6.根据权利要求1~5中任意一项所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S3中如果存在数组操作时构建线性规划模型包括:先计算所述位向量路径约束中数组读操作索引变量的取值范围,根据计算出的所述数组读操作索引变量的取值范围和数组的内容信息确定出所述位向量路径约束中数组读操作的取值范围,使用确定出的所述数组读操作的取值范围将所述数组读操作转化为线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
7.根据权利要求6所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S3中如果存在数组操作时构建线性规划模型的具体步骤包括:
S301.对所述位向量路径约束中数组约束C进行分割,分割成不包含数组读操作的第一子约束Cv和包含数组读操作的第二子约束Carr,即C=Cv∧Carr,其中第一子约束Cv中包含第二子约束Carr中数组读操作的索引项;
S302.直接对所述第一子约束Cv进行抽象建模,生成对应所述第一子约束Cv的第一线性形式LPCv,以及对所述第二子约束Carr中数组读操作的索引项进行抽象建模,即将每一个索引项IDXi都转成对应的第二线性形式LPIi,其中i=0,1,2,…,n-1,n为所述索引项的数量;
S303.对每一个索引项IDXi,使用所述第一线性形式LPCv作为目的线性规划模型的约束部分,使用所述第二线性形式LPIi的最小值函数min(LPIi)、最大值函数max(LPIi)分别作为目的线性规划模型的目标函数,计算得到索引项IDXi的取值范围,根据得到的所述索引项IDXi的取值范围最终确定得到数组读操作的取值范围;
S304.根据步骤S303中确定出的数组读操作的取值范围将所述第二子约束Carr中的数组读操作抽象成线性形式,得到转化后的不包含数组读操作的位向量路径约束并直接转换成对应的线性规划模型。
8.根据权利要求7所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S303中,具体对于每一个索引项IDXi,使用所述第一线性形式LPCv作为目的线性规划模型的约束部分,以及先使用所述第二线性形式LPIi的最小值函数min(LPIi)作为目的线性规划模型的目标函数,求出各索引项IDXi的最小值minidx,再将所述第二线性形式LPIi的最大值函数max(LPIi)作为所述目的线性规划模型的目标函数,求出各索引项IDXi的最大值maxidx,得到索引项IDXi的取值范围为[minidx,maxidx],根据得到的所述索引项IDXi的取值范围以及数组的内容信息最终确定得到数组读操作的取值范围[minr,maxr],其中minr为所述数组读操作的最小值,maxr为所述数组读操作的最大值;所述步骤S304中根据确定得到的所述取值范围[minr,maxr],将所述第二子约束Carr中的数组读操作抽象成线性形式r>minr∧r<maxr,其中r是新引入的变量,用于替代所述数组读操作。
9.根据权利要求1~5中任意一项所述的基于线性规划预测的符号执行优化方法,其特征在于,所述步骤S4的步骤包括:调用线性规划求解器对得到的所述线性规划模型进行求解,如果所述线性规划求解器的返回结果是不可满足的,则判定对应的目的路径约束为不可满足,对目的路径约束不进行约束求解,否则将对应的所述位向量约束传递给约束求解器以进行求解。
10.一种基于线性规划预测的符号执行优化装置,包括符号执行器,其特征在于,所述符号执行器包括:
路径约束生成模块,用于对待测源程序的中间码进行符号执行的过程中,收集各分支指令处的分支条件信息,并生成对应探索路径上的位向量路径约束;
扫描判断模块,用于在求解各探索路径上的路径约束前,预先扫描各所述位向量路径约束,若所述位向量路径约束中不包含非线性操作且不包含无法线性化的操作,转入模型构建模块;
模型构建模块,用于判断所述位向量路径约束中是否存在数组操作,如果不存在,则直接将所述位向量路径约束转换为线性规划模型;如果存在,则根据所述位向量路径约束中的数组内容信息对数组操作进行抽象处理,然后再转换为对应的线性规划模型;
模型求解模块,用于求解得到的所述线性规划模型并判断可满足性,如果判断结果不是不可满足的,则将对应的所述位向量约束传递给约束求解器以进行求解。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011197098.6A CN112162932B (zh) | 2020-10-30 | 2020-10-30 | 一种基于线性规划预测的符号执行优化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011197098.6A CN112162932B (zh) | 2020-10-30 | 2020-10-30 | 一种基于线性规划预测的符号执行优化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162932A true CN112162932A (zh) | 2021-01-01 |
CN112162932B CN112162932B (zh) | 2022-07-19 |
Family
ID=73865402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011197098.6A Active CN112162932B (zh) | 2020-10-30 | 2020-10-30 | 一种基于线性规划预测的符号执行优化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162932B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2312859A1 (fr) * | 1997-12-03 | 1999-06-10 | France Telecom | Procede de verification du fonctionnement d'un systeme |
CN1402133A (zh) * | 2002-09-13 | 2003-03-12 | 中国人民解放军国防科学技术大学 | 一种面向路径的测试数据自动生成方法 |
CN102289362A (zh) * | 2011-08-26 | 2011-12-21 | 北京邮电大学 | 分段符号执行装置及其工作方法 |
CN103218497A (zh) * | 2013-04-24 | 2013-07-24 | 南京大学 | 基于增量线性规划的动态系统在线增量式快速验证系统及方法 |
CN107590073A (zh) * | 2017-08-30 | 2018-01-16 | 华南理工大学 | 基于路径覆盖软件测试的测试用例自动生成方法 |
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN108459963A (zh) * | 2018-02-26 | 2018-08-28 | 华东师范大学 | 一种基于中断控制流图的中断验证方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
CN110515857A (zh) * | 2019-09-02 | 2019-11-29 | 华东师范大学 | 一种基于动态符号执行的测试用例生成方法 |
-
2020
- 2020-10-30 CN CN202011197098.6A patent/CN112162932B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2312859A1 (fr) * | 1997-12-03 | 1999-06-10 | France Telecom | Procede de verification du fonctionnement d'un systeme |
CN1402133A (zh) * | 2002-09-13 | 2003-03-12 | 中国人民解放军国防科学技术大学 | 一种面向路径的测试数据自动生成方法 |
CN102289362A (zh) * | 2011-08-26 | 2011-12-21 | 北京邮电大学 | 分段符号执行装置及其工作方法 |
CN103218497A (zh) * | 2013-04-24 | 2013-07-24 | 南京大学 | 基于增量线性规划的动态系统在线增量式快速验证系统及方法 |
CN107590073A (zh) * | 2017-08-30 | 2018-01-16 | 华南理工大学 | 基于路径覆盖软件测试的测试用例自动生成方法 |
CN108304320A (zh) * | 2018-01-05 | 2018-07-20 | 西北工业大学 | 基于动态符号执行的Java程序错误检测方法 |
CN108459963A (zh) * | 2018-02-26 | 2018-08-28 | 华东师范大学 | 一种基于中断控制流图的中断验证方法 |
CN108845944A (zh) * | 2018-06-28 | 2018-11-20 | 中国人民解放军国防科技大学 | 一种结合符号执行提高软件模糊测试效率的方法 |
CN110515857A (zh) * | 2019-09-02 | 2019-11-29 | 华东师范大学 | 一种基于动态符号执行的测试用例生成方法 |
Non-Patent Citations (8)
Title |
---|
KONSTANTINOS KYRIAKOPOULOS: "Nonlinear Symbolic Analysis for Advanced Program Parallelization", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS ( VOLUME: 20, ISSUE: 5, MAY 2009)》 * |
KONSTANTINOS KYRIAKOPOULOS: "Nonlinear Symbolic Analysis for Advanced Program Parallelization", 《IEEE TRANSACTIONS ON PARALLEL AND DISTRIBUTED SYSTEMS ( VOLUME: 20, ISSUE: 5, MAY 2009)》, 1 August 2008 (2008-08-01) * |
孙佳地: "划分测试模型及其应用研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
孙佳地: "划分测试模型及其应用研究", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, 15 May 2011 (2011-05-15) * |
张宇巍: "动态符号执行约束求解优化设计与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》 * |
张宇巍: "动态符号执行约束求解优化设计与实现", 《中国优秀硕士学位论文全文数据库 (信息科技辑)》, 15 January 2019 (2019-01-15) * |
陈振邦: "面向MC/DC的符号执行编译优化(英文)", 《FRONTIERS OF INFORMATION TECHNOLOGY & ELECTRONIC ENGINEERING》 * |
陈振邦: "面向MC/DC的符号执行编译优化(英文)", 《FRONTIERS OF INFORMATION TECHNOLOGY & ELECTRONIC ENGINEERING》, 3 September 2020 (2020-09-03) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116775127A (zh) * | 2023-05-25 | 2023-09-19 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
CN116775127B (zh) * | 2023-05-25 | 2024-05-28 | 哈尔滨工业大学 | 一种基于RetroWrite框架的静态符号执行插桩方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112162932B (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103116540A (zh) | 基于全局超级块支配图的动态符号执行方法及其装置 | |
Liu et al. | Offline synthesis of online dependence testing: Parametric loop pipelining for HLS | |
CN104375942A (zh) | 一种面向二进制的混合模糊测试方法 | |
KR20190041912A (ko) | 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 | |
CN108763064B (zh) | 一种基于黑盒函数与机器学习的代码测试生成方法和装置 | |
KR102013582B1 (ko) | 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법 | |
CN102289362A (zh) | 分段符号执行装置及其工作方法 | |
Godboley et al. | GECOJAP: A novel source-code preprocessing technique to improve code coverage | |
de Oliveira et al. | Synthesizing invariants by solving solvable loops | |
CN112162932B (zh) | 一种基于线性规划预测的符号执行优化方法及装置 | |
Ji et al. | Effuzz: Efficient fuzzing by directed search for smart contracts | |
Li et al. | TACO: A scalable framework for timing analysis and code optimization of synchronous programs | |
Bandyopadhyay et al. | Translation validation for PRES+ models of parallel behaviours via an FSMD equivalence checker | |
CN107180193B (zh) | 一种将程序代码转换成数据约束的方法和装置 | |
CN115576840A (zh) | 基于机器学习的静态程序插桩检测方法及装置 | |
Mandal et al. | A static analyzer for Industrial robotic applications | |
CN113688403A (zh) | 一种基于符号执行验证的智能合约漏洞检测方法及装置 | |
Godboley et al. | ABCE: a novel framework for improved branch coverage analysis | |
Zhao et al. | Probabilistic path prioritization for hybrid fuzzing | |
US6968523B2 (en) | Design method of logic circuit using data flow graph | |
Puhan et al. | Program crash analysis based on taint analysis | |
Frid et al. | Elementary operations: a novel concept for source-level timing estimation | |
Wu et al. | A Highly Reliable Compilation Optimization Passes Sequence Generation Framework | |
Sri et al. | A Holistic Approach to CPU Verification using Formal Techniques | |
CN116841886B (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 |