CN116627826A - 检测内存越界程序的方法、装置、设备和存储介质 - Google Patents
检测内存越界程序的方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN116627826A CN116627826A CN202310621676.1A CN202310621676A CN116627826A CN 116627826 A CN116627826 A CN 116627826A CN 202310621676 A CN202310621676 A CN 202310621676A CN 116627826 A CN116627826 A CN 116627826A
- Authority
- CN
- China
- Prior art keywords
- function
- dangerous
- defect
- program
- functions
- 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
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000006870 function Effects 0.000 claims abstract description 463
- 230000007547 defect Effects 0.000 claims abstract description 210
- 230000002950 deficient Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 14
- 238000001514 detection method Methods 0.000 claims description 5
- 231100001261 hazardous Toxicity 0.000 claims 2
- 238000004458 analytical method Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
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)
- Stored Programmes (AREA)
Abstract
本申请提供一种检测内存越界程序的方法、装置、设备和存储介质,可应用于网络安全或金融领域,方法包括:基于待检测程序的入口函数生成待检测程序中多个函数(包括危险函数和非危险函数)的函数调用关系;根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定非危险函数的缺陷条件;根据非危险函数的缺陷条件检测非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。本方案通过分析函数调用关系和危险函数的缺陷条件,确定程序中非危险函数的缺陷状态,据此分析调用危险函数的待检测程序的内存越界情况,避免简单地将调用危险函数都识别为有内存越界风险,提高了准确度。
Description
技术领域
本发明涉及程序检测技术领域,特别涉及一种检测内存越界程序的方法、装置、设备和存储介质。
背景技术
在使用C语言编码过程中,内存越界缺陷在各个环节中均难以排查,而其带来的影响是巨大的。而目前对C语言的程序的内存越界风险的检测方法较为单一,一般是只要程序中调用了预设的危险函数(如strncpy()函数等),该程序就会被标记为存在内存越界风险。
显然,这种检测方式的准确度较低。因此目前亟需一种准确度更高的程序内存越界风险的检测方案。
发明内容
针对上述现有技术的缺点,本发明提供一种检测内存越界程序的方法、装置、设备和存储介质,以提供一种更准确地检测计算机程序是否有内存越界风险的方案。
本申请第一方面提供一种检测内存越界程序的方法,其特征在于,包括:
基于待检测程序的入口函数生成所述待检测程序中多个函数的函数调用关系;其中,所述待检测程序的函数包括危险函数和非危险函数;所述非危险函数为除所述危险函数以外的函数;
根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件;
根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,并根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况。
可选的,所述根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件,包括:
针对每一个所述非危险函数,根据所述非危险函数调用的危险函数的输入参数和缺陷条件,以及所述函数调用关系中所述非危险函数调用的其他非危险函数的缺陷条件,确定所述非危险函数的缺陷条件。
可选的,所述根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,包括:
针对每一个所述非危险函数,检测所述非危险函数用于调用其他函数的参数的参数值是否符合所述非危险函数的缺陷条件;
若所述参数值符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为有缺陷;
若所述参数值不符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为无缺陷。
可选的,所述根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况,包括:
若所述待检测程序中至少一个所述非危险函数的缺陷状态为有缺陷,确定所述待检测程序的内存越界情况为存在内存越界风险;
若所述待检测程序中每一个所述非危险函数的缺陷状态均为无缺陷,确定所述待检测程序的内存越界情况为不存在内存越界风险。
本申请第二方面提供一种检测内存越界程序的装置,包括:
生成单元,用于基于待检测程序的入口函数生成所述待检测程序中多个函数的函数调用关系;其中,所述待检测程序的函数包括危险函数和非危险函数;所述非危险函数为除所述危险函数以外的函数;
确定单元,用于根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件;
检测单元,用于根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,并根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况。
可选的,所述确定单元根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件时,具体用于:
针对每一个所述非危险函数,根据所述非危险函数调用的危险函数的输入参数和缺陷条件,以及所述函数调用关系中所述非危险函数调用的其他非危险函数的缺陷条件,确定所述非危险函数的缺陷条件。
可选的,所述检测单元根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态时,具体用于:
针对每一个所述非危险函数,检测所述非危险函数用于调用其他函数的参数的参数值是否符合所述非危险函数的缺陷条件;
若所述参数值符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为有缺陷;
若所述参数值不符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为无缺陷。
可选的,所述检测单元根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况时,具体用于:
若所述待检测程序中至少一个所述非危险函数的缺陷状态为有缺陷,确定所述待检测程序的内存越界情况为存在内存越界风险;
若所述待检测程序中每一个所述非危险函数的缺陷状态均为无缺陷,确定所述待检测程序的内存越界情况为不存在内存越界风险。
本申请第三方面提供一种电子设备,包括存储器和处理器;
其中,所述存储器用于存储计算机程序;
所述处理器用于执行所述计算机程序,所述计算机程序被执行时,具体用于实现本申请第一方面任意一项所提供的检测内存越界程序的方法。
本申请第四方面提供一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,具体用于实现本申请第一方面任意一项所提供的检测内存越界程序的方法。
本申请提供一种检测内存越界程序的方法、装置、设备和存储介质,基于待检测程序的入口函数生成待检测程序中多个函数的函数调用关系;其中,待检测程序的函数包括危险函数和非危险函数;非危险函数为除危险函数以外的函数;根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件;根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。本方案通过分析函数调用关系和危险函数的缺陷条件,确定程序中非危险函数的缺陷状态,据此分析调用危险函数的待检测程序的内存越界情况,避免简单地将调用危险函数都识别为有内存越界风险,提高了准确度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种函数调用关系示例图;
图2为本申请实施例提供的一种检测内存越界程序的方法的流程图;
图3为本申请实施例提供的一种检测内存越界程序的装置的结构示意图;
图4为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在C语言编码过程中,内存越界缺陷在各个环节中均难以排查,而其带来的影响是巨大的。虽然业界有相关的静态检查工具(如PCLINT),但是规则简单,只要是使用相关危险系统函数(如strncpy等)的代码均会被标出存在内存越界风险。开发人员根据被标出的代码进行具体场景分析,判断是否存在缺陷,实际中大部分风险是误报,不存在真实的缺陷,这样操作给开发人员带来额外的工作量和重复工作内容,甚至人为判断会存在误判的场景,对生产造成很大的影响。也就是说,目前无法自动化判断的场景是危险函数B(strncpy等)在被函数A使用时,其B函数指针变量的大小在A函数内无法明确,需依赖A函数参数变量,而A函数的参数变量可能需要层层递归解析调用函数才能获取。
本发明建立一种内存越界代码自动检测系统,通过遍历解析代码中函数的调用关系以及标注被调函数参数变量大小,对存在缺陷风险的函数进行打标,保存其引发缺陷的条件,最后通过函数调用关系反向递归判断程序是否是存在缺陷。
本发明具体包括如下模块:
函数调用关系分析模块:通过代码逻辑分析程序的函数调用关系,以及被调的自定义函数的参数变量大小。
函数缺陷分析模块:通过一定规则分析函数中是否正确的使用了危险函数,并且标注本函数存在缺陷的条件;通过函数调用关系,反向综合判断调用函数是否存在缺陷。
本发明建立一种内存越界代码自动检测系统,可以解决上述的问题,编码人员只需将程序代码导入到系统中,即可判断此程序是否存在内存越界,以及存在缺陷下的修改方案)。
示例性的,通过以下代码可以确定图1所示的函数调用关系:
D(char*D1)
{Strncpy(D1,m2[30],20);}
C(char*C1,char*C2)
{D(C1);Strncpy(C1,C2,strlen(C2));}
B(char*B1,char*B2)
{D(D1[30]);}
A(){B(B1[20],B2[30]);C(C1[40],C2[50]);}
以图1所示的函数调用关系为示例说明本发明的技术方案的实施过程。
系统根据客户输入的代码,检索出程序的入口(A函数)开始分析,解析出程序的函数调用关系以及每个被调函数参数的大小并记录,如A调用B且B1的大小=20,B2的大小=30;B调用D且D1的大小=30,A调用C且C1的大小=50,C2的大小=40;C调用D函数且D1的大小=C1的大小。
对每个函数进行调用时,对危险函数进行分析,生成缺陷条件。如C调用strncpy,那么C函数就会有一个缺陷条件,假设为C2>C1的大小等;D调用strncpy,那么D函数的缺陷条件为D1>20。
从调用关系的末梢反向推离整个链路上所有函数的缺陷条件。如D函数是整个关系的末梢,其缺陷条件为D1<20,结合D和C函数的关系,可以判断C函数的缺陷条件为C1<20或者C2>C1;结合D和B函数的关系,推到出B函数的缺陷条件D1=30<20,故B函数不存在缺陷;结合A和B函数关系,此调用关系不存在缺陷;结合A和C函数的关系,C1=50,C2=40,C1<20或者C2>C1满足,故此调用关系存在缺陷。
遍历调用关系,对每个调用关系的缺陷条件进行整合,产生最终的缺陷条件和缺陷状态。
开发人员根据最终的缺陷条件,对主函数A进行代码修改即可。
下面结合附图对本发明的技术方案进行进一步说明。
请参见图2,为本申请实施例提供的一种检测内存越界程序的方法的流程图,该方法可以包括如下步骤。
S201,基于待检测程序的入口函数生成待检测程序中多个函数的函数调用关系。
其中,待检测程序的函数包括危险函数和非危险函数;非危险函数为除危险函数以外的函数。
在步骤S201中,可以检测入口函数调用了哪些函数,然后再检测被入口函数调用的函数又调用了哪些函数,以此类推,最终获得待检测程序的函数调用关系。
示例性的,步骤S201中获得的函数调用关系可以用图1表示。图1中,函数A(即入口函数)调用函数B和C,函数B调用函数D,函数C调用函数D和函数Strncpy,函数D调用函数Strncpy。
危险函数是待检测程序所用的计算机语言中预先定义的若干个函数。示例性的,若待检测程序是用C语言编写的,则危险函数就包括strncpy,mencpy等。
S202,根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件。
可选的,根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件,包括:
针对每一个非危险函数,根据非危险函数调用的危险函数的输入参数和缺陷条件,以及函数调用关系中非危险函数调用的其他非危险函数的缺陷条件,确定非危险函数的缺陷条件。
计算机语言的相关标准中定义了每一个危险函数的缺陷条件,以Strncpy函数为例,Strncpy函数的调用方法为:Strncpy(m1,m2,m),Strncpy函数的缺陷条件包括m1<m,m2<m,m1<m2。
根据上述危险函数的缺陷条件,可以确定直接调用危险函数的非危险函数的缺陷条件。
以图1为例,函数D通过语句Strncpy(D1,m2[30],20)调用危险函数Strncpy,其中的D1就相当于上述调用方法的m1,20相当于调用方法的m,m2[30]表示将m2设定为30。根据上述语句中的输入参数,即D1,m2和20,可以确定函数D的缺陷条件为D1<20。
对于未直接调用危险函数的非危险函数,可以根据其调用的其他非危险函数的缺陷条件确定自身的缺陷条件。
仍以图1为例,图1中函数C调用了函数D和危险函数Strncpy。
其中,函数C调用危险函数Strncpy的语句为Strncpy(C1,C2,strlen(C2)),输入参数为C1,C2,strlen(C2),C1,C2,strlen(C2)依次相当于前述Strncpy函数的调用方法中的m1,m2,m,结合Strncpy函数的缺陷条件可以确定函数C的一个缺陷条件为C2>C1。
进一步的,函数C调用函数D的语句为D(C1),输入参数为C1,这里的C1相当于函数D中的D1,于是,结合上述函数D的缺陷条件,可以确定函数C的另一缺陷条件为C1<20。
同理,函数B仅调用函数D,且调用函数D的语句为D(D1[30]),D1[30]表示将D1赋值为30,结合前述函数D的缺陷条件,函数B的缺陷条件仍为D1<20。
最后,函数A分别调用函数B和函数C,其中调用函数B的语句为B(B1[20],B2[30]),B1[20]和B2[30]分别表示将B1和B赋值为20和30。
调用函数C的语句为C(C1[40],C2[50]),其中C1[50]和C2[40]表示将C1赋值为40,将C2赋值为50。
结合前述函数B和函数C的缺陷条件,可以确定函数A的缺陷条件为C2>C1,C1<20,D1<20。
S203,根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。
可选的,根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,包括:
针对每一个非危险函数,检测非危险函数用于调用其他函数的参数的参数值是否符合非危险函数的缺陷条件;
若参数值符合非危险函数的缺陷条件,确定非危险函数的缺陷状态为有缺陷;
若参数值不符合非危险函数的缺陷条件,确定非危险函数的缺陷状态为无缺陷。
当一个函数有多个缺陷条件时,若符合其中至少一个缺陷条件,则缺陷状态为有缺陷,若不符合每一个缺陷条件,则缺陷状态为无缺陷。
下面结合图1以及步骤S202中的语句示例进行说明。
函数A在调用函数B时,将B1和B赋值为20和30,函数B在调用函数D时将D1赋值为30,30大于20,因此函数A和函数B都不符合D1<20的缺陷条件,函数B没有其他缺陷条件,所以可以确定函数B的缺陷状态为无缺陷。
同时,函数D的缺陷条件为D1<20,则在待检测程序中D1函数B赋值为30(即参数值为30),故函数D也不符合缺陷条件,函数D的缺陷状态为无缺陷。
函数A在调用函数C时,将C1赋值为40,将C2赋值为50,不符合C1<20的缺陷条件,但是符合C2>C1的缺陷条件,所以确定函数A符合三个缺陷条件中的一个,确定函数A的缺陷状态为有缺陷。
同理函数C由于上述赋值,也符合C2>C1的缺陷条件,函数C的缺陷状态为有缺陷。
可选的,根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况,包括:
若待检测程序中至少一个非危险函数的缺陷状态为有缺陷,确定待检测程序的内存越界情况为存在内存越界风险;
若待检测程序中每一个非危险函数的缺陷状态均为无缺陷,确定待检测程序的内存越界情况为不存在内存越界风险。
结合上述示例,由于函数A和函数C有缺陷,所以确定图1所示的调用关系对应的待检测程序存在内存越界风险。
可选的,在确定待检测程序有内存越界风险后,可以输出风险提示,以提示开发人员对特定的非危险函数进行代码修改,以规避风险。
具体的,在确定待检测程序有内存越界风险后,可以先确定有缺陷的非危险函数具体符合哪些缺陷条件,然后识别符合的这些缺陷条件包含哪些参数,以及这些参数首次在哪个函数中被赋值,最后将首次对这些参数赋值的函数的函数名输出给开发人员,提示开发人员对该函数进行代码修改。
仍以图1为例,识别发现有缺陷的函数A和C都符合C2>C1的缺陷条件,并且根据前述调用语句,确定参数C2和C1均是在函数A中被首次赋值,于是输出函数A的函数名,即“函数A”,提示开发人员对函数A进行代码修改。
本申请提供一种检测内存越界程序的方法,基于待检测程序的入口函数生成待检测程序中多个函数的函数调用关系;其中,待检测程序的函数包括危险函数和非危险函数;非危险函数为除危险函数以外的函数;根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件;根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。本方案通过分析函数调用关系和危险函数的缺陷条件,确定程序中非危险函数的缺陷状态,据此分析调用危险函数的待检测程序的内存越界情况,避免简单地将调用危险函数都识别为有内存越界风险,提高了准确度。
根据本申请实施例提供的检测内存越界程序的方法,本申请实施例还提供一种检测内存越界程序的装置,请参见图3,该装置可以包括如下单元。
生成单元301,用于基于待检测程序的入口函数生成待检测程序中多个函数的函数调用关系。
其中,待检测程序的函数包括危险函数和非危险函数;非危险函数为除危险函数以外的函数。
确定单元302,用于根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件。
检测单元303,用于根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。
可选的,确定单元302根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件时,具体用于:
针对每一个非危险函数,根据非危险函数调用的危险函数的输入参数和缺陷条件,以及函数调用关系中非危险函数调用的其他非危险函数的缺陷条件,确定非危险函数的缺陷条件。
可选的,检测单元303根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态时,具体用于:
针对每一个非危险函数,检测非危险函数用于调用其他函数的参数的参数值是否符合非危险函数的缺陷条件;
若参数值符合非危险函数的缺陷条件,确定非危险函数的缺陷状态为有缺陷;
若参数值不符合非危险函数的缺陷条件,确定非危险函数的缺陷状态为无缺陷。
可选的,检测单元303根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况时,具体用于:
若待检测程序中至少一个非危险函数的缺陷状态为有缺陷,确定待检测程序的内存越界情况为存在内存越界风险;
若待检测程序中每一个非危险函数的缺陷状态均为无缺陷,确定待检测程序的内存越界情况为不存在内存越界风险。
本申请实施例提供的检测内存越界程序的装置,其具体工作原理可以参见本申请任一实施例提供的检测内存越界程序的方法中的相关步骤,此处不再赘述。
本申请提供一种检测内存越界程序的装置,生成单元301基于待检测程序的入口函数生成待检测程序中多个函数的函数调用关系;其中,待检测程序的函数包括危险函数和非危险函数;非危险函数为除危险函数以外的函数;确定单元302根据函数调用关系,被调用的危险函数的输入参数和预设的危险函数的缺陷条件,确定每一个非危险函数的缺陷条件;检测单元303根据非危险函数的缺陷条件检测每一个非危险函数的缺陷状态,并根据每一个非危险函数的缺陷状态检测出待检测程序的内存越界情况。本方案通过分析函数调用关系和危险函数的缺陷条件,确定程序中非危险函数的缺陷状态,据此分析调用危险函数的待检测程序的内存越界情况,避免简单地将调用危险函数都识别为有内存越界风险,提高了准确度。
本申请实施例还提供一种电子设备,请参见图4,包括存储器401和处理器402。
其中,存储器401用于存储计算机程序。
处理器402用于执行计算机程序,计算机程序被执行时,具体用于实现本申请任一实施例所提供的检测内存越界程序的方法。
本申请实施例还提供一种计算机存储介质,用于存储计算机程序,计算机程序被执行时,具体用于实现本申请任一实施例所提供的检测内存越界程序的方法。
需要说明的是,本发明提供的检测内存越界程序的方法、装置、设备和存储介质可用于网络安全领域或金融领域。上述仅为示例,并不对本发明提供的检测内存越界程序的方法、装置、设备和存储介质的应用领域进行限定。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种检测内存越界程序的方法,其特征在于,包括:
基于待检测程序的入口函数生成所述待检测程序中多个函数的函数调用关系;其中,所述待检测程序的函数包括危险函数和非危险函数;所述非危险函数为除所述危险函数以外的函数;
根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件;
根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,并根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况。
2.根据权利要求1所述的方法,其特征在于,所述根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件,包括:
针对每一个所述非危险函数,根据所述非危险函数调用的危险函数的输入参数和缺陷条件,以及所述函数调用关系中所述非危险函数调用的其他非危险函数的缺陷条件,确定所述非危险函数的缺陷条件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,包括:
针对每一个所述非危险函数,检测所述非危险函数用于调用其他函数的参数的参数值是否符合所述非危险函数的缺陷条件;
若所述参数值符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为有缺陷;
若所述参数值不符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为无缺陷。
4.根据权利要求3所述的方法,其特征在于,所述根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况,包括:
若所述待检测程序中至少一个所述非危险函数的缺陷状态为有缺陷,确定所述待检测程序的内存越界情况为存在内存越界风险;
若所述待检测程序中每一个所述非危险函数的缺陷状态均为无缺陷,确定所述待检测程序的内存越界情况为不存在内存越界风险。
5.一种检测内存越界程序的装置,其特征在于,包括:
生成单元,用于基于待检测程序的入口函数生成所述待检测程序中多个函数的函数调用关系;其中,所述待检测程序的函数包括危险函数和非危险函数;所述非危险函数为除所述危险函数以外的函数;
确定单元,用于根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件;
检测单元,用于根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态,并根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况。
6.根据权利要求5所述的装置,其特征在于,所述确定单元根据所述函数调用关系,被调用的所述危险函数的输入参数和预设的所述危险函数的缺陷条件,确定每一个所述非危险函数的缺陷条件时,具体用于:
针对每一个所述非危险函数,根据所述非危险函数调用的危险函数的输入参数和缺陷条件,以及所述函数调用关系中所述非危险函数调用的其他非危险函数的缺陷条件,确定所述非危险函数的缺陷条件。
7.根据权利要求6所述的装置,其特征在于,所述检测单元根据所述非危险函数的缺陷条件检测每一个所述非危险函数的缺陷状态时,具体用于:
针对每一个所述非危险函数,检测所述非危险函数用于调用其他函数的参数的参数值是否符合所述非危险函数的缺陷条件;
若所述参数值符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为有缺陷;
若所述参数值不符合所述非危险函数的缺陷条件,确定所述非危险函数的缺陷状态为无缺陷。
8.根据权利要求7所述的装置,其特征在于,所述检测单元根据每一个所述非危险函数的缺陷状态检测出所述待检测程序的内存越界情况时,具体用于:
若所述待检测程序中至少一个所述非危险函数的缺陷状态为有缺陷,确定所述待检测程序的内存越界情况为存在内存越界风险;
若所述待检测程序中每一个所述非危险函数的缺陷状态均为无缺陷,确定所述待检测程序的内存越界情况为不存在内存越界风险。
9.一种计算机存储介质,其特征在于,用于存储计算机程序,所述计算机程序被执行时,具体用于实现如权利要求1至4任意一项所述的检测内存越界程序的方法。
10.一种电子设备,其特征在于,包括存储器和处理器;
所述存储器用于存储计算机程序;
所述处理器用于执行所述计算机程序,具体用于实现如权利要求1至4任意一项所述的检测内存越界程序的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310621676.1A CN116627826A (zh) | 2023-05-30 | 2023-05-30 | 检测内存越界程序的方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310621676.1A CN116627826A (zh) | 2023-05-30 | 2023-05-30 | 检测内存越界程序的方法、装置、设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116627826A true CN116627826A (zh) | 2023-08-22 |
Family
ID=87596964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310621676.1A Pending CN116627826A (zh) | 2023-05-30 | 2023-05-30 | 检测内存越界程序的方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627826A (zh) |
-
2023
- 2023-05-30 CN CN202310621676.1A patent/CN116627826A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107657177B (zh) | 一种漏洞检测方法及装置 | |
CN105068925B (zh) | 软件安全缺陷发现系统 | |
CN112035359B (zh) | 程序测试方法、装置、电子设备及存储介质 | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
CN110852641A (zh) | 一种资产数据的监控方法、系统及相关装置 | |
CN112288079A (zh) | 图神经网络模型训练方法、软件缺陷检测方法及系统 | |
CN108804326A (zh) | 一种软件代码自动检测方法 | |
CN115952503B (zh) | 融合黑白灰安全检测技术的应用安全测试方法及系统 | |
Kanashiro et al. | Predicting software flaws with low complexity models based on static analysis data | |
CN116415258A (zh) | 漏洞检测方法、装置、设备、介质及程序产品 | |
CN115277229A (zh) | 一种网络安全态势感知方法及系统 | |
CN115391230A (zh) | 一种测试脚本生成、渗透测试方法、装置、设备及介质 | |
KR102418796B1 (ko) | 고장형태 영향분석 기반 고장 분석의 고장 모드 추천 시스템 | |
KR102399597B1 (ko) | 인공지능을 활용한 고장형태 영향분석 자동화 시스템 | |
CN111258562B (zh) | Java代码质量检查方法、装置、设备和存储介质 | |
CN112631944A (zh) | 基于抽象语法树的源码检测方法及装置、计算机存储介质 | |
CN116627826A (zh) | 检测内存越界程序的方法、装置、设备和存储介质 | |
CN115758389A (zh) | 漏洞处理结果校验方法、装置、电子设备及存储介质 | |
KR20180014978A (ko) | 전장용 소프트웨어 안전성 분석 방법 및 장치 | |
Ueda et al. | Automatically customizing static analysis tools to coding rules really followed by developers | |
CN115795488A (zh) | 代码检测系统及代码检测方法 | |
CN115499164A (zh) | 一种基于图神经网络的多特征融合区块链智能合约漏洞检测方法、装置、计算机及存储介质 | |
CN116016270A (zh) | 一种交换机测试管理方法、装置、电子设备和存储介质 | |
CN115794638A (zh) | 基于代码变更分析引擎的测试方法、系统及计算机设备 | |
KR102426581B1 (ko) | 전장용 소프트웨어 안전성 분석 방법 및 장치 |
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 |