CN113918371B - 一种内存处理方法及装置 - Google Patents

一种内存处理方法及装置 Download PDF

Info

Publication number
CN113918371B
CN113918371B CN202111210271.6A CN202111210271A CN113918371B CN 113918371 B CN113918371 B CN 113918371B CN 202111210271 A CN202111210271 A CN 202111210271A CN 113918371 B CN113918371 B CN 113918371B
Authority
CN
China
Prior art keywords
memory
target
target memory
setting
responding
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
CN202111210271.6A
Other languages
English (en)
Other versions
CN113918371A (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 CN202111210271.6A priority Critical patent/CN113918371B/zh
Publication of CN113918371A publication Critical patent/CN113918371A/zh
Application granted granted Critical
Publication of CN113918371B publication Critical patent/CN113918371B/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/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Storage Device Security (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开提供了一种内存处理方法及装置,其中,该方法首先响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;然后,响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;最后,基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。本公开实施例通过内存释放记录生成报错日志进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。

Description

一种内存处理方法及装置
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种内存处理方法及装置。
背景技术
应用程序通常需要申请内存来存储变量等数据,在使用完成后,会对申请的内存进行释放。在使用申请的内存时,如果对应内存被释放后又进行使用,就会造成程序访问已释放的内存发生崩溃,该类问题通常被称为野指针问题。
在发现野指针问题后,通常需要触发程序崩溃后才能对野指针进行定位,对于大规模的线上生产环境来说,意味着需要大范围中断服务,严重影响了应用程序的正常运转,仅适用于对应用程序进行测试的场景。
发明内容
本公开实施例至少提供一种内存处理方法及装置。
第一方面,本公开实施例提供了一种内存处理方法,包括:
响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
一种可选的实施方式中,在响应于内存释放请求之前,所述方法还包括:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
一种可选的实施方式中,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
一种可选的实施方式中,在响应于内存申请请求之前,所述方法还包括:
加载异常信息处理函数;
所述响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录,包括:
所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
一种可选的实施方式中,在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,所述方法还包括:
卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
第二方面,本公开实施例还提供一种内存处理装置,包括:
释放模块,用于响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
查找模块,用于响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
生成模块,用于基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
一种可选的实施方式中,所述装置还包括分配模块,用于:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
一种可选的实施方式中,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
一种可选的实施方式中,所述分配模块在响应于内存申请请求之前,还用于:
加载异常信息处理函数;
所述查找模块在响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录时,用于:
所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
一种可选的实施方式中,所述装置还包括卸载模块,用于在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的内存处理方法及装置,首先响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;然后,响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;最后,基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。本公开实施例通过内存释放记录生成报错日志,来进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,使得线程不会再次申请目标内存,再次尝试访问目标内存时也不会因为无效内存或无权限内存触发缺页异常进而防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。应当理解,以下附图仅示出了本公开的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本公开实施例所提供的一种内存处理方法的流程图;
图2示出了本公开实施例所提供的另一种内存处理方法的流程图;
图3示出了本公开实施例所提供的一种内存处理装置的示意图;
图4示出了本公开实施例所提供的一种电子设备的示意图。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,野指针通常需要触发应用程序的异常崩溃,才能够对其进行定位和解决,然而,在大规模的线上生产环境下,触发应用程序崩溃意味着大规模中断服务,在此期间用户无法得到服务,严重影响了应用程序的正常运转与稳定性,仅适用于对应用程序进行测试的场景。
基于上述研究,本公开提供了一种内存处理方法及装置,通过内存释放记录生成报错日志,来进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,使得线程不会再次申请目标内存,再次尝试访问目标内存时也不会因为无效内存或无权限内存触发缺页异常进而防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种内存处理方法进行详细介绍,本公开实施例所提供的内存处理方法的执行主体一般为具有一定计算能力的计算机设备,如终端设备、服务器等。在一些可能的实现方式中,该内存处理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的内存处理方法的流程图,所述方法包括步骤S101~S103,其中:
S101、响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写。
该步骤中,终端设备可以监测并拦截多个应用程序的内存申请请求及内存释放请求,然后利用特殊的逻辑为应用程序分配内存或释放内存,为了响应内存释放请求和内存申请请求,终端设备可以预先申请一大块的连续内存,将申请得到的连续内存作为内存池,内存池的存储空间大小可以大于或等于预设阈值,预设阈值可以根据应用程序的预期内存需求确定。
在申请到内存池后,可以将内存池中的内存设置为不可读写,这样,除申请了该内存池的线程或进程外,其他的进程和线程无法对内存池中的内存进行申请或读写。
之后,若检测到应用程序的内存申请请求,则可以从内存池中选取与内存申请请求匹配的内存分给内存申请请求对应的线程,并将分配给线程的内存设置为可读写,这样,被线程即可对被分配的内存进行读写。
针对与内存释放请求,其指示的目标内存为上述内存池中的一部分,可以将目标内存设置为不可读写,从而使目标内存不能够被其他线程读写,以释放目标内存。
S102、响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录。
其中,上述异常信息可以为SIGSEGV信号,SIGSEGV信号是当一个进程执行了一个无效的内存引用,或发生段错误时发送给它的信号,通常野指针问题会触发SIGSEGV信号。一般情况下,线程访问无效内存或无权限内存会触发缺页异常,发送SIGSEGV信号给异常的应用程序,触发初始异常信息处理函数,导致应用程序崩溃退出。
为了防止应用程序的崩溃退出,本公开实施例对异常信息采取特殊处理方式,在响应于内存申请请求之前,可以先加载本公开实施例采用的异常信息处理函数,在检测到异常信息时,利用加载的异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
上述内存释放记录可以为完成内存释放时存储的内存释放信息,可以包括目标内存的存储空间大小、申请释放目标内存的目标线程的标识信息、目标内存对应的地址信息以及目标内存对应的栈帧等至少一种上述信息。
S103、基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
该步骤中,可以根据内存释放记录中的信息生成报错日志,报错日志可以包括出现异常的目标内存的内存地址、出现异常时间、目标内存的存储空间大小、申请释放目标内存的目标线程的标识信息、目标内存对应的栈帧等信息。
在得到报错日志后,业务人员即可根据报错日志对野指针问题进行定位和处理。
同时,可以将目标内存设置为可读写,这样,其他进程在尝试读写目标内存时就不会触发异常信息,进一步的,将目标内存的占用状态设置为使用中,能够防止其他线程申请目标内存,实现针对目标内存的异常隔离,防止应用程序因目标内存的异常导致崩溃。
在将目标内存设置为可读写,并将目标内存的占用状态设置为使用中后,可以卸载异常信息处理函数,卸载异常信息处理函数后,若再次检测到到异常信息,则可以利用系统内核的初始异常信息处理函数响应新监测到的异常信息,不再触发本公开实施例使用的异常信息处理函数,此时,再次访问目标内存会发现目标内存为可读写状态,由于目标内存是内存池中的一部分,其他线程申请内存时也不会再访问到目标内存,对发生的内存野指针问题进行了隔离保护,在不进行程序崩溃的情况下记录了野指针的信息。
其中,上述系统可以为Linux系统,应用程序可以为通过C/C++语言编写的程序。
本公开实施例通过内存释放记录生成报错日志,来进行问题定位,同时,将发生异常的目标内存设置为可读写,并将其占用状态设置为使用中,使得线程不会再次申请目标内存,再次尝试访问目标内存时也不会因为无效内存或无权限内存触发缺页异常进而防止应用程序因出现野指针问题导致的崩溃,提高应用程序的稳定性。
参见图2所示,为本公开实施例提供的另一种内存处理方法的流程图。该方法首先进行无崩溃检测程序的初始化,申请内存池并进行参数配置,然后注册异常信息处理函数,当截获到本地服务层的内存分配释放函数时,从内存池中分配或释放内存,并生成分配或释放内存对应的内存分配记录或内存释放记录;在检测到异常信息时,可以通过异常信息处理函数,根据其对应的内存释放记录生成报错日志,然后,将出现异常的内存权限设置为可读写,将出现异常的内存的占用状态设置为使用中,最后卸载异常信息处理函数,使异常的线程能够正常运行。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与内存处理方法对应的内存处理装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述内存处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图3所示,为本公开实施例提供的一种内存处理装置的示意图,所述装置包括:
释放模块310,用于响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
查找模块320,用于响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
生成模块330,用于基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
一种可选的实施方式中,所述装置还包括分配模块,用于:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
一种可选的实施方式中,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
一种可选的实施方式中,所述分配模块在响应于内存申请请求之前,还用于:
加载异常信息处理函数;
所述查找模块320在响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录时,用于:
所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
一种可选的实施方式中,所述装置还包括卸载模块,用于在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的内存处理方法,本公开实施例还提供了一种电子设备400,如图4所示,为本公开实施例提供的电子设备400结构示意图,包括:
处理器41、存储器42、和总线43;存储器42用于存储执行指令,包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换,当所述电子设备400运行时,所述处理器41与所述存储器42之间通过总线43通信,使得所述处理器41执行以下指令:
响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;
基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
一种可选的实施方式中,所述处理器41在响应于内存释放请求之前,还用于执行:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
一种可选的实施方式中,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
一种可选的实施方式中,在响应于内存申请请求之前,所述处理器41还用于执行:
加载异常信息处理函数;
所述处理器41执行的指令中,所述响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录,包括:
所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
一种可选的实施方式中,在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,所述处理器41还用于执行:
卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的内存处理方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的内存处理方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种内存处理方法,其特征在于,包括:
响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;所述异常信息用于指示进程引用所述目标内存时引用无效,或引用所述目标内存时发生错误;
基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
2.根据权利要求1所述的方法,其特征在于,在响应于内存释放请求之前,所述方法还包括:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
3.根据权利要求1所述的方法,其特征在于,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
4.根据权利要求2所述的方法,其特征在于,在响应于内存申请请求之前,所述方法还包括:
加载异常信息处理函数;
所述响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录,包括:
所述响应于针对所述目标内存的异常信息,在所述异常信息处理函数处于加载状态下,利用所述异常信息处理函数查找与所述目标内存的地址信息匹配的内存释放记录。
5.根据权利要求4所述的方法,其特征在于,在将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中之后,所述方法还包括:
卸载所述异常信息处理函数,以使再次检测到针对所述目标内存的异常信息后,利用系统内核的初始异常信息处理函数响应所述异常信息。
6.一种内存处理装置,其特征在于,包括:
释放模块,用于响应于内存释放请求,将所述内存释放请求指示的目标内存设置为不可读写;
查找模块,用于响应于针对所述目标内存的异常信息,查找与所述目标内存的地址信息匹配的内存释放记录;所述异常信息用于指示进程引用所述目标内存时引用无效,或引用所述目标内存时发生错误;
生成模块,用于基于所述内存释放记录,生成所述目标内存的报错日志;以及,将所述目标内存设置为可读写,并将所述目标内存的占用状态设置为使用中,以防止所述目标内存被申请。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括分配模块,用于:
向系统申请存储空间大于或等于预设阈值的连续内存,将申请得到的连续内存作为内存分配的内存池,并将所述内存池中的内存设置为不可读写;
响应于内存申请请求,从所述内存池中选取与所述内存申请请求匹配的内存分配给所述内存申请请求对应的线程,并将分配给所述线程的内存设置为可读写。
8.根据权利要求6所述的装置,其特征在于,所述内存释放记录包括以下至少一种:
所述目标内存的存储空间大小、申请释放所述目标内存的目标线程的标识信息、所述目标内存对应的地址信息以及所述目标内存对应的栈帧。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至5任一所述的内存处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至5任意一项所述的内存处理方法的步骤。
CN202111210271.6A 2021-10-18 2021-10-18 一种内存处理方法及装置 Active CN113918371B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111210271.6A CN113918371B (zh) 2021-10-18 2021-10-18 一种内存处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111210271.6A CN113918371B (zh) 2021-10-18 2021-10-18 一种内存处理方法及装置

Publications (2)

Publication Number Publication Date
CN113918371A CN113918371A (zh) 2022-01-11
CN113918371B true CN113918371B (zh) 2023-06-20

Family

ID=79241207

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111210271.6A Active CN113918371B (zh) 2021-10-18 2021-10-18 一种内存处理方法及装置

Country Status (1)

Country Link
CN (1) CN113918371B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115292697B (zh) * 2022-10-10 2022-12-16 北京安帝科技有限公司 一种基于入侵行为分析的内存保护方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625833A (zh) * 2020-04-13 2020-09-04 中国科学院软件研究所 一种高效的软件程序释放后重用漏洞判定方法和装置
CN113467981A (zh) * 2020-03-31 2021-10-01 华为技术有限公司 异常处理的方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9990492B2 (en) * 2014-07-23 2018-06-05 Grammatech, Inc. Systems and/or methods for automatically protecting against memory corruption vulnerabilities
US9864649B2 (en) * 2015-03-27 2018-01-09 Intel Corporation Technologies for root cause identification of use-after-free memory corruption bugs
CN107291598B (zh) * 2017-08-07 2018-07-06 腾讯科技(深圳)有限公司 监控方法、监控装置、监控设备和存储介质
CN110673986A (zh) * 2019-09-23 2020-01-10 北京字节跳动网络技术有限公司 内存操作的异常捕获方法、装置、终端及存储介质
CN113485846A (zh) * 2021-08-02 2021-10-08 北京字节跳动网络技术有限公司 一种内存处理方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113467981A (zh) * 2020-03-31 2021-10-01 华为技术有限公司 异常处理的方法和装置
CN111625833A (zh) * 2020-04-13 2020-09-04 中国科学院软件研究所 一种高效的软件程序释放后重用漏洞判定方法和装置

Also Published As

Publication number Publication date
CN113918371A (zh) 2022-01-11

Similar Documents

Publication Publication Date Title
CN107066311B (zh) 一种内核数据访问控制方法与系统
CN114579340A (zh) 内存错误处理方法和装置
US10003606B2 (en) Systems and methods for detecting security threats
US8161128B2 (en) Sharing of data across disjoint clusters
US9516056B2 (en) Detecting a malware process
WO2017177801A1 (zh) 一种实现操作系统完整性保护的方法和装置
CN107544755B (zh) 一种数据读写的控制方法和装置
US10430267B2 (en) Determine when an error log was created
CN106133704A (zh) 内存故障隔离方法和装置
JP2013073405A (ja) 監視装置、制御方法及び制御プログラム
CN102968353A (zh) 一种失效地址处理方法及装置
CN113918371B (zh) 一种内存处理方法及装置
CN114996064A (zh) 内存检测方法、装置、设备及存储介质
US11822419B2 (en) Error information processing method and device, and storage medium
CN113467981A (zh) 异常处理的方法和装置
US20090300434A1 (en) Clearing Interrupts Raised While Performing Operating System Critical Tasks
US10896085B2 (en) Mitigating actions
CN104714834B (zh) 一种空间确定的任务调度方法
CN101140535A (zh) 防止bios芯片数据丢失的方法
CN111428240B (zh) 一种用于检测软件的内存违规访问的方法及装置
CN113485846A (zh) 一种内存处理方法及装置
CN113010885B (zh) 一种检测伪装起始地址的内核线程的方法及装置
CN107766196B (zh) 对计算设备进行启动检查的方法与设备
CN114153560A (zh) 一种虚拟中断处理方法、装置、设备及介质
CN112073519B (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

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.

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.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant