CN105912459A - 一种基于符号执行的数组越界检测方法 - Google Patents
一种基于符号执行的数组越界检测方法 Download PDFInfo
- Publication number
- CN105912459A CN105912459A CN201610202057.9A CN201610202057A CN105912459A CN 105912459 A CN105912459 A CN 105912459A CN 201610202057 A CN201610202057 A CN 201610202057A CN 105912459 A CN105912459 A CN 105912459A
- Authority
- CN
- China
- Prior art keywords
- variable
- function
- path
- constraint
- list
- 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.)
- Pending
Links
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/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于符号执行的数组越界检测方法,首先分析函数所有路径,输入:一个函数所有的逻辑路径,函数信息,控制流图,函数实参列表;输出:所有路径的约束系统;然后单个路径分析,输入:一条逻辑路径,函数信息,控制流图,函数实参列表。输出:该条路径的约束系统以及一些附加信息。约束系统:关于数组变量的所有范围约束;附加信息:函数信息,函数调用关系,路径信息。
Description
技术领域
本发明属于符号执行技术领域,涉及一种基于符号执行的数组越界检测方法。
背景技术
符号执行是指在不执行程序的前提下,用符号值表示程序变量的值,然后模拟程序执行来进行相关分析的技术,它可以分析代码的所有语义信息,也可以只分析部分语义信息(如只分析“内存是否释放”这一部分的语义信息)。符号执行通常也被理解为符号预测,属于静态测试方法的一种,其基本思想是:将程序源代码中变量的值采用抽象化符号的形式表示,模拟程序执行,其适用于在对路径敏感的程序分析中。通常意义下的程序执行是给出具体的输入数据使得程序能够沿着某一特定路径执行并输出与之对应的具体结果。然而符号执行的目的是分析程序中变量之间的约束关系,不需制定具体的输入数据,将变量作为代数中的抽象符号处理结合程序的约束条件进行推理,结果是一些描述变量间关系的表达式。在符号执行的过程中,CFG中的分支导致了对于变量的不同的约束条件,而这些约束条件就描述了相应路径的测试数据间的约束关系。
数组越界故障是在利用数组名和其下标引用数组中的元素时,下标值超出了数组的长度范围而产生的。当用数组名和其下标引用数组元素时,其下标形式可以归纳为以下3种形式:(1)数组下标是一常数,例如varname[7];(2)数组下标是一个变量,,例如varname[j];(3)数组下标是一个表达式,例如varname[i*k+j*2]。数组的下标无论是上述哪3种形式,下标都可以看作是整型表达式(常数是最简单的表达式)。但由于数组下标表达式中某些变量受用户输入或程序多分支的影响,其静态计算结果往往不是一个明确的值而是一个整型区间,即每一个数组变量映射一个区间r,区间表示数组下标的整数范围,在对数组变量进行访问时,比较区间r和区间[0,len-1],len表示数组变量定义的长度,如果r&[0,len-1],则对数组的操作在允许的范围之内,是正确的,否则就会发生数组越界故障。
区间运算:区间作为整型值的一种代数表现形式,满足一定的性质,这里将一些基本的代数运算如+、-、*、/等操作扩展到整型区间上,通过区间运算,实现对变量区间的更新和传播。
假设min(x1,x2,…)和max(x1,x2,…)这两个函数意义分别表示为求参数的最小值和最大值。设x∈[a,b],y∈[c,d],a≤b,c≤d,对z=a+b,假设z∈[e,f],区间[e,f]可按以下规则确定:
[a,b]+[c,d]=[a+c,b+d];[a,b]-[c,d]=[a-d,b-c];[a,b]×[c,d]=[min(ac,ad,bc,bd),max(ac,ad,bc,bd)];ab>0时1/[a,b]=[1/b,1/a,ab<0时,1/[a,b]=(-∞,1/a]∪[1/b,∞],a=0时1/[a,b]=[1/b,∞),b=0时1/[a,b]=(-∞,1/a];[a,b]/[c,d]={
[min(a/c,a/d,b/c,b/d),max(a/c,a/d,b/c,b/d)],c≤d<0
[min(a/c,a/d,b/c,b/d),max(a/c,a/d,b/c,b/d)],0<c≤d
[-∞,+∞],c≤0≤d
}
以上是最基本的区间运算规则,,在这个基础上可以根据具体被测程序对上述规则进行扩充,用来计算数组下标表达式在程序的每条执行路径上具体区间范围r。
区间传播:所谓区间传播就是这个整型区间沿着程序路径得到不断更新和传播,使数组下标表达式中每一个变量映射一个最能反映变量此刻状态的值的区间。将整型变量映射为一个整型区间[min,max],然后通过对程序控制流图的分析,不断进行区间更新。这里,每一个整型变量对应一个区间,变量的区间可以通过多种操作进行改变,变量在定义时如果没有进行初始化,则变量区间被定义为[-∞,+∞]。随着变量的变化,变量区间也不断变化,一般是通过赋值语句改变变量区间,对变量的区间进行重新定义,同时也可以通过其它的方法改变变量的区间,比如作为参数传递到函数体,在函数体里对参数进行操作,再传递到函数外面。通常,一个变量的定义伴随着一个区间的产生,而变量的结束暗示着区间的消亡。
符号执行虽然精度较高,但是在遍历过程中,约束会越来越复杂,求解的难度会越来越难;而区间分析在处理复杂的控制语句时会出现精度下降的问题。本方案将符号执行与区间分析相结合,利用符号执行的路径选择优势解决区间分析中存在的问题,利用区间分析的思想降低符号执行约束的复杂度。
数组越界是缓冲区溢出故障类型中的一种最常见的故障,它是由于对数组下标的操作超过了下标范围而引起的,数组越界在使用数组类型进行程序设计的软件中普遍存在。数组越界通常分为上溢和下溢。譬如声明一个数组,其大小为len,则其下标范围为R=[0,len-1],如果以j为数组下标引用数组元素时,!j∈R,则不会发生故障,如果j<0,则发生故障,称之为下溢;如果j>len-1,则称之为上溢。因此通常对数组边界的检查要包括两部分,即检查数组上界和下界,只有对下标的操作在其区间内,才能保证对数组的使用无误,否则就会发生数组越界故障。
发明内容
本发明为了解决上述技术问题,提出一种基于符号执行的数组越界检测方法。
本发明通过以下技术方案来实现:
一种基于符号执行的数组越界检测方法,包括以下步骤:
步骤一、分析函数所有路径,遍历函数的逻辑路径列表,得到其中的第一个路径对象path,如果path为null,则直接返回约束系统及附加信息,并退出该函数;否则将路径对象、函数信息、控制流图、实参列表作为参数,执行单个路径分析,将path指向下一个逻辑路径对象,然后执行步骤二;
步骤二、单个路径分析,如果函数实参列表的大小不为0,执行步骤三;否则,执行步骤四;
步骤三、根据函数信息,把实参的约束,值传递给形参变量,并添加到约束列表和变量类型列表中;
步骤四、遍历该路径,得到它的第一个结点node;如果node为null,则直接返回约束系统及附加信息,并退出该函数;否则,执行步骤五;
步骤五、通过node的编号信息,在控制流图中查找到对应的控制流结点,对该控制流图结点的语句类型进行判断,如果语句类型为VARIABLE_DEF,则执行步骤六;如果语句类型为Assign_EXPR,则执行步骤七;如果语句类型为for,则执行步骤八;如果语句类型为Other_EXPR,则执行步骤九;
步骤六、语句类型为VARIABLE_DEF:将该语句涉及的变量添加到变量类型列表,如果涉及的是数组或整型变量,生成区间表示,利用区间与上下界生成约束,并添加到约束列表中;
步骤七、语句类型为Assign_EXPR:如果语句涉及的变量是整型或数组变量,则进行区间运算,生成约束,并添加到约束列表中;
步骤八、语句类型为for:通过控制流图结点,得到for的条件表达式信息,解析该条件表达式,得到整形变量名称,初始值,根据相应的约束规则,生成该整型变量的约束,并以(变量名称,约束)的形式存储到变量类型列表中;
步骤九、语句类型为Other_EXPR:该语句是函数调用。根据实参和参数类型列表,如果实参是数组或整型变量,则要把约束赋给相应的形参,并且把所有实参的值赋给形参,然后执行步骤一分析函数所有路径。
附图说明
图1为本发明基于符号执行的数组越界检测方法流程图。
具体实施方式
下面对本发明作进一步介绍。
如图1所示,本方法在控制流图的基础上进行分析。
(1)分析函数所有路径
输入:一个函数所有的逻辑路径,函数信息,控制流图,函数实参列表
输出:所有路径的约束系统
流程
1.遍历函数的逻辑路径列表,得到其中的第一个路径对象path。
2.如果path为null,则直接返回约束系统及附加信息,并退出该函数;
否则,将路径对象,函数信息,控制流图,实参列表作为参数,执行单个路径分析。
3.将path指向下一个逻辑路径对象,然后执行流程2。
(2)单个路径分析
输入:一条逻辑路径,函数信息,控制流图,函数实参列表。
输出:该条路径的约束系统以及一些附加信息。约束系统:关于数组变量的所有范围约束;附加信息:函数信息,函数调用关系,路径信息。
流程:
1.如果函数实参列表的大小不为0,执行流程2;否则,执行流程3。
2.根据函数信息,把实参的约束,值传递给形参变量,并添加到约束列表和变量类型列表中。
3.遍历该路径,得到它的第一个结点node。
4.如果node为null,则直接返回约束系统及附加信息,并退出该函数;
否则,执行流程5。
5.通过node的编号信息,可以在控制流图中查找到对应的控制流结点。对该控制流图结点的语句类型进行判断,如果语句类型为VARIABLE_DEF,则执行流程6;如果语句类型为Assign_EXPR,则执行流程7;如果语句类型为for,则执行流程8;如果语句类型为Other_EXPR,则执行流程9。
6.语句类型为VARIABLE_DEF:将该语句涉及的变量添加到变量类型列表,如果涉及的是数组或整型变量,生成区间表示,利用区间与上下界生成约束,并添加到约束列表中。
7.语句类型为Assign_EXPR:如果语句涉及的变量是整型或数组变量,则进行区间运算,生成约束,并添加到约束列表中。
8.语句类型为for:通过控制流图结点,得到for的条件表达式信息,解析该条件表达式,得到整形变量名称,初始值,根据相应的约束规则,生成该整型变量的约束,并以(变量名称,约束)的形式存储到变量类型列表中。
9.语句类型为Other_EXPR:该语句是函数调用。根据实参和参数类型列表,如果实参是数组或整型变量,则要把约束赋给相应的形参,并且把所有实参的值赋给形参,然后执行(1)分析函数所有路径。
Claims (1)
1.一种基于符号执行的数组越界检测方法,其特征在于,包括以下步骤:
步骤一、分析函数所有路径,遍历函数的逻辑路径列表,得到其中的第一个路径对象path,如果path为null,则直接返回约束系统及附加信息,并退出该函数;否则将路径对象、函数信息、控制流图、实参列表作为参数,执行单个路径分析,将path指向下一个逻辑路径对象,然后执行步骤二;
步骤二、单个路径分析,如果函数实参列表的大小不为0,执行步骤三;否则,执行步骤四;
步骤三、根据函数信息,把实参的约束,值传递给形参变量,并添加到约束列表和变量类型列表中;
步骤四、遍历该路径,得到它的第一个结点node;如果node为null,则直接返回约束系统及附加信息,并退出该函数;否则,执行步骤五;
步骤五、通过node的编号信息,在控制流图中查找到对应的控制流结点,对该控制流图结点的语句类型进行判断,如果语句类型为VARIABLE_DEF,则执行步骤六;如果语句类型为Assign_EXPR,则执行步骤七;如果语句类型为for,则执行步骤八;如果语句类型为Other_EXPR,则执行步骤九;
步骤六、语句类型为VARIABLE_DEF:将该语句涉及的变量添加到变量类型列表,如果涉及的是数组或整型变量,生成区间表示,利用区间与上下界生成约束,并添加到约束列表中;
步骤七、语句类型为Assign_EXPR:如果语句涉及的变量是整型或数组变量,则进行区间运算,生成约束,并添加到约束列表中;
步骤八、语句类型为for:通过控制流图结点,得到for的条件表达式信息,解析该条件表达式,得到整形变量名称,初始值,根据相应的约束规则,生成该整型变量的约束,并以(变量名称,约束)的形式存储到变量类型列表中;
步骤九、语句类型为Other_EXPR:该语句是函数调用。根据实参和参数类型列表,如果实参是数组或整型变量,则要把约束赋给相应的形参,并且把所有实参的值赋给形参,然后执行步骤一分析函数所有路径。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610202057.9A CN105912459A (zh) | 2016-04-01 | 2016-04-01 | 一种基于符号执行的数组越界检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610202057.9A CN105912459A (zh) | 2016-04-01 | 2016-04-01 | 一种基于符号执行的数组越界检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105912459A true CN105912459A (zh) | 2016-08-31 |
Family
ID=56745217
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610202057.9A Pending CN105912459A (zh) | 2016-04-01 | 2016-04-01 | 一种基于符号执行的数组越界检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105912459A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110362501A (zh) * | 2019-07-05 | 2019-10-22 | 北京大学 | 一种执行饱和寻址加载和存储操作的设备和方法 |
CN110674495A (zh) * | 2019-09-03 | 2020-01-10 | Xc5 香港有限公司 | 一种数组越界访问的检测方法、装置及设备 |
CN114647575A (zh) * | 2022-02-23 | 2022-06-21 | 南京邮电大学 | 一种基于高阶函数的c++过程间异常分析系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894064A (zh) * | 2009-05-21 | 2010-11-24 | 北京邮电大学 | 应用跨函数分析的软件测试方法 |
US20120179935A1 (en) * | 2011-01-11 | 2012-07-12 | Nec Laboratories America, Inc. | Dynamic test generation for concurrent programs |
CN103399780A (zh) * | 2013-07-03 | 2013-11-20 | 清华大学 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
-
2016
- 2016-04-01 CN CN201610202057.9A patent/CN105912459A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894064A (zh) * | 2009-05-21 | 2010-11-24 | 北京邮电大学 | 应用跨函数分析的软件测试方法 |
US20120179935A1 (en) * | 2011-01-11 | 2012-07-12 | Nec Laboratories America, Inc. | Dynamic test generation for concurrent programs |
CN103399780A (zh) * | 2013-07-03 | 2013-11-20 | 清华大学 | 一种基于虚拟机技术和动态符号执行的整数溢出检测方法 |
CN103778061A (zh) * | 2014-01-17 | 2014-05-07 | 南京航空航天大学 | 数组越界错误的自动检测和校正方法 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
Non-Patent Citations (1)
Title |
---|
刘杰等: "符号执行中的循环依赖分析方法", 《计算机工程》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110362501A (zh) * | 2019-07-05 | 2019-10-22 | 北京大学 | 一种执行饱和寻址加载和存储操作的设备和方法 |
CN110362501B (zh) * | 2019-07-05 | 2021-09-24 | 北京大学 | 一种执行饱和寻址加载和存储操作的设备和方法 |
CN110674495A (zh) * | 2019-09-03 | 2020-01-10 | Xc5 香港有限公司 | 一种数组越界访问的检测方法、装置及设备 |
CN110674495B (zh) * | 2019-09-03 | 2021-07-09 | Xc5 香港有限公司 | 一种数组越界访问的检测方法、装置及设备 |
CN114647575A (zh) * | 2022-02-23 | 2022-06-21 | 南京邮电大学 | 一种基于高阶函数的c++过程间异常分析系统及方法 |
CN114647575B (zh) * | 2022-02-23 | 2024-05-10 | 南京邮电大学 | 一种基于高阶函数的c++过程间异常分析系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Meng et al. | Adaptive threshold non-Pareto elimination: Re-thinking machine learning for system level design space exploration on FPGAs | |
Ciancia et al. | An experimental spatio-temporal model checker | |
CN102063328B (zh) | 一种用于检测中断驱动型程序数据竞争的系统 | |
JP6550384B2 (ja) | ハイパー多項式コストなしでnpの問題を解決するための方法及びコンピューティング装置 | |
Luo et al. | Deadlock-free scheduling of flexible assembly systems based on Petri nets and local search | |
CN105912459A (zh) | 一种基于符号执行的数组越界检测方法 | |
US9823913B2 (en) | Method of adding local variables in place of global in JavaScript | |
US20120036138A1 (en) | Method and apparatus for design space exploration in high level synthesis | |
US9507576B2 (en) | Optimizing if statements in computer programming | |
Blas et al. | Routing structure over discrete event system specification: a DEVS adaptation to develop smart routing in simulation models | |
Szpyrka et al. | Formal description of Alvis language with α 0 system layer | |
US8904334B2 (en) | Footprint-based optimization performed simultaneously with other steps | |
CN115993991A (zh) | 一种业务决策方法、装置及设备 | |
Pisani et al. | Fog vs. cloud computing: should i stay or should i go? | |
CN101710303A (zh) | 基于流敏感上下文敏感指向图的内存泄漏检测方法 | |
CN107180168A (zh) | 文件加载、生成方法和装置,以及智能终端 | |
Allamigeon et al. | Stationary solutions of discrete and continuous Petri nets with priorities | |
Sabbaghi et al. | FSCT: A new fuzzy search strategy in concolic testing | |
US20180365354A1 (en) | Employing natural language processing to facilitate geospatial analysis | |
CN109409036A (zh) | 基于冗余代码的控制流混淆方法及装置、存储介质和终端 | |
Zietsch et al. | Identifying the potential of edge computing in factories through mixed reality | |
WO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
US10423543B2 (en) | Input/output response control setting device | |
Haj-Hussein et al. | Goal oriented execution for LOTOS. | |
Yatsenko | On Parameter-Driven Generation of Algorithm Schemes. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160831 |
|
RJ01 | Rejection of invention patent application after publication |