CN111443916B - 一种面向程序内存安全性验证工具的静态优化方法 - Google Patents

一种面向程序内存安全性验证工具的静态优化方法 Download PDF

Info

Publication number
CN111443916B
CN111443916B CN202010160648.0A CN202010160648A CN111443916B CN 111443916 B CN111443916 B CN 111443916B CN 202010160648 A CN202010160648 A CN 202010160648A CN 111443916 B CN111443916 B CN 111443916B
Authority
CN
China
Prior art keywords
pointer
category
risky
type
program
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
CN202010160648.0A
Other languages
English (en)
Other versions
CN111443916A (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.)
Nanjing University of Aeronautics and Astronautics
Original Assignee
Nanjing University of Aeronautics and Astronautics
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 Nanjing University of Aeronautics and Astronautics filed Critical Nanjing University of Aeronautics and Astronautics
Priority to CN202010160648.0A priority Critical patent/CN111443916B/zh
Publication of CN111443916A publication Critical patent/CN111443916A/zh
Application granted granted Critical
Publication of CN111443916B publication Critical patent/CN111443916B/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/3628Software debugging of optimised code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种面向程序内存安全性验证工具的静态优化方法,通过代码静态分析来识别并记录程序中所有指针的安全类别,使得内存安全性验证工具可以根据安全类别实现对验证过程的静态优化,从而消除不必要的内存安全检查,提高内存安全性验证工具的效率。相比于已有技术,本发明能够识别并记录程序中的安全指针和算术指针,使得程序内存安全性验证工具可以对这些指针不进行验证,或者使用较简单的验证算法,从而消除不必要的内存安全检查,提高内存安全性验证工具的效率。

Description

一种面向程序内存安全性验证工具的静态优化方法
技术领域
本发明属于计算机软件领域,特别是指计算机软件测试领域。
背景技术
软件在现代社会的日常生活中已经无处不在。人们使用安装了软件的电脑和手机获得新闻资讯、购买商品、进行社交沟通和休闲娱乐等。更重要的是,在航空、航天、国防、医疗、金融等行业中,软件也得到了广泛应用,而这些行业的安全关键软件的失效可能会给用户和社会带来巨大损失。然而,随着软件规模和复杂度的迅猛增长,软件失效变得越来越常见。因此,确保软件的可靠性已经成为软件开发过程的一个重要目标。在众多危害软件可靠性的程序错误中,内存错误始终是最常见、危害最大的程序错误之一,它可以导致数据腐败、安全漏洞和程序崩溃等致命后果。例如:阿丽亚娜5号火箭升空后的爆炸导致了近85亿美元损失,其原因是系统软件试图将一个64位的数字塞入16位的空间产生的内存溢出错误。因此,研发人员经常使用各种针对程序内存安全性的验证工具来检测和消除程序中的内存错误、验证程序的正确性,从而确保软件的可靠性。
程序内存安全性验证工具可以分为静态验证和动态验证两类。
静态验证工具通常不需要运行程序,而是通过代码类型检查、数据流分析等技术找出可能存在的错误。静态验证的优点是不需要部署软件,可以在软件开发的早期对代码进行分析、发现错误。缺点是存在状态空间爆炸问题,也就是说,在验证大规模程序时耗费的时间较长、占用的内存空间较多,甚至无法在合理的时间和空间内给出验证结果。而如果对程序模型进行随意的简化和抽象,那么会带来错误的误报和漏报,降低工具的实用性。
动态验证工具通过代码插桩技术在代码中插入用于错误检测的代码片段,从而在运行时实现对程序执行过程的分析和错误检测。动态验证的优点是考虑了程序实际运行环境等因素,理论上不存在误报和漏报。此外还支持对程序运行流程的控制,也就是说,当程序运行进入某个错误状态时,可以引导程序进入安全模式或者直接终止程序运行,避免程序的错误运行带来更大的损失或者严重的事故。缺点是插入的代码片段会耗费较多的计算资源和内存空间,导致整个程序的运行时负载,例如增加程序的运行时间、占用额外的内存空间。
现有的程序内存安全性验证工具对程序中所有的内存操作不加区分、进行同等复杂的验证,导致在验证大规模程序时耗费的时间长、占用的内存空间多、效率低下。然而,实际程序中大量的内存操作都是安全的(例如通过指针传递参数和间接访问变量),或者是基本安全的(例如只进行合理的指针算术运算)。而这些内存操作是不需要被验证的,或者只需要简单的验证算法即可得到结果。由此可见,现有的验证工具实施了许多不必要的、复杂的内存安全检查,极大地降低了验证工具的效率。
因此,有必要提供一种新的面向程序内存安全性验证工具的静态优化方法,用于消除不必要的内存安全检查,提高内存安全性验证工具的效率。
发明内容
为了解决上述背景技术提到的技术问题,本发明提出了一种面向程序内存安全性验证工具的静态优化方法。
为了实现上述技术目的,本发明的技术方案为:
一种面向程序内存安全性验证工具的静态优化方法,包括以下步骤:
(1)为程序代码中出现的每个指针类型添加相应的指针类别变量,用于表示程序对指针所指向的内存区域进行访问的安全程度;所述指针类别变量的取值包括:Safe、Arith和Risky,Safe代表安全,Arith代表算术,Risky代表危险;
(2)建立一个存储指针类别约束的表,用来记录所有针对指针类别的约束,遍历程序代码,为每一个含有指针的语句生成约束并添加到该表中;
(3)消除指针类别约束表中的重复约束;
(4)建立一个存储指针类别的表,用来记录所有指针对应的指针类别,该表的大小为步骤(1)中添加的指针类别变量的个数,初始内容为空,在后续步骤中逐一填充每个指针对应的指针类别;
(5)根据指针类别约束表求解出所有值为Risky的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Risky的约束;
(6)根据指针类别约束表求解出所有值为Arith的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Arith的约束;
(7)求解出所有值为Safe的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表;
(8)将指针类别表中各指针对应的指针类别提供给内存安全性验证工具,使得内存安全性验证工具能够根据指针类别对代码分析方法进行优化。
进一步地,在步骤(1)中,Safe表示程序对指针所指向的内存区域的所有访问都是安全的,不会出现内存错误;Arith表示程序对指针所指向的内存区域的访问存在通过指针算术运算的可能性,存在出现访问偏移量越界的可能性;Risky表示程序对指针所指向的内存区域的访问存在通过指针算术运算和不同类型转化的可能性,存在出现访问越界和类型不兼容的可能性。
进一步地,在步骤(2)和(4)中,建立的表为容器类数据结构,包括但不限于数组和链表。
进一步地,在步骤(2)中,生成约束的规则:
(a)指针算术运算:如果指针ti*qi pi被赋值为指针算术运算的结果,则该指针不是一个安全指针,即生成约束qi≠Safe;所述“ti*qi pi”表示指针pi的类型为ti*,类别为qi;
(b)不同类型转化:如果指针ti*qi pi被转化为指针tj*qj pj的类型,且ti和tj是不同的类型,则指针pi和指针pj都是危险指针,即生成约束qi=qj=Risky;所述“ti*qipi”表示指针pi的类型为ti*,类别为qi,所述“tj*qj pj”表示指针pj的类型为tj*,类别为qj;
(c)指针赋值:如果指针ti*qi pi被赋值给指针tj*qj pj,且ti和tj是相同的类型,则生成三个约束:
ti和tj中所有对应的指针类别都相同;
如果指针pj是一个Arith指针,则指针pi也是一个Arith指针,记作
Figure BDA0002405661020000041
Figure BDA0002405661020000042
如果指针pj是一个Risky指针,则指针pi也是一个Risky指针,如果指针pi是一个Risky指针,则指针pj也是一个Risky指针,记作
Figure BDA0002405661020000043
(d)指向指针的指针:如果指针ti*qj*qi pi是一个指向指针的指针,被指向的指针变量的类型为ti*,类别为qj,则生成约束:如果qi=Risky,则qj=Risky,记作
Figure BDA0002405661020000044
所述“ti*qj*qi pi”表示指针pi的类型为ti**,类别为qi,pi指向的指针变量的类型为ti*,类别为qj。
进一步地,在步骤(6)中,形如qi≠Safe的指针类别约束导致qi=Arith,再根据形如
Figure BDA0002405661020000045
的约束传递,求解出所有的Arith指针类别。
进一步地,在步骤(8)中,所述内存安全性验证工具为任意的程序静态或动态验证工具。
采用上述技术方案带来的有益效果:
本发明通过代码静态分析来识别并记录程序中所有指针的安全类别,使得内存安全性验证工具可以根据安全类别实现对验证过程的静态优化,从而消除不必要的内存安全检查,提高内存安全性验证工具的效率。本发明可以解决程序内存安全性验证工具的验证过程耗费的时间长、占用的内存空间多、效率低下等问题,具有良好的社会效益。
附图说明
图1是本发明的方法流程图。
具体实施方式
以下将结合附图,对本发明的技术方案进行详细说明。
如图1所示,本发明设计了一种面向程序内存安全性验证工具的静态优化方法,包括以下步骤:
步骤1:为程序代码中出现的每个指针类型添加相应的指针类别变量,用于表示程序对指针所指向的内存区域进行访问的安全程度;所述指针类别变量的取值包括:Safe、Arith和Risky,Safe代表安全,Arith代表算术,Risky代表危险;
步骤2:建立一个存储指针类别约束的表,用来记录所有针对指针类别的约束,遍历程序代码,为每一个含有指针的语句生成约束并添加到该表中;
步骤3:消除指针类别约束表中的重复约束;
步骤4:建立一个存储指针类别的表,用来记录所有指针对应的指针类别,该表的大小为步骤1中添加的指针类别变量的个数,初始内容为空,在后续步骤中逐一填充每个指针对应的指针类别;
步骤5:根据指针类别约束表求解出所有值为Risky的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Risky的约束;
步骤6:根据指针类别约束表求解出所有值为Arith的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Arith的约束;
步骤7:求解出所有值为Safe的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表;
步骤8:将指针类别表中各指针对应的指针类别提供给内存安全性验证工具,使得内存安全性验证工具能够根据指针类别对代码分析方法进行优化。
本实施例采用本发明方法来识别并记录一个C程序代码段中所有指针的安全类别,并提供给内存安全性验证工具对验证过程进行静态优化。本实施例采用的C程序代码段如下所示:
Figure BDA0002405661020000061
在本发明中,上述步骤1可以采用如下优选方案实现:
“Safe”表示程序对指针所指向的内存区域的所有访问都是安全的,不会出现内存错误;“Arith”表示程序对指针所指向的内存区域的访问可能通过指针算术运算,仅仅有可能出现访问偏移量越界;“Risky”表示程序对指针所指向的内存区域的访问可能通过指针算术运算和不同类型转化,有可能出现访问越界和类型不兼容。
在本实施例中,为代码添加9个指针类别变量:q0、q1、…、q8。以下代码以标注的形式描述了这些指针类别变量和指针类型之间的对应关系。例如:指针p2的类型为int**,类别为q2,p2所指向的指针的类型为int*,类别为q1
Figure BDA0002405661020000062
Figure BDA0002405661020000071
在本发明中,上述步骤2可以采用如下优选方案实现:
建立的指针类别约束表为容器类数据结构,例如数组和链表。
生成约束的规则包括:
(1)指针算术运算:如果指针ti*qi pi(指针pi的类型为ti*,类别为qi)被赋值为指针算术运算的结果,那么该指针不是一个安全指针,即生成约束qi≠Safe。例如:语句pi=pj+1中的指针pi被赋值为指针算术运算的结果,可以生成约束qi≠Safe。
(2)不同类型转化:如果指针ti*qi pi(指针pi的类型为ti*,类别为qi)被转化为指针tj*qj pj(指针pj的类型为tj*,类别为qj)的类型,且ti和tj是不同的类型,那么指针pi和指针pj都是危险指针,即生成约束qi=qj=Risky。例如:语句(tj*)pi中存在强制类型转化,而语句pj=pi中存在隐式类型转化,可以生成约束qi=qj=Risky。
(3)指针赋值:如果指针ti*qi pi(指针pi的类型为ti*,类别为qi)被赋值给指针tj*qj pj(指针pj的类型为tj*,类别为qj),且ti和tj是相同的类型,那么生成三个约束:ti和tj中所有对应的指针类别都相同;如果指针pj是一个Arith指针,那么指针pi也是一个Arith指针,记作
Figure BDA0002405661020000072
如果指针pj是一个Risky指针,那么指针pi也是一个Risky指针,如果指针pi是一个Risky指针,则指针pj也是一个Risky指针,记作
Figure BDA0002405661020000073
例如:语句pj=pi和语句pj=pi+10中都存在从指针pi到指针pj的指针赋值。
(4)指向指针的指针:如果指针ti*qj*qi pi(指针pi的类型为ti**,类别为qi)是一个指向指针的指针(pi指向的指针变量的类型为ti*,类别为qj),那么生成约束:如果qi=Risky,那么qj=Risky,记作
Figure BDA0002405661020000087
例如:定义ti**pi和定义struct{...,ti*pj,…}*pi中的指针pi都是指向指针的指针。
在本实施例中,遍历C程序代码后生成的约束包括:
程序第1行中存在指向指针的指针定义,因此添加约束:
Figure BDA0002405661020000088
Figure BDA0002405661020000089
程序第3行中存在指向指针的指针定义,因此添加约束:
Figure BDA00024056610200000810
Figure BDA00024056610200000811
程序第4行中存在指向指针的指针定义,因此添加约束:
Figure BDA00024056610200000812
Figure BDA00024056610200000813
程序第4行中指针p7被赋值为指针算术运算p2+10的结果,因此添加约束:q7≠Safe;
程序第4行中存在从指针p2到指针p7的指针赋值,因此添加约束:q1=q6、
Figure BDA0002405661020000081
Figure BDA0002405661020000082
程序第5行中存在从指针p2到指针p5的指针赋值,因此添加约束:q1=q4、
Figure BDA0002405661020000083
Figure BDA0002405661020000084
程序第5行中指针p5被赋值为指针算术运算p5++的结果,因此添加约束:q5≠Safe;
程序第6行中存在指针赋值*p5=*p7,因此添加约束:
Figure BDA0002405661020000085
Figure BDA0002405661020000086
程序第7行中存在不同类型指针之间的强制类型转化,因此添加约束:q6=Risky和q8=Risky。
程序第7行中存在从指针(double*)*p7到返回指针的指针赋值,因此添加约束:
Figure BDA0002405661020000091
Figure BDA0002405661020000092
因此,可以建立如下表1的指针类别约束表:
表1
Figure BDA0002405661020000093
在本实施例中,因为不存在重复约束,所以在步骤3中不需要改变指针类别约束表。
在本发明步骤4中,建立的指针类别表为容器类数据结构,例如数组和链表。在本实施例中,可以建立如下表2的指针类别表:
表2
q<sub>0</sub> q<sub>1</sub> q<sub>2</sub> q<sub>3</sub> q<sub>4</sub> q<sub>5</sub> q<sub>6</sub> q<sub>7</sub> q<sub>8</sub>
在本实施例中,步骤5的具体过程如下:
根据约束表中第14条,可以得出指针类别:q6=Risky;
根据约束表中第15条,可以得出指针类别:q8=Risky;
根据约束表中第5条和第14条,可以得出指针类别:q1=Risky;
根据约束表中第8条和q1=Risky,可以得出指针类别:q4=Risky;
根据约束表中第15条和第17条,可以得出指针类别:q0=Risky。
因此,经过本步骤得到如下表3的指针类别表:
表3
q<sub>0</sub> q<sub>1</sub> q<sub>2</sub> q<sub>3</sub> q<sub>4</sub> q<sub>5</sub> q<sub>6</sub> q<sub>7</sub> q<sub>8</sub>
Risky Risky Risky Risky Risky
通过删除指针类别约束表中用过的约束和关于Risky的约束,得到如下表4的约束表:
表4
Figure BDA0002405661020000101
在本发明步骤6中,在前面的步骤中已经求解出了所有的Risky指针类别,而剩余的指针类别都是Arith或Safe。因此,形如qi≠Safe的指针类别约束导致qi=Arith。再根据形如
Figure BDA0002405661020000111
的约束传递,可以求解出所有的Arith指针类别。
在本实施例中,步骤6的具体过程如下:
根据约束表中第4条,可以得出指针类别:q7=Arith;
根据约束表中第11条,可以得出指针类别:q5=Arith;
根据约束表中第9条和q5=Arith,可以得出指针类别:q2=Arith;
因此,经过本步骤得到如下表5的指针类别表:
表5
q<sub>0</sub> q<sub>1</sub> q<sub>2</sub> q<sub>3</sub> q<sub>4</sub> q<sub>5</sub> q<sub>6</sub> q<sub>7</sub> q<sub>8</sub>
Risky Risky Arith Risky Arith Risky Arith Risky
通过删除指针类别约束表中用过的约束和关于Arith的约束,得到一个空的约束表。
在本发明步骤7中,在前面的步骤中已经求解出了所有的Risky指针类别和Arith指针类别,因此剩余的指针类别都是Safe。
在本实施例中,剩余的指针类别q3的值被设置为Safe。因此,经过本步骤得到如下表6的指针类别表:
表6
q<sub>0</sub> q<sub>1</sub> q<sub>2</sub> q<sub>3</sub> q<sub>4</sub> q<sub>5</sub> q<sub>6</sub> q<sub>7</sub> q<sub>8</sub>
Risky Risky Arith Safe Risky Arith Risky Arith Risky
在本发明中,步骤8可以采用如下优选方案实现:
内存安全性验证工具可以是任意的程序静态或动态验证工具。
工具的主要优化方法包括:由于Safe类别的指针不涉及指针算术运算和不同类型转化,因此不需要对这些指针所指向的内存区域的访问进行验证;由于Arith类别的指针涉及指针算术运算,但不涉及不同类型转化,因此只需要对这些指针所指向的内存区域的访问进行中等级别的验证,例如访问偏移量检查等;由于Risky类别的指针涉及指针算术运算和不同类型转化,因此需要对这些指针所指向的内存区域的访问进行最高级别的验证,例如在动态分析中全面监控对Risky内存区域的访问,并进行访问边界检查和类型检查等。
在本实施例中,内存安全性验证工具不需要对指针p3所指向的内存区域的访问进行验证,但是需要对指针p2、p5和p7所指向的内存区域的访问进行中等级别的验证,对其他指针所指向的内存区域的访问进行最高级别的验证。
经过上述步骤的操作,即可实现通过代码静态分析来识别并记录程序中所有指针的安全类别,使得内存安全性验证工具可以根据安全类别实现对验证过程的静态优化,从而消除不必要的内存安全检查,提高内存安全性验证工具的效率。
以上所述仅是本发明的部分实施方式。应当指出,对于本领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干优化和改进,或者对其中部分技术特征进行等同替换,这些改进和替换也应视为本发明的保护范围。

Claims (6)

1.一种面向程序内存安全性验证工具的静态优化方法,其特征在于,包括以下步骤:
(1)为程序代码中出现的每个指针类型添加相应的指针类别变量,用于表示程序对指针所指向的内存区域进行访问的安全程度;所述指针类别变量的取值包括:Safe、Arith和Risky,Safe代表安全,Arith代表算术,Risky代表危险;
(2)建立一个存储指针类别约束的表,用来记录所有针对指针类别的约束,遍历程序代码,为每一个含有指针的语句生成约束并添加到该表中;
(3)消除指针类别约束表中的重复约束;
(4)建立一个存储指针类别的表,用来记录所有指针对应的指针类别,该表的大小为步骤(1)中添加的指针类别变量的个数,初始内容为空,在后续步骤中逐一填充每个指针对应的指针类别;
(5)根据指针类别约束表求解出所有值为Risky的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Risky的约束;
(6)根据指针类别约束表求解出所有值为Arith的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表中用过的约束和关于Arith的约束;
(7)求解出所有值为Safe的指针类别变量,并将结果存入指针类别表中,并删除指针类别约束表;
(8)将指针类别表中各指针对应的指针类别提供给内存安全性验证工具,使得内存安全性验证工具能够根据指针类别对代码分析方法进行优化。
2.根据权利要求1所述面向程序内存安全性验证工具的静态优化方法,其特征在于,在步骤(1)中,Safe表示程序对指针所指向的内存区域的所有访问都是安全的,不会出现内存错误;Arith表示程序对指针所指向的内存区域的访问存在通过指针算术运算的可能性,存在出现访问偏移量越界的可能性;Risky表示程序对指针所指向的内存区域的访问存在通过指针算术运算和不同类型转化的可能性,存在出现访问越界和类型不兼容的可能性。
3.根据权利要求1所述面向程序内存安全性验证工具的静态优化方法,其特征在于,在步骤(2)和(4)中,建立的表为容器类数据结构,包括数组和链表。
4.根据权利要求1所述面向程序内存安全性验证工具的静态优化方法,其特征在于,在步骤(2)中,生成约束的规则:
(a)指针算术运算:如果指针ti *qi pi被赋值为指针算术运算的结果,则该指针不是一个安全指针,即生成约束qi ≠ Safe;所述“ti *qi pi”表示指针pi的类型为ti*,类别为qi;
(b)不同类型转化:如果指针ti *qi pi被转化为指针tj *qj pj的类型,且ti和tj是不同的类型,则指针pi和指针pj都是危险指针,即生成约束qi = qj = Risky;所述“ti *qipi”表示指针pi的类型为ti*,类别为qi,所述“tj *qj pj”表示指针pj的类型为tj*,类别为qj;
(c)指针赋值:如果指针ti *qi pi被赋值给指针tj *qj pj,且ti和tj是相同的类型,则生成三个约束:
ti和tj中所有对应的指针类别都相同;
如果指针pj是一个Arith指针,则指针pi也是一个Arith指针,记作qj = Arith ⇒ qi= Arith;
如果指针pj是一个Risky指针,则指针pi也是一个Risky指针,如果指针pi是一个Risky指针,则指针pj也是一个Risky指针,记作qj = Risky ⇔ qi = Risky;
(d)指向指针的指针:如果指针ti *qj*qi pi是一个指向指针的指针,被指向的指针变量的类型为ti*,类别为qj,则生成约束:如果qi = Risky,则qj = Risky,记作qi = Risky⇒ qj = Risky;所述“ti *qj*qi pi”表示指针pi的类型为ti**,类别为qi,pi指向的指针变量的类型为ti*,类别为qj。
5.根据权利要求4所述面向程序内存安全性验证工具的静态优化方法,其特征在于,在步骤(6)中,qi ≠ Safe的指针类别约束导致qi = Arith,再根据qi = Arith ⇒ qj =Arith的约束传递,求解出所有的Arith指针类别。
6.根据权利要求1所述面向程序内存安全性验证工具的静态优化方法,其特征在于,在步骤(8)中,所述内存安全性验证工具为程序静态或动态验证工具。
CN202010160648.0A 2020-03-10 2020-03-10 一种面向程序内存安全性验证工具的静态优化方法 Active CN111443916B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010160648.0A CN111443916B (zh) 2020-03-10 2020-03-10 一种面向程序内存安全性验证工具的静态优化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010160648.0A CN111443916B (zh) 2020-03-10 2020-03-10 一种面向程序内存安全性验证工具的静态优化方法

Publications (2)

Publication Number Publication Date
CN111443916A CN111443916A (zh) 2020-07-24
CN111443916B true CN111443916B (zh) 2021-06-22

Family

ID=71627388

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010160648.0A Active CN111443916B (zh) 2020-03-10 2020-03-10 一种面向程序内存安全性验证工具的静态优化方法

Country Status (1)

Country Link
CN (1) CN111443916B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112463164B (zh) * 2020-12-14 2024-02-13 记忆科技(深圳)有限公司 SoC程序执行的显示定位方法、装置、计算机设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101571828A (zh) * 2009-06-11 2009-11-04 北京航空航天大学 基于约束分析和模型检验的代码安全漏洞检测方法
CN103914382A (zh) * 2014-03-25 2014-07-09 北京邮电大学 一种充分识别指针引用检测对象的方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法
US9401222B1 (en) * 2015-11-23 2016-07-26 International Business Machines Corporation Determining categories for memory fail conditions
CN108197035A (zh) * 2018-02-01 2018-06-22 江南大学 一种检测内存边界溢出错误的方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103778061B (zh) * 2014-01-17 2016-08-24 南京航空航天大学 数组越界错误的自动检测和校正方法
CN104732152B (zh) * 2015-04-07 2017-11-24 南京大学 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101571828A (zh) * 2009-06-11 2009-11-04 北京航空航天大学 基于约束分析和模型检验的代码安全漏洞检测方法
CN103914382A (zh) * 2014-03-25 2014-07-09 北京邮电大学 一种充分识别指针引用检测对象的方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法
US9401222B1 (en) * 2015-11-23 2016-07-26 International Business Machines Corporation Determining categories for memory fail conditions
CN108197035A (zh) * 2018-02-01 2018-06-22 江南大学 一种检测内存边界溢出错误的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
面向二进制程序的空指针解引用错误的检测方法;傅玉 等;《计算机学报》;20180331;第41卷(第03期);第574-587页 *

Also Published As

Publication number Publication date
CN111443916A (zh) 2020-07-24

Similar Documents

Publication Publication Date Title
US7849509B2 (en) Detection of security vulnerabilities in computer programs
Bisht et al. Waptec: whitebox analysis of web applications for parameter tampering exploit construction
CN104508672B (zh) 程序执行装置以及程序分析装置
CN110347598B (zh) 一种测试脚本生成方法、装置、服务器及存储介质
EP3217284B1 (en) Data structure abstraction for model checking
He et al. Sofi: Reflection-augmented fuzzing for javascript engines
US20220083668A1 (en) Method for discovering vulnerabilities of operating system access control mechanism based on model checkin
Ren et al. Making smart contract development more secure and easier
CN104965781A (zh) 一种生成测试用例的方法及装置
Fu et al. Investigating and improving log parsing in practice
CN111443916B (zh) 一种面向程序内存安全性验证工具的静态优化方法
KR102273135B1 (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
Fu et al. Buffer overflow exploit and defensive techniques
Wang et al. Characterizing and detecting bugs in wechat mini-programs
CN111736846A (zh) 一种面向动态分析的源代码插桩改进方法
Kawaguchi et al. Dsolve: Safety verification via liquid types
Milewicz et al. Runtime checking c programs
Yang et al. Silent compiler bug de-duplication via three-dimensional analysis
CN115458023A (zh) 一种ram区辐照效应的异常检测方法、存储介质及系统
US11023214B2 (en) System and method for eliminating runtime out-of-bounds errors and exceptions
Gava et al. RAT: A lightweight architecture independent system-level soft error mitigation technique
Wu et al. Safety requirements modeling based on RUCM
KR102468434B1 (ko) Ms excel 문서 포맷에서 dde 무해화를 위한 방법 및 장치
KR102494838B1 (ko) MS-CFB의 DocumentSummaryInformation 스트림에서 Link의 무해화를 위한 방법 및 장치
KR102494836B1 (ko) MS-DOC에서 Link의 무해화를 위한 방법 및 장치

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