CN110895499A - 程序溢出保护方法及装置 - Google Patents

程序溢出保护方法及装置 Download PDF

Info

Publication number
CN110895499A
CN110895499A CN201811069937.9A CN201811069937A CN110895499A CN 110895499 A CN110895499 A CN 110895499A CN 201811069937 A CN201811069937 A CN 201811069937A CN 110895499 A CN110895499 A CN 110895499A
Authority
CN
China
Prior art keywords
memory block
target
program
overflow
base address
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
Application number
CN201811069937.9A
Other languages
English (en)
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.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology 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 Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201811069937.9A priority Critical patent/CN110895499A/zh
Publication of CN110895499A publication Critical patent/CN110895499A/zh
Pending legal-status Critical Current

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/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种程序溢出保护方法及装置。其中,方法包括:记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;获取目标程序中当前执行的指令,确定与当前执行的指令对应的目标内存块基地址以及目标内存块地址;判断记录的内存块信息中是否包含有目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并判断当前是否发生程序溢出;若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据溢出破坏信息进行内存恢复。本方案在检测到发生程序溢出时,可快速地实现对内存的恢复,从而在发生程序溢出时仍可保障程序的正常执行,提高程序的稳定性,进而提升用户体验。

Description

程序溢出保护方法及装置
技术领域
本发明涉及计算机安全技术领域,具体涉及一种程序溢出保护方法及装置。
背景技术
随着科技及社会的不断发展,各类应用程序的性能也得以快速提升。然而,目前仍存在许多因素严重威胁着应用程序的正常运行。例如,程序溢出仍是影响程序性能,尤其是影响程序运行稳定性的重要因素之一。
目前,当应用程序发生程序溢出时,通常需由专业技术人员对应用程序的源代码进行解析,排查程序溢出问题,并在排查出程序溢出问题之后,采用人工的方式制定相应的修复策略。然而,该方法在发生程序溢出时,无法实现对程序的快速恢复,并且具有人工成本高,恢复效率低的弊端。从而导致应用程序的长时间异常崩溃,进而降低用户体验;尤其在航天、军事、核工业以及高铁等信息实时性要求较高的领域,将引起较大的经济损失等严重后果。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的程序溢出保护方法及装置。
根据本发明的一个方面,提供了一种程序溢出保护方法,包括:
记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
判断记录的内存块信息中是否包含有所述目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
根据本发明的另一方面,提供了一种程序溢出保护装置,包括:
记录模块,适于记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
确定模块,适于获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
地址判断模块,适于判断记录的内存块信息中是否包含有所述目标内存块基地址;
地址获取模块,适于地址判断模块判断结果为是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量;
溢出判断模块,适于根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
内存恢复模块,适于若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述程序溢出保护方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述程序溢出保护方法对应的操作。
根据本发明提供的程序溢出保护方法及装置,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,内存块信息包括内存块基地址及与内存块基地址相关联的内存块容量;并获取目标程序中当前执行的指令,确定与当前执行的指令对应的目标内存块基地址以及目标内存块地址;并判断记录的内存块信息中是否包含有目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据溢出破坏信息进行内存恢复。本方案中实时记录与目标程序对应的内存块的内存块信息,并实时监测程序当前执行的指令,当该指令访问的内存地址与记录的内存块信息对应的内存块相关时,才进一步进行程序溢出判断,从而节约系统资源,提升本方案的执行效率;并在确定发生程序溢出之后,快速地根据记录的溢出破坏信息进行内存恢复,从而无需对源代码进行解析,便可实现发生程序溢出时快速地对程序进行恢复,进而提高程序恢复效率,降低成本,使得在发生程序溢出时仍可保障程序的正常执行,提高程序的稳定性,提升用户体验。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例提供的一种程序溢出保护方法的流程示意图;
图2示出了根据本发明另一个实施例提供的一种程序溢出保护方法的流程示意图;
图3示出了根据本发明一个实施例提供的一种程序溢出保护装置的功能结构示意图;
图4示出了根据本发明一个实施例提供的一种计算设备的结构示意图;
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例提供的一种程序溢出保护方法的流程示意图,如图1所示,该方法包括:
步骤S110,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
具体地,在程序运行过程中,为保证程序的正常运行,通常需为程序分配相应数目的内存块。则在本实施例中,可将待保护的目标程序部署于系统级仿真监控平台中,通过该平台实时监控目标程序相关联的内存块的操作行为,并根据监控到的操作行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。即为目标程序分配的至少一个内存块中每个内存块均具有与其相对应的内存块信息。
其中,记录的内存块信息包括内存块基地址及与内存块基地址相关联的内存块容量。在实际的实施过程中,内存块基地址为与其对应的内存块的起始地址,即地址指针。
步骤S120,获取目标程序中当前执行的指令,确定与当前执行的指令对应的目标内存块基地址以及目标内存块地址。
实时监测目标程序中的指令执行情况,并获取目标程序中当前执行的指令。进一步确定当前执行的指令所要访问的内存块,并将该指令将要访问的内存块的基地址作为目标内存块基地址,将该指令所要访问的内存块中的具体内存块地址作为目标内存块地址。
步骤S130,判断记录的内存块信息中是否包含有目标内存块基地址,若是,则执行步骤S140。
本实施例中,为节约系统资源,提升程序溢出保护方法的整体运行效率,本步骤中进一步地判断步骤S110中记录的各个内存块对应的内存块信息中是否包含有目标内存块基地址,即判断目标程序中当前执行的指令与记录的内存块信息对应的内存块相关。若是,则进行后续步骤的程序溢出判断,即执行步骤S140;否则,可进一步执行步骤S110,并进行目标程序中下一指令的处理。
步骤S140,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;若是,则执行步骤S150。
在确定记录的内存块信息中包含有目标内存块基地址之后,进一步地根据目标内存块基地址在记录的内存块信息中查找与该目标内存块基地址相关联的内存块容量,即获取目标程序中当前执行的指令所要访问的内存块的内存块容量。
进一步地,判断执行完目标程序中当前执行的指令之后,是否会发生程序溢出。具体地,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。例如,可根据目标内存块基地址以及与目标内存块基地址相关联的内存块容量可确定目标程序中当前执行的指令所要访问的内存块的空间范围,当目标内存块地址位于该内存块的空间范围时,则表明不会发生程序溢出,则进一步执行步骤S110,并进行目标程序中下一指令的处理;若目标内存块地址超出该内存块的空间范围,则表明当前将发生程序溢出,则进一步执行步骤S150。
步骤S150,记录当前发生的程序溢出所对应的溢出破坏信息,并根据溢出破坏信息进行内存恢复。
在确定当前发生程序溢出之后,记录当前发生的程序溢出所对应的溢出破坏信息,例如记录当前发生的程序溢出所对应的溢出内存地址及存储的内容等等,从而可根据记录的溢出破坏信息实时恢复内存,从而保证目标程序的正常运行,提高目标程序的运行稳定性。
由此可见,本实施例中,实时记录与目标程序对应的内存块的内存块信息,并实时监测程序当前执行的指令,当记录的内存块信息中包含有当前执行的指令对应的目标内存块基地址,即当前执行的指令与记录的内存块信息对应的内存块相关时,才进一步进行程序溢出判断,从而节约系统资源,提升本方案的执行效率;并在确定发生程序溢出后,记录溢出破坏信息,并快速地根据记录的溢出破坏信息进行内存恢复,从而无需对源代码进行解析,便可实现发生程序溢出时快速地对目标程序进行恢复,进而提高目标程序的恢复效率,降低对目标程序的维护成本,并使得在目标程序在发生程序溢出时仍可保障目标程序的正常执行,提高目标程序的稳定性,提升用户体验。
图2示出了根据本发明另一个实施例提供的一种程序溢出保护方法的流程示意图。如图2所示,该方法包括:
步骤S210,监测为目标程序分配的至少一个内存块的分配及释放行为,根据分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
具体地,可将目标程序部署于系统级仿真监控平台中,从而可实时地监测为目标程序分配的至少一个内存块的分配及释放行为。其中,由于在现有技术中程序溢出分为堆内存溢出及栈内存溢出,而两者均可引起程序溢出崩溃。所以,本实施例中的内存块具体为堆内存块和/或栈内存块,即本实施例提供的程序溢出保护方法适于堆内存溢出保护及栈内存溢出保护。
进一步地,根据监控到的内存块的分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。其中,内存块信息中包含有内存块基地址及与内存块基地址相关联的内存块容量。可选的,由于在实际的实施过程中,在同一目标程序中存在多线程同时分配或释放内存块的情形,所以,为进一步地标识不同线程的分配行为,记录的内存块信息中还包含有相应的线程标识。
步骤S220,获取目标程序中当前执行的指令,对当前执行的指令进行语义解析,根据语义解析结果获得相应的指令信息,其中,指令信息中包含有当前执行的指令对应的目标内存块基地址、目标内存块地址以及语义类型。
具体地,可采用对目标程序动态监控的方式,监控目标程序运行过程中的每条指令,并不断获取目标程序中当前执行的指令。为便于后续步骤对程序溢出的快速检测及程序的快速恢复,本步骤中进一步将获取到的当前执行的指令进行语义解析,从而可根据语义解析结果获得与当前执行的指令相对应的指令信息。
其中,指令信息中包含有当前执行的指令的操作数对应的地址信息。由于在实际的实施过程中,指令的操作数通常由“基地址+变址*比例因子+偏移”的方式表示,所以,本步骤中获得的指令信息中的当前执行的指令的操作数对应的地址信息包括该操作数所要访问的内存块的具体地址信息(即目标内存块地址),以及所要访问的内存块的基地址信息(及目标内存块基地址)。
进一步地,在对当前执行的指令进行语义解析获得语义解析结果后,还可根据语义解析结果确定当前执行的指令的语义类型,即本步骤中获得相应的指令信息中还包含有指令对应的语义类型信息。例如,语义类型信息可以为数据转移类型、数据更改类型等等。
可选的,本步骤中的指令信息还包括线程标识,以供标识指令所涉及的线程。
步骤S230,将记录的内存块信息中的内存块基地址作为污点源,并为污点源分配相应的污点标识,判断目标基地址中是否携带有污点标识,若是,则进一步执行步骤S240;否则,则执行步骤S210。
本步骤中利用污点分析方法,可快速准确地判断记录的内存块信息中是否包含有目标内存块基地址。从而可实现对目标程序细粒度的溢出检测,有效避免溢出漏报问题的发生。
在具体的实施过程中,将步骤S210中记录的内存块信息中的内存块基地址作为污点源,并为该污点源分配相应的污点标识。例如,当为目标程序分配的内存块为多个时,则步骤210中记录有分别与该多个内存块相对应的多条内存块信息,则步骤S210中记录有多个内存块基地址,则可分别将每个内存块基地址作为污染源,并为每个污染源分配相应的污点标识,以及生成与每个污点源对应的污点记录,其中污点记录中包含有内存块基地址信息及污点记录的字节长度。其中,污点记录的字节长度可根据不同系统环境设置,例如,在32位操作系统中,污点记录的字节长度为4;而在64位系统中,污点记录的字节长度为8。
采用相应的污点传播技术,使污点标识在目标程序中传播,并监测目标程序中各个污点标识的传播过程。其中,在传播过程中,对于同一污点标识,仅当与该污点标识对应的污点源相关联的内存基地址相同时,污点标识方可进行传播。
进一步地,判断目标基地址中是否携带有污点标识,即以目标程序中的指令对应的地址访问指令作为污点分析的异常检测目标。当目标内存块基地址中携带有污点标识时,则确定目标程序中当前执行的指令将访问步骤S210中记录的内存块信息对应的内存块,即确定记录的内存块信息中包含有目标内存块基地址,则进一步执行步骤S240;否则,则进行下一条指令的判断。
在一种可选的实施方式中,若与当前执行的指令对应的目标内存块基地址为多个,则本步骤中判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识,若是,则确定记录的内存块信息中包含有携带有污点标识的目标基地址。例如,若与当前执行的指令对应的多个操作数相关联的内存地址为多个,即当前执行的指令所对应的内存块为多个,若与当前执行的指令对应的某一目标内存块基地址携带有污点标识,则确定该目标内存块基地址位于记录的内存块信息中,则针对于该目标内存块基地址对应的内存块进行后续的程序溢出检测。
步骤S240,判断当前执行的指令的语义类型是否为预设类型,若是,则执行步骤S250,否则;则执行步骤S210。
其中,预设类型具体为数据移动、数据计算等涉及内存访问的类型。则在确定当前执行的指令对应的目标基地址携带有污点标识之后,进一步判断当前执行的指令的语义类型是否为预设类型,即进一步判断当前执行的指令是否涉及寻址操作,若是,则执行步骤S250;否则,执行步骤S210。
步骤S250,判断当前是否发生程序溢出,若是,则执行步骤S260;否则,执行步骤S210。
具体地,根据污点记录信息以及内存块信息,判断当前是否发生程序溢出。即在确定目标基地址中携带有污点标识后,获取与该污点标识相对应的污点记录,并进一步获取该污点记录中包含的内存基地址,并根据该内存基地址在记录的内存块信息中获取与该内存块基地址相关联的内存块容量,即获取与目标基地址相关联的内存块容量。
进一步地,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。例如,可根据目标内存块基地址以及与目标内存块基地址相关联的内存的容量可确定目标程序中当前执行的指令所要访问的内存块的空间范围,当目标内存块地址位于该内存块的空间范围时,则表明不会发生程序溢出;若目标内存块地址超出该内存块的空间范围,则表明当前会发生程序溢出,则进一步执行步骤S260。
步骤S260,记录当前发生的程序溢出所对应的溢出破坏信息,并在目标程序中当前执行的指令执行完毕之后,且在下一指令开始执行之前,根据溢出破坏信息进行内存恢复。
当确定发生程序溢出后,快速记录当前发生的程序溢出所对应的溢出破坏信息。其中,溢出破坏信息包括溢出破坏内存地址、溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。其中,溢出破坏内存容量具体为溢出破坏的字节数,该溢出破坏内存容量可根据目标程序中当前执行的指令对应的操作的数据类型来确定,例如,可根据数据类型的不同,选用1、2、4或8作为溢出破坏内存容量。
进一步地,待目标程序中当前执行的指令执行完毕之后,即程序已发生溢出之后,并在下一指令开始执行之前,依据记录的溢出内存破坏地址中存储的内容,对溢出破坏内存地址进行覆盖重写。从而使得在后续目标程序运行过程中,当后续执行的指令访问该溢出破坏内存地址中存储的数据时,仍可以保障访问的为溢出破坏前的数据,从而保障目标程序的正常运行。
由此可见,本实施例中,实时监测为目标程序分配的至少一个内存块的分配及释放行为,并记录与目标程序对应的内存块的内存块信息;并采用污点分析技术,确定目标程序当前执行的指令是否涉及已记录的内存块信息对应的内存块,从而大幅提升目标程序中溢出检测的全面性及细粒度,避免溢出漏报情形的发生;并判断当前执行的指令的语义类型是否为涉及内存地址访问的预设类型;最终在确定当前执行的指令对应的目标内存基地址包含有污点标识,且当前执行的指令的语义类型为预设类型时,才进一步判断当前是否发生程序溢出,从而可避免对所有指令均进行程序溢出检测而引起的系统资源浪费及溢出检测效率低的弊端;并在当前执行的指令执行完毕之后,且下一指令执行之前,根据记录的溢出破坏信息进行内存恢复,从而无需对源代码进行解析,便可实现发生程序溢出时快速地对目标程序进行恢复,进而提高目标程序的恢复效率,降低对目标程序的维护成本,并使得在目标程序在发生程序溢出时仍可保障目标程序的正常执行,提高目标程序的稳定性,提升用户体验。
图3示出了根据本发明一个实施例提供的一种程序溢出保护装置的功能结构示意图。如图3所示,该装置包括:记录模块31、确定模块32、地址判断模块33、地址获取模块34、溢出判断模块35、以及内存恢复模块36。
其中,记录模块31,适于记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
确定模块32,适于获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
地址判断模块33,适于判断记录的内存块信息中是否包含有所述目标内存块基地址;
地址获取模块34,适于地址判断模块判断结果为是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量;
溢出判断模块35,适于根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
内存恢复模块36,适于若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
可选的,地址判断模块33进一步适于:利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址。
可选的,地址判断模块33进一步适于:将记录的内存块信息中的内存块基地址作为污点源,并为所述污点源分配相应的污点标识;
判断所述目标基地址中是否携带有污点标识。
可选的,所述与所述当前执行的指令对应的目标内存块基地址为多个;
则地址判断模块33进一步适于:
判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识。
可选的,溢出判断模块35进一步适于:
对所述当前执行的指令进行语义解析并获得语义解析结果,根据所述语义解析结果确定所述当前执行的指令的语义类型;
判断所述当前执行的指令的语义类型是否为预设类型;
若是,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。
可选的,所述内存块信息还包括:线程标识。
可选的,所述溢出破坏信息包括溢出破坏内存地址、所述溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。
可选的,内存恢复模块36进一步适于:
依据所述溢出内存破坏地址中存储的内容,对所述溢出破坏内存地址进行覆盖重写。
可选的,内存恢复模块36进一步适于:
当所述目标程序中当前执行的指令执行完毕之后,且在下一指令开始执行之前,根据所述溢出破坏信息进行内存恢复。
可选的,记录模块31进一步适于:
监测为目标程序分配的至少一个内存块的分配及释放行为,根据所述分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
可选的,所述为目标程序分配的至少一个内存块为:堆内存块和/或栈内存块。
其中,本实施例中各个模块的具体实施方式可参照图1和/或图2所示方法实施例中相应的步骤,本实施例在此不做赘述。
由此可见,本实施例中,实时记录与目标程序对应的内存块的内存块信息,并实时监测程序当前执行的指令,当记录的内存块信息中包含有当前执行的指令对应的目标内存块基地址,即当前执行的指令涉及记录的内存块信息对应的内存块时,才进一步进行程序溢出判断,从而节约系统资源,提升本方案的执行效率;并在确定发生程序溢出后,记录溢出破坏信息,并快速地根据记录的溢出破坏信息进行内存恢复,从而无需对源代码进行解析,便可实现发生程序溢出时快速地对目标程序进行恢复,进而提高目标程序的恢复效率,降低对目标程序的维护成本,并使得在目标程序在发生程序溢出时仍可保障目标程序的正常执行,提高目标程序的稳定性,提升用户体验。
根据本发明一个实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的程序溢出保护方法。
图4示出了根据本发明一个实施例提供的一种计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图4所示,该计算设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述程序溢出保护方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行以下操作:
记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
判断记录的内存块信息中是否包含有所述目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
将记录的内存块信息中的内存块基地址作为污点源,并为所述污点源分配相应的污点标识;
判断所述目标基地址中是否携带有污点标识。
在一种可选的实施方式中,所述与所述当前执行的指令对应的目标内存块基地址为多个;
程序410具体可以用于使得处理器402执行以下操作:
则所述利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
对所述当前执行的指令进行语义解析并获得语义解析结果,根据所述语义解析结果确定所述当前执行的指令的语义类型;
判断所述当前执行的指令的语义类型是否为预设类型;
若是,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。
在一种可选的实施方式中,所述内存块信息还包括:线程标识。
在一种可选的实施方式中,所述溢出破坏信息包括溢出破坏内存地址、所述溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
依据所述溢出内存破坏地址中存储的内容,对所述溢出破坏内存地址进行覆盖重写。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
当所述目标程序中当前执行的指令执行完毕之后,且在下一指令开始执行之前,根据所述溢出破坏信息进行内存恢复。
在一种可选的实施方式中,程序410具体可以用于使得处理器402执行以下操作:
监测为目标程序分配的至少一个内存块的分配及释放行为,根据所述分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
在一种可选的实施方式中,所述为目标程序分配的至少一个内存块为:堆内存块和/或栈内存块。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的程序溢出保护装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:A1.一种程序溢出保护方法,包括:
记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
判断记录的内存块信息中是否包含有所述目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
A2.根据A1所述的方法,其中,所述判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址。
A3.根据A2所述的方法,其中,所述利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
将记录的内存块信息中的内存块基地址作为污点源,并为所述污点源分配相应的污点标识;
判断所述目标基地址中是否携带有污点标识。
A4.根据A3所述的方法,其中,所述与所述当前执行的指令对应的目标内存块基地址为多个;
则所述利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识。
A5.根据A1-A4中任一项所述的方法,其中,所述根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出进一步包括:
对所述当前执行的指令进行语义解析并获得语义解析结果,根据所述语义解析结果确定所述当前执行的指令的语义类型;
判断所述当前执行的指令的语义类型是否为预设类型;
若是,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。
A6.根据A1-A5中任一项所述的方法,其中,所述内存块信息还包括:线程标识。
A7.根据A1-A6中任一项所述的方法,其中,所述溢出破坏信息包括溢出破坏内存地址、所述溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。
A8.根据A7所述的方法,其中,所述根据所述溢出破坏信息进行内存恢复进一步包括:
依据所述溢出内存破坏地址中存储的内容,对所述溢出破坏内存地址进行覆盖重写。
A9.根据A1-A8中任一项所述的方法,其中,所述根据所述溢出破坏信息进行内存恢复进一步包括:
当所述目标程序中当前执行的指令执行完毕之后,且在下一指令开始执行之前,根据所述溢出破坏信息进行内存恢复。
A10.根据A1-A9中任一项所述的方法,其中,所述记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息进一步包括:
监测为目标程序分配的至少一个内存块的分配及释放行为,根据所述分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
A11.根据A1-A10中任一项所述的方法,其中,所述为目标程序分配的至少一个内存块为:堆内存块和/或栈内存块。
本发明还公开了:B12.一种程序溢出保护装置,包括:
记录模块,适于记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
确定模块,适于获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
地址判断模块,适于判断记录的内存块信息中是否包含有所述目标内存块基地址;
地址获取模块,适于地址判断模块判断结果为是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量;
溢出判断模块,适于根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
内存恢复模块,适于若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
B13.根据B12所述的装置,其中,所述地址判断模块进一步适于:
利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址。
B14.根据B13所述的装置,其中,所述地址判断模块进一步适于:
将记录的内存块信息中的内存块基地址作为污点源,并为所述污点源分配相应的污点标识;
判断所述目标基地址中是否携带有污点标识。
B15.根据B14所述的装置,其中,所述与所述当前执行的指令对应的目标内存块基地址为多个;
则所述地址判断模块进一步适于:
判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识。
B16.根据B12-B15中任一项所述的装置,其中,所述溢出判断模块进一步适于:
对所述当前执行的指令进行语义解析并获得语义解析结果,根据所述语义解析结果确定所述当前执行的指令的语义类型;
判断所述当前执行的指令的语义类型是否为预设类型;
若是,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。
B17.根据B12-B16中任一项所述的装置,其中,所述内存块信息还包括:线程标识。
B18.根据B12-B17中任一项所述的装置,其中,所述溢出破坏信息包括溢出破坏内存地址、所述溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。
B19.根据B18所述的装置,其中,所述内存恢复模块进一步适于:
依据所述溢出内存破坏地址中存储的内容,对所述溢出破坏内存地址进行覆盖重写。
B20.根据B12-B19中任一项所述的装置,其中,所述内存恢复模块进一步适于:
当所述目标程序中当前执行的指令执行完毕之后,且在下一指令开始执行之前,根据所述溢出破坏信息进行内存恢复。
B21.根据B12-B20中任一项所述的装置,其中,所述记录模块进一步适于:
监测为目标程序分配的至少一个内存块的分配及释放行为,根据所述分配及释放行为,记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息。
B22.根据B12-B21中任一项所述的装置,其中,所述为目标程序分配的至少一个内存块为:堆内存块和/或栈内存块。
本发明还公开了:C23.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如A1-A11中任一项所述的程序溢出保护方法对应的操作。
本发明还公开了:D24.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如A1-A11中任一项所述的程序溢出保护方法对应的操作。

Claims (10)

1.一种程序溢出保护方法,包括:
记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
判断记录的内存块信息中是否包含有所述目标内存块基地址,若是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量,并根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
2.根据权利要求1所述的方法,其中,所述判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址。
3.根据权利要求2所述的方法,其中,所述利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
将记录的内存块信息中的内存块基地址作为污点源,并为所述污点源分配相应的污点标识;
判断所述目标基地址中是否携带有污点标识。
4.根据权利要求3所述的方法,其中,所述与所述当前执行的指令对应的目标内存块基地址为多个;
则所述利用污点分析方法,判断记录的内存块信息中是否包含有所述目标内存块基地址进一步包括:
判断多个目标内存块基地址中是否存在至少一个目标内存块基地址中携带有污点标识。
5.根据权利要求1-4中任一项所述的方法,其中,所述根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出进一步包括:
对所述当前执行的指令进行语义解析并获得语义解析结果,根据所述语义解析结果确定所述当前执行的指令的语义类型;
判断所述当前执行的指令的语义类型是否为预设类型;
若是,根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出。
6.根据权利要求1-5中任一项所述的方法,其中,所述内存块信息还包括:线程标识。
7.根据权利要求1-6中任一项所述的方法,其中,所述溢出破坏信息包括溢出破坏内存地址、所述溢出破坏内存地址中存储的内容、和/或溢出破坏内存容量。
8.一种程序溢出保护装置,包括:
记录模块,适于记录为目标程序分配的至少一个内存块中每个内存块对应的内存块信息;其中,所述内存块信息包括内存块基地址及与所述内存块基地址相关联的内存块容量;
确定模块,适于获取目标程序中当前执行的指令,确定与所述当前执行的指令对应的目标内存块基地址以及目标内存块地址;
地址判断模块,适于判断记录的内存块信息中是否包含有所述目标内存块基地址;
地址获取模块,适于地址判断模块判断结果为是,在记录的内存块信息中获取与目标内存块基地址相关联的内存块容量;
溢出判断模块,适于根据目标内存块地址、目标内存块基地址、以及与目标内存块基地址相关联的内存块容量,判断当前是否发生程序溢出;
内存恢复模块,适于若当前发生程序溢出,则记录当前发生的程序溢出所对应的溢出破坏信息,并根据所述溢出破坏信息进行内存恢复。
9.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项所述的程序溢出保护方法对应的操作。
10.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-7中任一项所述的程序溢出保护方法对应的操作。
CN201811069937.9A 2018-09-13 2018-09-13 程序溢出保护方法及装置 Pending CN110895499A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811069937.9A CN110895499A (zh) 2018-09-13 2018-09-13 程序溢出保护方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811069937.9A CN110895499A (zh) 2018-09-13 2018-09-13 程序溢出保护方法及装置

Publications (1)

Publication Number Publication Date
CN110895499A true CN110895499A (zh) 2020-03-20

Family

ID=69785720

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811069937.9A Pending CN110895499A (zh) 2018-09-13 2018-09-13 程序溢出保护方法及装置

Country Status (1)

Country Link
CN (1) CN110895499A (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101561775A (zh) * 2009-05-12 2009-10-21 华为技术有限公司 内存监控方法和装置
CN103116529A (zh) * 2011-07-18 2013-05-22 英飞凌科技股份有限公司 用于实时检测缓冲区溢出致堆内存损坏的方法和设备
CN103116532A (zh) * 2011-11-16 2013-05-22 通用汽车环球科技运作有限责任公司 从嵌入式软件系统中的堆栈损坏故障中恢复
CN105808430A (zh) * 2016-03-03 2016-07-27 中国科学院软件研究所 一种多语义动态污点分析方法
CN105988921A (zh) * 2015-02-06 2016-10-05 中兴通讯股份有限公司 一种内存越界的检测方法及装置
CN107729747A (zh) * 2017-11-10 2018-02-23 中国科学院软件研究所 一种面向二进制程序的堆溢出检测方法
CN108268770A (zh) * 2018-02-05 2018-07-10 烽火通信科技股份有限公司 一种栈溢出检测系统及方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101561775A (zh) * 2009-05-12 2009-10-21 华为技术有限公司 内存监控方法和装置
CN103116529A (zh) * 2011-07-18 2013-05-22 英飞凌科技股份有限公司 用于实时检测缓冲区溢出致堆内存损坏的方法和设备
CN103116532A (zh) * 2011-11-16 2013-05-22 通用汽车环球科技运作有限责任公司 从嵌入式软件系统中的堆栈损坏故障中恢复
CN105988921A (zh) * 2015-02-06 2016-10-05 中兴通讯股份有限公司 一种内存越界的检测方法及装置
CN105808430A (zh) * 2016-03-03 2016-07-27 中国科学院软件研究所 一种多语义动态污点分析方法
CN107729747A (zh) * 2017-11-10 2018-02-23 中国科学院软件研究所 一种面向二进制程序的堆溢出检测方法
CN108268770A (zh) * 2018-02-05 2018-07-10 烽火通信科技股份有限公司 一种栈溢出检测系统及方法

Similar Documents

Publication Publication Date Title
US8141053B2 (en) Call stack sampling using a virtual machine
US20130096880A1 (en) System test method
US20100251220A1 (en) Method and apparatus for dynamically instrumenting a program
US7861118B2 (en) Machine instruction level race condition detection
CN111709031B (zh) 一种覆盖率引导的VxWorks内核模糊测试方法
CN110647318B (zh) 一种有状态应用的实例创建方法、装置、设备及介质
CN111625833B (zh) 一种高效的软件程序释放后重用漏洞判定方法和装置
US8990627B2 (en) Leveraging page fault and page reclaim capabilities in debugging
CN111274060B (zh) 一种确定内存异常的方法、装置、设备和存储介质
CN115686961A (zh) 处理器测试方法、装置及电子设备
CN109992511B (zh) 获取代码测试覆盖率的装置及方法
CN110704313A (zh) Java虚拟机内存泄漏检测方法及装置
KR102254159B1 (ko) 운영체제 커널 메모리의 실시간 오류 검출 방법
US20120166887A1 (en) Monitoring multiple data transfers
US20140040866A1 (en) Managing code instrumentation in a production computer program
CN110895499A (zh) 程序溢出保护方法及装置
CN114860432A (zh) 一种内存故障的信息确定方法及装置
JP6064756B2 (ja) 性能データ収集プログラム、装置、及び方法
CN113934566A (zh) 异常处理方法、装置和电子设备
CN111367750B (zh) 一种异常处理方法、装置及其设备
CN110908869A (zh) 一种应用程序数据监控方法、装置、设备及储存介质
CN112905602B (zh) 数据比对方法、计算设备及计算机存储介质
CN111382010A (zh) 堆/栈溢出错误的可利用性分析方法及装置
US10963348B1 (en) Summary change log indexed by inode numbers
US9372783B2 (en) Recording the core data of a computer process which provides trace data

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200320

RJ01 Rejection of invention patent application after publication