CN111124921B - 内存越界的检测方法、装置、设备和存储介质 - Google Patents

内存越界的检测方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN111124921B
CN111124921B CN201911352770.1A CN201911352770A CN111124921B CN 111124921 B CN111124921 B CN 111124921B CN 201911352770 A CN201911352770 A CN 201911352770A CN 111124921 B CN111124921 B CN 111124921B
Authority
CN
China
Prior art keywords
target
memory
memory space
buffer area
instruction
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
CN201911352770.1A
Other languages
English (en)
Other versions
CN111124921A (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.)
Douyin Vision Co Ltd
Original Assignee
Douyin Vision 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 Douyin Vision Co Ltd filed Critical Douyin Vision Co Ltd
Priority to CN201911352770.1A priority Critical patent/CN111124921B/zh
Publication of CN111124921A publication Critical patent/CN111124921A/zh
Application granted granted Critical
Publication of CN111124921B publication Critical patent/CN111124921B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/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/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime

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)
  • Storage Device Security (AREA)

Abstract

本申请涉及一种内存越界的检测方法、装置、设备和存储介质。该方法包括:检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区;调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区;基于检测结果确定是否存在内存越界问题。采用本方法能够。如此,能够有效检测内存越界的问题,为避免发生内存越界而导致程序崩溃奠定了基础。

Description

内存越界的检测方法、装置、设备和存储介质
技术领域
本申请涉及内存处理技术领域,特别是涉及一种内存越界的检测方法、装置、设备和存储介质。
背景技术
通过C/C++语言编写的高级语言代码常会基于需求声明并使用内存变量,在使用的过程中如果出现异常状态,就会发生内存溢出的越界情况,一旦出现此情况就会导致程序异常甚至崩溃,这对程序开发者以及应用而言,都是一个缺陷和潜在的问题。
发明内容
为解决上述问题,本发明提出了一种内存越界的检测方法、装置、设备和存储介质,能够有效检测内存越界的问题,为避免发生内存越界而导致程序崩溃奠定了基础。
第一方面,本申请实施例提供一种内存越界的检测方法,该方法包括:
检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区;
调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区;
基于检测结果确定是否存在内存越界问题。
这样,由于目标内存空间的前后两端设置有处于不可访问状态的目标缓冲区,换言之,本申请实施例所述目标内存空间比目标写入指令运行所占用的实际内存空间多,即多出额外设置的目标缓冲区,且所述目标缓冲区处于实际内存空间的前后两端,如此,便于基于检测接口来检测目标写入指令的运行过程中是否存在占用目标缓冲区的内存越界问题,进而为有效检测出内存越界问题奠定了基础,同时,为避免发生内存越界而导致程序崩溃奠定了基础。
在一实施例中,所述利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区,包括:
利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的目标缓冲区的状态值。
这里,实际应用中,处于不可访问状态的目标缓冲区的状态值设置为预设的固定值,因此,可以通过检测接口检测目标写入指令的运行过程是否存在修改所述目标内存空间所对应的目标缓冲区的状态值的修改操作来判断是否存在内存越界问题,如此,通过管理目标缓冲区的状态值即可有效检测检测内存越界问题,且在内存越界事件发生的时刻即可检测出,因此,该检测方式检测效率高,性能代价低,为工程化应用奠定了基础。
在一实施例中,所述方法还包括:确定检测结果表征检测到存在占用所述目标内存空间所对应的目标缓冲区的内存越界问题,至少基于所述目标写入指令所对应的目标内存空间生成越界信息,并发布所述越界信息。
在一实施例中,当检测结果确定出存在内存越界问题,则生成并发布越界信息,如此,最大化避免了发生内存越界而导致程序崩溃的问题,同时,也避免了程序发布后发生越界问题而导致程序崩溃的情况,进而为提升程序的稳定性以及提升用户体验奠定了基础。
在一实施例中,在检测到访问内存空间的目标写入指令之前,所述方法还包括:
将函数访问函数栈上内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征函数栈上的内存空间;和/或,
将访问全局作用域的内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征全局作用域所针对的全局内存空间。
在一实施例中,在调用所述目标写入指令所对应的检测接口之前,所述方法还包括:
在所述目标写入指令中设置检测接口,其中,所述检测接口能够检测所述目标写入指令的运行过程中是否存在占用目标内存空间所对应的目标缓冲区的内存越界问题。
在一实施例中,所述方法还包括:检测到函数使用函数栈上的内存空间,在函数栈上函数对应的内存空间的前后端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的内存空间作为函数对应的目标内存空间,其中,所述目标缓冲区处于不可访问状态;
或者,
检测到使用全局作用域的全局内存空间,在全局作用域的全局内存空间的前后两端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的全局内存空间作为全局作用域对应的目标内存空间;其中,所述目标缓冲区处于不可访问状态。
这里,为避免发生内存越界而导致程序崩溃后再去解决问题,本申请实施例在程序编译期间即对特定内存空间(即函数栈上函数对应的内存空间,或者,全局作用域对应的全局内存空间)进行处理,以在特定内存空间的前后端额外增加内存缓冲区(也即目标缓冲区),该额外设置的目标缓冲区处于不可访问状态,如此,为后续提高检测效率,有效避免发生内存越界而导致程序崩溃的问题奠定了基础。
第二方面,本申请实施例提供一种内存越界的检测装置,所述装置包括:
检测单元,用于检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区;
处理单元,用于调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区;基于检测结果确定是否存在内存越界问题。
在一实施例中,处理单元,还用于利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的目标缓冲区的状态值。
在一实施例中,处理单元,还用于确定检测结果表征检测到存在占用所述目标内存空间所对应的目标缓冲区的内存越界问题,至少基于所述目标写入指令所对应的目标内存空间生成越界信息,并发布所述越界信息。
在一实施例中,处理单元,还用于:
将函数访问函数栈上内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征函数栈上的内存空间;和/或,
将访问全局作用域的内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征全局作用域所针对的全局内存空间。
在一实施例中,处理单元,还用于在所述目标写入指令中设置检测接口,其中,所述检测接口能够检测所述目标写入指令的运行过程中是否存在占用目标内存空间所对应的目标缓冲区的内存越界问题。
在一实施例中,处理单元,还用于:
检测到函数使用函数栈上的内存空间,在函数栈上函数对应的内存空间的前后端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的内存空间作为函数对应的目标内存空间,其中,所述目标缓冲区处于不可访问状态;
或者,
检测到使用全局作用域的全局内存空间,在全局作用域的全局内存空间的前后两端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的全局内存空间作为全局作用域对应的目标内存空间;其中,所述目标缓冲区处于不可访问状态。
第三方面,本申请实施例提供一种内存越界的检测设备,包括:
一个或多个处理器;
与所述一个或多个处理器通信连接的存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序被配置为执行以上所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现以上所述的方法。
这样,本发明实施例所述的内存越界的检测方法、装置、设备和存储介质,由于目标内存空间的前后两端设置有处于不可访问状态的目标缓冲区,换言之,本申请实施例所述目标内存空间比目标写入指令运行所占用的实际内存空间多,即多出额外设置的目标缓冲区,且所述目标缓冲区处于实际内存空间的前后两端,如此,便于基于检测接口来检测目标写入指令的运行过程中是否存在占用目标缓冲区的内存越界问题,进而为有效检测出内存越界问题奠定了基础,同时,为避免发生内存越界而导致程序崩溃奠定了基础。
附图说明
图1为本发明实施例内存越界的检测方法的实现流程示意图;
图2为本申请实施例内存越界的检测方法在一具体应用场景的示意图一;
图3为本申请实施例内存越界的检测方法在一具体应用场景的示意图二;
图4为本发明实施例内存越界的检测装置的结构示意图;
图5本发明实施例内存越界的检测设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在本申请的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
通过C/C++语言编写的高级语言代码常会基于需求声明并使用内存变量,如下场景:
场景一:通过C/C++语言编写的高级语言代码会在函数调用栈上声明并使用栈上的内存变量,进而访问内存空间,在使用的过程中如果出现异常状态,就会发生栈上内存溢出的越界情况,一旦越界就会导致函数栈上保存的上一级函数中的寄存器数据被异常修改,从而导致返回上一级函数时发生程序崩溃。
场景二:通过C/C++语言编写的高级语言代码会在全局作用域中声明并使用全局内存变量,进而访问内存空间,在使用的过程中如果出现异常状态,就会发生全局内存溢出的越界情况,一旦越界就会导致全局内存以及代码段被异常修改,从而导致程序崩溃。
上述场景出现的技术问题,对程序开发者以及应用而言,都是一个缺陷和潜在的问题;基于此,本申请实施例提供了一种内存越界的检测方法、装置、设备和存储介质;具体地,图1为本发明实施例内存越界的检测方法的实现流程示意图,如图1所示,所述方法包括:
步骤101:检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区。
本实施例中,所述目标内存空间比目标写入指令运行所占用的实际内存空间多,即多出额外设置的目标缓冲区,且所述目标缓冲区处于实际内存空间的前后两端,这样,便可通过检测目标写入指令的运行过程中是否会占用目标缓冲区来确定是否存在内存越界问题;这里,由于目标内存空间大于目标写入指令运行过程中所占用的实际内存空间,所以,能够最大化避免发生内存越界而导致程序崩溃的问题,而且,能够在内存越界发生的初始阶段检测出,所以,进一步为避免发生内存越界而导致程序崩溃提供了技术保证,同时,也为提升程序的稳定性以及提升用户体验奠定了基础。
在一具体示例中,所述目标写入指令可以具体为存储指令(store指令),或加载指令(load指令)。进一步地,实际应用中,所述目标写入指令可以具体为如下场景下的写入指令;比如,在检测到访问内存空间的目标写入指令之前,可以采用如下方式来确定目标写入指令,具体地:
方式一:将函数访问函数栈上内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征函数栈上的内存空间;也就是说,目标写入指令为函数访问函数栈上内存空间所对应的写入指令。
方式二:将访问全局作用域的内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征全局作用域所针对的全局内存空间;也就是说,目标写入指令为访问全局作用域的内存空间所对应的写入指令。
实际应用中,目标写入指令可以为上述两种方式所确定出的任一指令。
在一具体示例中,为避免发生内存越界而导致程序崩溃后再去解决问题,在程序编译期间即对特定内存空间进行处理,具体地,可以采用如下方式进行处理:
方式一:检测到函数使用函数栈上的内存空间,在函数栈上函数对应的内存空间的前后端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的内存空间作为函数对应的目标内存空间,其中,所述目标缓冲区处于不可访问状态;相应地,此时,将函数使用函数栈上目标内存空间的写入指令作为目标写入指令,所述目标写入指令所对应的内存空间即为目标内存空间。
方式二:检测到使用全局作用域的全局内存空间,在全局作用域的全局内存空间的前后两端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的全局内存空间作为全局作用域对应的目标内存空间;其中,所述目标缓冲区处于不可访问状态;相应地,此时,将使用全局作用域的目标内存空间的写入指令作为目标写入指令,所述目标写入指令所对应的内存空间即为目标内存空间。
实际应用中,目标内存空间的形成方式可以采用上述两种方式中的任意一种。
在一具体示例中,为最大化避免发生内存越界而导致程序崩溃的问题,本申请实施例可以在调用所述目标写入指令所对应的检测接口之前,在所述目标写入指令中设置检测接口,如此,利用所述检测接口检测所述目标写入指令的运行过程中是否存在占用目标内存空间所对应的目标缓冲区的内存越界问题。
步骤102:调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区。
实际应用中,处于不可访问状态的目标缓冲区的状态值设置为预设的固定值,因此,可以通过检测接口检测目标写入指令的运行过程是否存在修改所述目标内存空间所对应的目标缓冲区的状态值的修改操作来判断是否存在内存越界问题,具体地,利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的至少一个目标缓冲区的状态值,如此,通过管理目标缓冲区的状态值即可有效检测检测内存越界问题,且在内存越界事件发生的时刻即可检测出,因此,该检测方式检测效率高,性能代价低,为工程化应用奠定了基础。
步骤103:基于检测结果确定是否存在内存越界问题。
实际应用中,当检测结果表征所述目标写入指令的运行过程中存在占用所述目标内存空间所对应的目标缓冲区的情况,则确定存在内存越界问题;而当检测结果表征所述目标写入指令的运行过程中不存在占用所述目标内存空间所对应的目标缓冲区的情况,则确定不存在内存越界问题。进一步地,为及时通知技术人员,及时解决越界问题,本申请实施例中,在确定检测结果表征检测到存在占用所述目标内存空间所对应的目标缓冲区的内存越界问题后,还会至少基于所述目标写入指令所对应的目标内存空间生成越界信息,并发布所述越界信息,比如,越界信息至少包括:函数栈的特征信息,及函数栈上发生越界的函数的特征信息;或者,全局作用域的特征信息,全局内存空间中发生越界问题的特征信息,等能够定位到越界问题发生位置的相关信息,如此,便于技术基于越界信息对越界问题进行修正,进而避免程序崩溃。
这样,由于目标内存空间的前后两端设置有处于不可访问状态的目标缓冲区,换言之,本申请实施例所述目标内存空间比目标写入指令运行所占用的实际内存空间多,即多出额外设置的目标缓冲区,且所述目标缓冲区处于实际内存空间的前后两端,如此,便于基于检测接口来检测目标写入指令的运行过程中是否存在占用目标缓冲区的内存越界问题,进而为有效检测出内存越界问题奠定了基础,同时,为避免发生内存越界而导致程序崩溃奠定了基础。
以下结合具体应用场景对本发明实施例做进一步详细说明;具体地,
场景一,针对函数栈上内存越界问题,为解决该问题,在程序编译时在函数栈上的内存变量(也即内存空间)前后两端添加内存缓冲区(也即以上所述的目标缓冲区),并添加记录内存缓冲区的状态的管理块信息(用于管理内存缓冲区的状态值),一旦在程序代码运行时出现访问内存缓冲区的越界问题,就能够及时被发现,且该过程是在程序代码开发期间发现的,如此,便可在程序开发期间解决越界问题,避免程序代码发布后发生崩溃。
具体地,在编译器中增加专门的针对函数栈的内存处理模块,并利用所述内存处理模块在编译每一个函数时均对函数中声明使用的函数栈上内存变量进行处理,以在函数栈上的内存变量的前后两端增加额外的内存缓冲区,并增加设置内存缓冲区状态(也即内存缓冲区的状态值)的额外代码;同时,对每一个操作栈上内存的写入指令(load指令,和/或,store指令)进行处理,以在前面增加额外的检测代码(即检测接口),一旦程序运行中发生函数栈上内存越界,就会修改额外设置的内存缓冲区的状态值,由于额外设置的内存缓冲区已经被设置为特殊的不可访问状态值,因此,当存在修改额外设置的内存缓冲区的状态值的情况,就会被预先在编译时添加的检测代码所发现,内存越界问题就会被发现,并将内存越界的越界信息提供出来,如此,程序开发者便可基于越界信息对越界问题进行修正,从而避免问题发布后在用户终端上发生崩溃。
具体步骤,如图2所示,编译程序源码,发现函数中有使用函数栈上的内存变量,在函数栈上的内存变量的前后端额外添加内存缓冲区,设置内存缓冲区为不可修改状态,为针对函数的每一个访问内存空间的load/store指令添加检测代码;进一步地,运行程序,当执行load/store指令时,调用检测代码,若发生内存越界,就会需要改变内存缓冲区的状态值,也即检测代码会判断写入的地址是否在内存缓冲区,若在,则存在内存越界,否则,不存在内存越界;当存在内存越界时,打印具体的越界信息,程序开发者会基于越界信息修复内存越界问题,修复完毕后,程序正常发布或执行。
这样,利用本申请实施例的检测方法能够在程序开发和测试阶段提前发现并解决函数栈上内存越界的问题,因此,避免了程序发布后发生内存越界并导致程序崩溃的问题,提升了程序的稳定性,同时也提升了基础用户体验。
场景二:针对全局作用域上的全局内存越界问题,为解决该问题,在程序编译时在全局作用域的内存变量(也即内存空间)前后两端添加内存缓冲区(也即以上所述的目标缓冲区),并添加记录内存缓冲区的状态的管理块信息(用于管理内存缓冲区的状态值),一旦在程序代码运行时出现访问内存缓冲区的越界问题,就能够及时被发现,且该过程是在程序代码开发期间发现的,如此,便可在程序开发期间解决越界问题,避免程序代码发布后发生崩溃。
具体地,在编译器中增加专门的针对全局作用域的内存处理模块,并利用所述内存处理模块在编译每一个源码文件时都对全局作用域中声明使用的全局内存变量进行处理,以在全局内存变量(也即全局内存空间)的前后两端增加额外的内存缓冲区,并增加设置内存缓冲区状态(也即内存缓冲区的状态值)的额外代码;同时,对每一个操作全局内存的写入指令(load指令,和/或,store指令)进行处理,以在前面增加额外的检测代码(即检测接口),一旦程序运行中发生内存越界,就会修改额外设置的内存缓冲区的状态值,由于额外设置的内存缓冲区已经被设置为特殊的不可访问状态值,因此,当存在修改额外设置的内存缓冲区的状态值的情况,就会被预先在编译时添加的检测代码所发现,内存越界问题就会被发现,并将越界的具体信息提供出来,如此,程序开发者便可基于越界信息对越界问题进行修正,从而避免问题发布后在用户终端上发生崩溃。
具体步骤,如图3所示,编译程序源码,发现源码中有使用全局作用域的全局内存变量,在全局内存变量的前后两端额外添加内存缓冲区,设置内存缓冲区为不可修改状态,为每一个访问内存的load/store指令添加检测代码;进一步地,运行程序,当执行load/store指令时,调用检测代码,若发生内存越界,就会需要改变内存缓冲区的状态值,也即检测代码会判断写入的地址是否在内存缓冲区,若在,则存在内存越界,否则,不存在内存越界;当存在内存越界时,打印具体的越界信息,程序开发者会基于越界信息修复内存越界问题,修复完毕后,程序正常发布或执行。
这样,利用本申请实施例的检测方法能够在程序开发和测试阶段提前发现并解决全局内存越界的问题,因此,避免了程序发布后发生内存越界并导致程序崩溃的问题,提升了程序的稳定性,同时也提升了基础用户体验。
本申请实施例还提供了一种内存越界的检测装置,如图4所示,所述装置包括:
检测单元41,用于检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区;
处理单元42,用于调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区;基于检测结果确定是否存在内存越界问题。
在一实施例中,处理单元42,还用于利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的目标缓冲区的状态值。
在一实施例中,处理单元42,还用于确定检测结果表征检测到存在占用所述目标内存空间所对应的目标缓冲区的内存越界问题,至少基于所述目标写入指令所对应的目标内存空间生成越界信息,并发布所述越界信息。
在一实施例中,处理单元42,还用于:
将函数访问函数栈上内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征函数栈上的内存空间;和/或,
将访问全局作用域的内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征全局作用域所针对的全局内存空间。
在一实施例中,处理单元42,还用于在所述目标写入指令中设置检测接口,其中,所述检测接口能够检测所述目标写入指令的运行过程中是否存在占用目标内存空间所对应的目标缓冲区的内存越界问题。
在一实施例中,处理单元42,还用于:
检测到函数使用函数栈上的内存空间,在函数栈上函数对应的内存空间的前后端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的内存空间作为函数对应的目标内存空间,其中,所述目标缓冲区处于不可访问状态;
或者,
检测到使用全局作用域的全局内存空间,在全局作用域的全局内存空间的前后两端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的全局内存空间作为全局作用域对应的目标内存空间;其中,所述目标缓冲区处于不可访问状态。
这里需要指出的是:以上装置实施例项的描述,与上述方法描述是类似的,具有同方法实施例相同的有益效果,因此不做赘述。对于本发明装置实施例中未披露的技术细节,本领域的技术人员请参照本发明方法实施例的描述而理解,为节约篇幅,这里不再赘述。
本申请实施例还提供了一种内存越界的检测设备,包括:一个或多个处理器;与所述一个或多个处理器通信连接的存储器;一个或多个应用程序;其中,所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序被配置为执行以上所述的方法。
在一具体示例中,本申请实施例所述的检测设备可具体为如图5所示的结构,所述检测设备至少包括处理器51、存储介质52以及至少一个外部通信接口53;所述处理器51、存储介质52以及外部通信接口53均通过总线54连接。所述处理器51可为微处理器、中央处理器、数字信号处理器或可编程逻辑阵列等具有处理功能的电子元器件。所述存储介质中存储有计算机可执行代码,所述计算机可执行代码能够执行以上任一实施例所述的方法。在实际应用中,所述检测单元41以及处理单元42均可以通过所述处理器51实现。
这里需要指出的是:以上检测设备实施例项的描述,与上述方法描述是类似的,具有同方法实施例相同的有益效果,因此不做赘述。对于本发明检测设备实施例中未披露的技术细节,本领域的技术人员请参照本发明方法实施例的描述而理解,为节约篇幅,这里不再赘述。
本申请实施例还提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现以上所述的方法。
这里,计算机可读存储介质可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读存储介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
上述所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

Claims (8)

1.一种内存越界的检测方法,其特征在于,所述方法包括:
检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区,所述目标缓冲区处于不可访问状态是指所述目标缓冲区的状态值被设置为不可访问状态值;在所述目标写入指令为函数访问函数栈上内存空间的写入指令的情况下,所述目标缓冲区为在编译所述函数时,对所述函数中声明使用的函数栈上内存变量的前后两端增加的缓冲区,并增加用于设置所述内存缓冲区的状态值的代码;在所述目标写入指令为访问全局作用域的内存空间的写入指令的情况下,所述目标缓冲区为在编译源码文件时对所述全局作用域中声明使用的全局内存变量的前后两端增加的内存缓冲区,并增加用于设置所述内存缓冲区的状态值的代码;
调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区,所述检测接口为在编译时在所述目标写入指令前面增加的检测代码;
基于检测结果确定是否存在内存越界问题;
所述利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区,包括:
利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的目标缓冲区的状态值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定检测结果表征检测到存在占用所述目标内存空间所对应的目标缓冲区的内存越界问题,至少基于所述目标写入指令所对应的目标内存空间生成越界信息,并发布所述越界信息。
3.根据权利要求1所述的方法,其特征在于,在检测到访问内存空间的目标写入指令之前,所述方法还包括:
将函数访问函数栈上内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征函数栈上的内存空间;和/或,
将访问全局作用域的内存空间的写入指令作为目标写入指令,其中,所述目标写入指令对应的目标内存空间表征全局作用域所针对的全局内存空间。
4.根据权利要求1或3所述的方法,其特征在于,在调用所述目标写入指令所对应的检测接口之前,所述方法还包括:
在所述目标写入指令中设置检测接口,其中,所述检测接口能够检测所述目标写入指令的运行过程中是否存在占用目标内存空间所对应的目标缓冲区的内存越界问题。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
检测到函数使用函数栈上的内存空间,在函数栈上函数对应的内存空间的前后端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的内存空间作为函数对应的目标内存空间,其中,所述目标缓冲区处于不可访问状态;
或者,
检测到使用全局作用域的全局内存空间,在全局作用域的全局内存空间的前后两端分别设置额外的目标缓冲区后,将包含有额外的目标缓冲区的全局内存空间作为全局作用域对应的目标内存空间;其中,所述目标缓冲区处于不可访问状态。
6.一种内存越界的检测装置,其特征在于,所述装置包括:
检测单元,用于检测到访问内存空间的目标写入指令,确定出所述目标写入指令对应的目标内存空间;其中,所述目标内存空间的前后两端均设置有处于不可访问状态的目标缓冲区,所述目标缓冲区处于不可访问状态是指所述目标缓冲区的状态值被设置为不可访问状态值;在所述目标写入指令为函数访问函数栈上内存空间的写入指令的情况下,所述目标缓冲区为在编译所述函数时,对所述函数中声明使用的函数栈上内存变量的前后两端增加的缓冲区,并增加用于设置所述内存缓冲区的状态值的代码;在所述目标写入指令为访问全局作用域的内存空间的写入指令的情况下,所述目标缓冲区为在编译源码文件时对所述全局作用域中声明使用的全局内存变量的前后两端增加的内存缓冲区,并增加用于设置所述内存缓冲区的状态值的代码;
处理单元,用于调用所述目标写入指令所对应的检测接口,利用所述检测接口检测所述目标写入指令的运行过程是否占用所述目标内存空间所对应的目标缓冲区,所述检测接口为在编译时在所述目标写入指令前面增加的检测代码;基于检测结果确定是否存在内存越界问题;
所述处理单元,还用于利用所述检测接口检测所述目标写入指令的运行过程是否修改所述目标内存空间所对应的目标缓冲区的状态值。
7.一种内存越界的检测设备,其特征在于,包括:
一个或多个处理器;
与所述一个或多个处理器通信连接的存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序被配置为执行权利要求1至5任一项所述的方法。
8.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任一项所述的方法。
CN201911352770.1A 2019-12-25 2019-12-25 内存越界的检测方法、装置、设备和存储介质 Active CN111124921B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911352770.1A CN111124921B (zh) 2019-12-25 2019-12-25 内存越界的检测方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911352770.1A CN111124921B (zh) 2019-12-25 2019-12-25 内存越界的检测方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN111124921A CN111124921A (zh) 2020-05-08
CN111124921B true CN111124921B (zh) 2023-09-26

Family

ID=70502471

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911352770.1A Active CN111124921B (zh) 2019-12-25 2019-12-25 内存越界的检测方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN111124921B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112667300A (zh) * 2020-12-30 2021-04-16 珠海亿智电子科技有限公司 基于多处理器系统的处理器数据访问方法及管理装置
CN113672237B (zh) * 2021-09-03 2022-03-11 支付宝(杭州)信息技术有限公司 防内存越界的程序编译方法及装置
CN115373964B (zh) * 2022-10-24 2023-01-20 北京智芯微电子科技有限公司 内存越界检测方法、装置、设备及介质
CN117093472A (zh) * 2023-07-12 2023-11-21 荣耀终端有限公司 一种内存操作的处理方法、设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101110042A (zh) * 2006-07-20 2008-01-23 中兴通讯股份有限公司 一种检测内存访问越界的方法
CN101154180A (zh) * 2006-09-29 2008-04-02 大唐移动通信设备有限公司 一种任务栈溢出的监测方法
CN101520754A (zh) * 2009-03-24 2009-09-02 中兴通讯股份有限公司 内存越界访问的定位方法及装置
CN101561775A (zh) * 2009-05-12 2009-10-21 华为技术有限公司 内存监控方法和装置
CN101599046A (zh) * 2009-06-26 2009-12-09 深圳市茁壮网络股份有限公司 一种内存检测方法及装置
CN104461880A (zh) * 2014-12-04 2015-03-25 福建星网视易信息系统有限公司 一种嵌入式系统中自动检测内存越界的方法及系统
CN104657275A (zh) * 2015-03-09 2015-05-27 浪潮软件集团有限公司 一种内存越界的定位方法及装置
CN110413521A (zh) * 2019-07-24 2019-11-05 杭州迪普信息技术有限公司 一种堆内存的写越界检测方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7856538B2 (en) * 2005-12-12 2010-12-21 Systex, Inc. Methods, systems and computer readable medium for detecting memory overflow conditions

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101110042A (zh) * 2006-07-20 2008-01-23 中兴通讯股份有限公司 一种检测内存访问越界的方法
CN101154180A (zh) * 2006-09-29 2008-04-02 大唐移动通信设备有限公司 一种任务栈溢出的监测方法
CN101520754A (zh) * 2009-03-24 2009-09-02 中兴通讯股份有限公司 内存越界访问的定位方法及装置
CN101561775A (zh) * 2009-05-12 2009-10-21 华为技术有限公司 内存监控方法和装置
CN101599046A (zh) * 2009-06-26 2009-12-09 深圳市茁壮网络股份有限公司 一种内存检测方法及装置
CN104461880A (zh) * 2014-12-04 2015-03-25 福建星网视易信息系统有限公司 一种嵌入式系统中自动检测内存越界的方法及系统
CN104657275A (zh) * 2015-03-09 2015-05-27 浪潮软件集团有限公司 一种内存越界的定位方法及装置
CN110413521A (zh) * 2019-07-24 2019-11-05 杭州迪普信息技术有限公司 一种堆内存的写越界检测方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
(美)Everett N. Mckay,(美)Mike Woodring.《Windows程序调试》.中国电力出版社,2002,292. *
张淼,邵帅,王浩宇编著.《移动终端安全》.北京邮电大学出版社,2019,85-87. *

Also Published As

Publication number Publication date
CN111124921A (zh) 2020-05-08

Similar Documents

Publication Publication Date Title
CN111124921B (zh) 内存越界的检测方法、装置、设备和存储介质
US7962832B2 (en) Method for detecting memory error
US8250543B2 (en) Software tracing
US8769504B2 (en) Method and apparatus for dynamically instrumenting a program
CN107908444B (zh) 终端应用的挂钩方法及装置
EP3242214A1 (en) Method and device for protecting information of mcu chip
JP2008009721A (ja) 評価システム及びその評価方法
CN111933199B (zh) 基于存储器的数据读写方法、装置及存储介质
US20140149800A1 (en) Test method and test control apparatus
CN110069736A (zh) 页面加载方法及设备
CN111967209A (zh) 一种soc仿真验证方法、装置及存储介质
CN109885489B (zh) 驱动程序中数据竞争检测方法及装置
EP3540598A1 (en) Method, device and server for checking a defective function
CN110688320B (zh) 全局变量的检测方法、装置及终端设备
JP2005149501A (ja) Dmaを使用して拡張カードでメモリをテストするためのシステムおよび方法
JP2005149503A (ja) Dmaを使用してメモリをテストするためのシステムおよび方法
CN112597503A (zh) 一种基于中断向量的固件检测方法与装置
CN112527657B (zh) 单元测试中自动插桩的方法及设备
CN112527660B (zh) 代码的静态检测方法和装置
CN117112047B (zh) 一种usb设备的管控方法、设备及存储介质
JP2008090699A (ja) トレースロギング方法、装置及びプログラム
US11397662B2 (en) Method for debugging computer program, device employing method, and storage medium
TWI761917B (zh) 程式調試方法、裝置及可讀存儲介質
CN112698832B (zh) 一种识别代码变更影响范围的方法、装置及设备
CN114138588B (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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Tiktok vision (Beijing) Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: BEIJING BYTEDANCE NETWORK TECHNOLOGY Co.,Ltd.

Address after: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant after: Douyin Vision Co.,Ltd.

Address before: 100041 B-0035, 2 floor, 3 building, 30 Shixing street, Shijingshan District, Beijing.

Applicant before: Tiktok vision (Beijing) Co.,Ltd.

GR01 Patent grant
GR01 Patent grant