CN110472411B - 一种内存溢出处理方法、装置、设备及可读存储介质 - Google Patents
一种内存溢出处理方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN110472411B CN110472411B CN201910768851.3A CN201910768851A CN110472411B CN 110472411 B CN110472411 B CN 110472411B CN 201910768851 A CN201910768851 A CN 201910768851A CN 110472411 B CN110472411 B CN 110472411B
- Authority
- CN
- China
- Prior art keywords
- memory overflow
- syntax tree
- tree structure
- target file
- target
- 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
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 claims description 48
- 238000012545 processing Methods 0.000 claims description 25
- 230000008569 process Effects 0.000 claims description 19
- 230000008439 repair process Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 10
- 238000001514 detection method Methods 0.000 claims description 9
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 claims description 4
- 238000010606 normalization Methods 0.000 claims description 4
- 238000005457 optimization Methods 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 12
- 238000004458 analytical method Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 206010033799 Paralysis Diseases 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 238000012550 audit Methods 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 239000004566 building material Substances 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000003889 chemical engineering Methods 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000007943 implant Substances 0.000 description 1
- 238000002513 implantation Methods 0.000 description 1
- 238000005272 metallurgy Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种内存溢出处理方法、装置、设备和可读存储介质,该技术方案中,编译器获取目标文件并对目标文件的语法树森林结构进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;利用目标语法树结构集合对目标文件进行调整;利用调整后的目标文件进行内存溢出保护。本申请的技术方案不仅可检测出可能存在的内存溢出结构,还可针对该结构进行调整,以进行内存溢出保护。进一步,可降低控制器的内存溢出风险,可提升系统稳定性。
Description
技术领域
本申请涉及计算机应用技术领域,特别是涉及一种内存溢出处理方法、装置、设备及可读存储介质。
背景技术
分布式控制系统(Distributed Control System,DCS),目前已经成熟应用于炼制、冶金、化工、建材、电力等行业。控制器是DCS的核心设备,它是整个控制器系统的“核心大脑”,负责采集现场数据,运行控制逻辑及算法,控制现场设备输出。
控制器运行时内存溢出是指,控制器组态程序(通过LD(继电器梯形图,LadderDiagram)、ST(结构化文本/结构式文件编程语言,Structured text)、CFC(连续功能图语言,Continuous Function Chart)、FBD(功能块图,Function Block Diagram)等工控语言编写)中的变量所对应的内存数据被写入了非法值。在程序的编译过程中,组态软件编译器会预先为程序中的变量分配内存空间。程序运行过程中,每个变量具备各个内存空间,相互之间不会重叠。如果写入某个变量的所在内存的数据地址或长度超出了预先分配的地址空间,则会造成内存溢出,内存数据则很可能被篡改为非法值。
控制器内存溢出往往是因为程序在运行过程中,因为逻辑上漏洞或病毒植入导致内存数据被破坏,故障原因难以追溯排查。通常导致内存溢出主要包括以下两种情况:
情况一:直接相对地址寻址方式赋值语句所产生的溢出情况,即赋值的地址已经超过了组态软件编译器预先分配的地址范围;
情况二:动态运行过程中间接相对地址寻址情况;
对于情况一,可通过人工代码走查的方式进行排查,而对于情况二这一类溢出情况是靠代码编译器或人工检测是无法发现解决的。与传统IT软件有所不同,工业DCS控制器内部运算的数据非常重要,一个bit的数据错误都会导致整个控制系统瘫痪,重型机械设备损坏,造成不可挽回的经济财产损失。
综上所述,如何有效地解决内存溢出等问题,是目前本领域技术人员急需解决的技术问题。
发明内容
本申请的目的是提供一种内存溢出处理方法、装置、设备及可读存储介质,以解决内存溢出等问题,以保障控制系统的稳定性。
为解决上述技术问题,本申请提供如下技术方案:
一种内存溢出处理方法,包括:
获取目标文件并对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;
在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;
利用所述目标语法树结构集合对所述目标文件进行调整;
利用调整后的目标文件进行内存溢出保护。
优选地,所述获取目标文件,包括:
获取组态逻辑源码,并按照语法森林结构对所述组态逻辑源码进行归一化转换,获得所述目标文件。
优选地,对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,包括:
依次所述语法森林中的各个语法树结构是否满足所述预设内存溢出漏洞特征规约;
将满足所述预设内存溢出漏洞特征规约的语法树结构添加至所述语法树结构集合中;
其中,所述预设内存溢出漏洞特征规约,包括:语法树结构与预设树形结构相同。
优选地,在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合,包括:
在所述语法树结构集合内的各个语法树结构中增加所述内存溢出选择节点作为所述语法树结构的父节点;其中,所述内存溢出选择节点下包括选择结构逻辑判断子树,内存溢出漏洞修复与处理逻辑子树,所述语法树结构。
优选地,利用调整后的目标文件进行内存溢出保护,包括:
利用所述选择结构逻辑判断子树确定是否出现内存溢出;
如果是,则利用所述内存溢出漏洞修复与处理逻辑子树屏蔽内存写入操作;
如果否,则利用所述语法树结构完成所述内存写入操作。
优选地,在获得语法树结构集合之后,在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点之前,还包括:
利用预设内存溢出漏洞特征规约,对所述语法树结构集合内的各个语法树结构进行再次检测,以对所述语法树结构集合进行筛选。
优选地,利用所述目标语法树结构集合对所述目标文件进行调整,包括:
利用所述目标语法树结构集合对所述语法森林中相应地语法树进行替换。
一种内存溢出处理装置,包括:
内存溢出结构检测模块,用于获取目标文件并对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;
内存溢出结构优化模块,用于在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;
目标文件调整模块,用于利用所述目标语法树结构集合对所述目标文件进行调整;
内存溢出保护模块,用于利用调整后的目标文件进行内存溢出保护。
一种内存溢出处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现上述内存溢出处理方法的步骤。
一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述内存溢出处理方法的步骤。
应用本申请实施例所提供的方法,获取目标文件并对目标文件的语法树森林结构进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;利用目标语法树结构集合对目标文件进行调整;利用调整后的目标文件进行内存溢出保护。
获得目标文件之后,对目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,即找出可能会导致内存溢出的赋值结构。然后,对该语法树结构集合中的各个语法树结构增加内存溢出选择操作节点,以避免出现内存溢出。最终,利用目标语法树结合对目标文件进行调整,调整后的目标文件便可进行内存溢出保护。可见,在本方法中不仅可检测出可能存在的内存溢出结构,还可针对该结构进行调整,以进行内存溢出保护。进一步,可降低控制器的内存溢出风险,可提升系统稳定性。
相应地,本申请实施例还提供了与上述内存溢出处理方法相对应的内存溢出处理装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为常规DCS组态程序编译执行部分的技术实现框架示意图;
图2为本申请实施例中一种内存溢出处理方法的实施流程图;
图3为本申请实施例中一种存在内存溢出漏洞的语法树结构示意图;
图4为本申请实施例中一种增加内存溢出保护逻辑的语法树结构图;
图5为本申请实施例中另一种增加内存溢出保护逻辑的语法树结构图;
图6为应用了本申请实施例所提供的内存溢出处理方法的编译器内部的软件结构图;
图7为本申请实施例中一种内存溢出处理装置的结构示意图;
图8为本申请实施例中一种内存溢出处理设备的结构示意图;
图9为本申请实施例中一种内存溢出处理设备的具体结构示意图。
具体实施方式
本申请的核心是提供一种内存溢出处理方法,可应用于编译器,如此,该编译其在具备工控语言(如LD、ST、CFC、FBD等)的编译功能的基础上,增加对内存溢出漏洞风险的代码逻辑进行自动检测功能,并针对所检测出的内存溢出漏洞逻辑,自动植入漏洞检测、修复逻辑。如此,程序在运行过程中,当检测到内存溢出情况发生时,漏洞修复逻辑会将内存越界代码逻辑失效,如此便可避免内存越界故障的发生,保护了有效数据不被篡改。
本申请的另一核心是提供一种内存溢出处理装置、设备和可读存储介质,具有上述技术效果。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
实施例一:
常规DCS组态程序编译执行部分的技术实现框架如图1所示,组态逻辑源码通常由LD、ST、CFC、FBD等工控语言编写完成。编译模块将这些源代码编译生成目标文件,组态软件通过通信链路将目标代码下载至控制器,控制器加载该目标代码并调度执行。编译模块是整个技术实现过程的核心模块,它实现了用户通过不同组态语言编写的组态程序源码到控制器可执行代码的统一转换。
传统的组态软件编译器主要包含两个部分:编译前端、编译后端。编译前端主要包括词法分析、语法分析、语意分析;编译后端主要包括代码优化、二进制代码生成模块。源代码经编译前端处理后,产生中间代码。中间代码是程序逻辑的另一种表达形式,可以有多种实现方式。
本申请实施例所提供的内存溢出处理方法应用到工控语言编译器之后,可在编译过程引入内存溢出漏洞监测过程,用于内存溢出漏洞扫描、内存溢出漏洞保护,该功能由组态软件的编译器在后台自动完成,对于组态工程师不可见。在本申请实施例中可采用语法森林结构作为中间代码的一种实现方式。语法森林由语法树组成,每一颗语法树是一种三叉树的数据结构,树的根节点例如IF、ADD、SUB等语法操作,树的子节点是变量节点、条件节点或其它操作节点。源代码经过编译前端处理之后,生成语法森林结构,由编译后端进一步处理。编译后端对中间代码进一步处理,产生目标代码。
请参考图2,图2为本申请实施例中一种内存溢出处理方法的流程图,该方法可应用于编译器(如工控语言编译器)中。该方法包括以下步骤:
S101、获取目标文件并对目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合。
其中,可直接从可读存储介质中读取目标文件,也可为组态逻辑源码转换后获得。具体的,可获取组态逻辑源码,并按照语法森林结构对组态逻辑源码进行归一化转换,获得目标文件。对于如何将组态逻辑源码表达为语法森林结构,可具体参照语法森林结构的具体定义和语法结构定义,在此不再一一赘述。
获得目标文件之后,便可对目标文件的语法森林进行检测,具体的目标文件的语法森林由语法树组成,且每一颗语法树是一种三叉数的数据结构,树的根节点为诸如IF、ADD、SUB等语法操作,树的子节点为变量节点、条件节点或气体操作节点。源代表经过编译前端处理之后,生成语法森林结构。
获得目标文件对应的语法森林之后,便可对该语法森林进行检查,以获得符合预设内存溢出漏洞特征规约的语法树结构集合。具体的,目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,包括:
步骤一、依次判断语法森林中的各个语法树结构是否满足预设内存溢出漏洞特征规约;
步骤二、将满足预设内存溢出漏洞特征规约的语法树结构添加至语法树结构集合中;
其中,预设内存溢出漏洞特征规约,包括:语法树结构与预设树形结构相同。
为便于描述,下面将上述两个步骤结合起来进行说明。
需要说明的是,本申请实施例对语法森林中具有包括多少个语法树结构,以及语法树结构的具体逻辑含义均不做限定。
其中,预设树形结构可具体为间接相对地址寻址的处理逻辑对应的语法树。例如,该预设树形结构可具有如下特征:
1、该语法树是一颗赋值操作树(即根节点为ASGN节点);
2、赋值操作树的左子树中(代表被写入的变量)包含算数运算操作树(例如,根节点为ADD节点);
3、算数运算节点的子节点中,存在为一颗取地址操作树(如根节点为ADDR节点);
4、算数运算操作树的子节点中,包含一个变量节点(如根节点为VAR节点)。
举例说明,在组态逻辑程序中包含一条数组赋值语句,如下所示。
compute_array[index]=0x1A;
这条语句即典型的存在内存溢出漏洞的语句,所对应的语法树结构如图3所示,其中,矩形框表示程序中的操作节点,平行四边(非矩形)代表程序中的符号节点。首先,该语法树结构的根节点为ASGN节点,满足上述第一条内存溢出漏洞特征判定规约;该ASGN节点的左子树的根节点为ADD节点,满足上述第二条内存溢出漏洞特征判定规约;在ADD节点下面的左子树是根节点为ADDR节点,满足上述第三条内存溢出漏洞特征判定规约;在ADD节点下面的右子树为根节点为VAR节点,满足上述第四条内存溢出漏洞特征判定规约。即,该语句对应的语法树为存在漏洞的语法树。
显然地,在本申请的其他实施例中,预设树形结构还可为其他情况,在此不再一一赘述。
获得满足预设树形结构的语法树结构之后,可将该语法树结构添加至语法树结构集合中。在具体实现过程中,可具体为对马娜在预设树形结构的语法树结构对应的内存地址添加标记的方式将其纳入语法树结构集合中。
优选地,在获得语法树结构集合之后,在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点之前,还包括:
利用预设内存溢出漏洞特征规约,对语法树结构集合内的各个语法树结构进行再次检测,以对语法树结构集合进行筛选。即,为了保证内存溢出漏洞扫描结果准确,还可对语法树结构集合中的语法树结构进行二次确认检查。检查过程可同样依据于内存溢出漏洞特征判断规约,最终判定出存在内存溢出漏洞中间代码对应的语法树结构,并对内存溢出漏洞中间代码进行标记,如对内存溢出漏洞中间代码对应的内存地址进行标记。
S102、在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合。
在获得目标文件对应的语法树结构集合之后,便可对存在内存溢出漏洞的语法树结构进行调整。具体的,即针对语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,将增加了内存溢出选择操作节点的语法树结构对应的集合称之为目标语法树结构集合。
具体的,获得目标语法树结构集合的具体实现过程,可为:在语法树结构集合内的各个语法树结构中增加内存溢出选择节点作为语法树结构的父节点;其中,内存溢出选择节点下包括选择结构逻辑判断子树,内存溢出漏洞修复与处理逻辑子树,语法树结构。
当内存溢出漏洞中间代码以语法树的形式存在,可在原有语法树的基础上,增加一个内存溢出选择操作节点。选择操作节点(IF_ELSE)下面有三个子节点,构成了一个三叉树结构。
在一种可能的情况中,左子树代表选择结构逻辑判断,中子树代表IF执行分支,右子树代表ELSE执行分支。如图4所示(图中虚线框内节点及分支即为新增内容),对原有语法树(即图3所示的语法树结构)的根节点(ASGN节点)增加一个内存溢出选择操作节点(IF_ELSE),作为原有语法树(即存在内存溢出漏洞的语法树结构)的父节点。原有语法树作为该选择操作节点(IF_ELSE)的中子树。其中,矩形框表示程序中的操作节点,平行四边(非矩形)代表程序中的符号节点。
其中,IF_ELSE左子树是内存漏洞溢出监测逻辑,该左子树的根节点为判断条件节点(GT),GT子树用于判断被写入数据的地址偏移是否超过了变量自身的所占用的内存地址范围。GT的左子树为一个ADD节点为根节点的子树,ADD子树完成对写入数据内存地址偏移的计算;GT的右子树是SIZE操作子树,该子树用于计算被写入变量对应的内存的空间大小。
其中,IF_ELSE的右子树为内存溢出漏洞修复与处理逻辑,该右子树屏蔽了原有的内存写入操作,从而避免的了内存溢出的发生。右子树的根节点为函数调用操作(CALL)节点,该函数调用操作节点为一个二叉树,其左子树代表函数参数,右子树代表函数调用。左子树函数参数包括组态程序逻辑单元ID号(POU_ID)、发生溢出的变量内存地址、时间等信息。右子树为MemDiagRecord()函数的调用,在该函数中完成了对内存溢出故障信息的记录,并将故障信息上报至操作员站,同时也将此信息保存于非易失存储介质中。
经过处理后的语法树结构,还可以进一步优化。将内存保护判定逻辑中的地址偏移赋值到局部变量。在IF执行分支进行赋值操作时,直接读取该局部变量,不必重新计算地址偏移,从而提高执行效率,如图5所示(图中虚线框内节点及分支即为新增内容)。其中,矩形框表示程序中的操作节点,平行四边(非矩形)代表程序中的符号节点。
对语法树结构集合中的语法树结构均完成节点增加操作之后,即可获得目标语法树结构集合。
S103、利用目标语法树结构集合对目标文件进行调整。
具体的,可利用目标语法树结构集合对语法森林中相应地语法树进行替换。此时,目标文件对应的语法森林即为调整了内存溢出漏洞逻辑的语法树构成的语法森林。
S104、利用调整后的目标文件进行内存溢出保护。
获得调整后的目标文件之后,该目标文件可由汇编模块进行处理,将其转化为对应逻辑的汇编代码,再通过目标代码生成模块生成目标代码(机器代码)。组态软件通过网络或串口通信的方式将目标代码下载至控制器,由控制器加载执行。
由于语法树已被修改,因,生成的目标代码也与调整修改后的语法树匹配,可实现内存保护。具体实现过程包括:
步骤一、利用选择结构逻辑判断子树确定是否出现内存溢出;
步骤二、如果是,则利用内存溢出漏洞修复与处理逻辑子树屏蔽内存写入操作;
步骤三、如果否,则利用语法树结构完成内存写入操作。
可见,基于该内存溢出选择操作节点以及其对应的子树,可进行内存溢出保护。
应用本申请实施例所提供的方法,获取目标文件并对目标文件的语法树森林结构进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;利用目标语法树结构集合对目标文件进行调整;利用调整后的目标文件进行内存溢出保护。
获得目标文件之后,对目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,即找出可能会导致内存溢出的赋值结构。然后,对该语法树结构集合中的各个语法树结构增加内存溢出选择操作节点,以避免出现内存溢出。最终,利用目标语法树结合对目标文件进行调整,调整后的目标文件便可进行内存溢出保护。可见,在本方法中不仅可检测出可能存在的内存溢出结构,还可针对该结构进行调整,以进行内存溢出保护。进一步,可降低控制器的内存溢出风险,可提升系统稳定性。
为便于本领域技术人员更好地理解本申请实施例所提供的内存溢出处理方法,下面结合具体的应用场景为例,对本申请实施例所提供的内存溢出处理方法进行详细说明。
请参考图6,图6为应用了本申请实施例所提供的内存溢出处理方法的编译器内部的软件结构图。即,在应用本申请实施例所提供的内存溢出处理方法时,在传统编译软件结构的基础上,在编译后端增加了内存溢出漏洞监控模块。该模块主要包含3个子模块:内存溢出漏洞扫描模块,内存溢出漏洞判定模块,内存溢出漏洞处理模块。
其中,内存溢出漏洞扫描模块首先对中间代码(同上文的目标文件)进行解析,扫描语法森林结构,对其可能存在内存溢出漏洞的语法树进行标记,被标记的语法树称之为内存溢出漏洞可疑中间代码。
其中,内存漏洞判定模块在对内存溢出漏洞可疑中间代码进行二次确认核查,最终判定出存在内存溢出漏洞中间代码。
其中,内存溢出漏洞处理模块对内存溢出漏洞中间代码继续处理,对其语法树进行改造,增加内存溢出保护逻辑。的内存溢出保护逻辑会在程序运行时被调用执行,对被存在漏洞的内存写入操作进行监测,当发现溢出写入错误时,采取保护动作,并向操作员站上报故障审计信息。
可见,应用了本申请实施例所提供的内存溢出处理方法的编译器,相对于现在常用的内存溢出漏洞检测方式,具有以下突出优点:
1、可靠性:相对于传统编译器静态检查或人工代码走查方式不能够检查控制器组态逻辑动态运行过程中的内存溢出情况。本申请实施例所提供的编译器,能够在控制器运行过程监测出组态逻辑内存溢出情况,并采取保护动作。相对于传统方式,更加全面、可靠。
2、易用性:本申请实施例所提供的编译器,在编译过程中后台进行内存溢出漏洞扫描与保护,该过程中对于组态工程师透明,更加方便易用。
3、扩展性:本申请实施例所提供的内存溢出漏洞监管模块,对中间代码进行漏洞扫描与保护,这样就可屏蔽了各种工控语言(LD、ST、CFC等)差别,未来所支持语言的扩展性更强。
实施例二:
相应于上面的方法实施例,本申请实施例还提供了一种内存溢出处理装置,下文描述的内存溢出处理装置与上文描述的内存溢出处理方法可相互对应参照。
参见图7所示,该装置包括以下模块:
内存溢出结构检测模块101,用于获取目标文件并对目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;
内存溢出结构优化模块102,用于在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;
目标文件调整模块103,用于利用目标语法树结构集合对目标文件进行调整;
内存溢出保护模块104,用于利用调整后的目标文件进行内存溢出保护。
应用本申请实施例所提供的装置,获取目标文件并对目标文件的语法树森林结构进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;利用目标语法树结构集合对目标文件进行调整;利用调整后的目标文件进行内存溢出保护。
获得目标文件之后,对目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,即找出可能会导致内存溢出的赋值结构。然后,对该语法树结构集合中的各个语法树结构增加内存溢出选择操作节点,以避免出现内存溢出。最终,利用目标语法树结合对目标文件进行调整,调整后的目标文件便可进行内存溢出保护。可见,在本装置中不仅可检测出可能存在的内存溢出结构,还可针对该结构进行调整,以进行内存溢出保护。进一步,可降低控制器的内存溢出风险,可提升系统稳定性。
在本申请的一种具体实施方式中,内存溢出结构检测模块101,具体用于获取组态逻辑源码,并按照语法森林结构对组态逻辑源码进行归一化转换,获得目标文件。
在本申请的一种具体实施方式中,内存溢出结构检测模块101,包括:
判断单元,应用依次语法森林中的各个语法树结构是否满足预设内存溢出漏洞特征规约;
记录单元,应用将满足预设内存溢出漏洞特征规约的语法树结构添加至语法树结构集合中;
其中,预设内存溢出漏洞特征规约,包括:语法树结构与预设树形结构相同。
在本申请的一种具体实施方式中,内存溢出结构优化模块102,具体用于在语法树结构集合内的各个语法树结构中增加内存溢出选择节点作为语法树结构的父节点;其中,内存溢出选择节点下包括选择结构逻辑判断子树,内存溢出漏洞修复与处理逻辑子树,语法树结构。
在本申请的一种具体实施方式中,内存溢出保护模块104,具体用于利用选择结构逻辑判断子树确定是否出现内存溢出;如果是,则利用内存溢出漏洞修复与处理逻辑子树屏蔽内存写入操作;如果否,则利用语法树结构完成内存写入操作。
在本申请的一种具体实施方式中,还包括:内存溢出漏洞判定模块,用于在获得语法树结构集合之后,在语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点之前,利用预设内存溢出漏洞特征规约,对语法树结构集合内的各个语法树结构进行再次检测,以对语法树结构集合进行筛选。
在本申请的一种具体实施方式中,目标文件调整模块103,具体用于利用目标语法树结构集合对语法森林中相应地语法树进行替换。
实施例三:
相应于上面的方法实施例,本申请实施例还提供了一种内存溢出处理设备,下文描述的一种内存溢出处理设备与上文描述的一种内存溢出处理方法可相互对应参照。
参见图8所示,该内存溢出处理设备包括:
存储器D1,用于存储计算机程序;
处理器D2,用于执行计算机程序时实现上述方法实施例的内存溢出处理方法的步骤。
具体的,请参考图9,图9为本实施例提供的一种内存溢出处理设备的具体结构示意图,该内存溢出处理设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在内存溢出处理设备301上执行存储介质330中的一系列指令操作。
内存溢出处理设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等。
上文所描述的内存溢出处理方法中的步骤可以由内存溢出处理设备的结构实现。
实施例四:
相应于上面的方法实施例,本申请实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种内存溢出处理方法可相互对应参照。
一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的内存溢出处理方法的步骤。
该可读存储介质具体可以为U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
Claims (9)
1.一种内存溢出处理方法,其特征在于,包括:
获取目标文件并对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;
在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;
利用所述目标语法树结构集合对所述目标文件进行调整;
利用调整后的目标文件进行内存溢出保护;
其中,所述利用调整后的目标文件进行内存溢出保护,包括:
获得调整后的所述目标文件之后,利用汇编模块将所述目标文件转化为对应逻辑的汇编代码,再通过目标代码生成模块生成目标代码;组态软件通过网络或串口通信的方式将所述目标代码下载至控制器,由控制器加载执行;
具体实现过程包括:
步骤一、利用选择结构逻辑判断子树确定是否出现内存溢出;
步骤二、如果是,则利用内存溢出漏洞修复与处理逻辑子树屏蔽内存写入操作;
步骤三、如果否,则利用所述语法树结构完成内存写入操作。
2.根据权利要求1所述的内存溢出处理方法,其特征在于,所述获取目标文件,包括:
获取组态逻辑源码,并按照语法森林结构对所述组态逻辑源码进行归一化转换,获得所述目标文件。
3.根据权利要求1所述的内存溢出处理方法,其特征在于,对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合,包括:
依次所述语法森林中的各个语法树结构是否满足所述预设内存溢出漏洞特征规约;
将满足所述预设内存溢出漏洞特征规约的语法树结构添加至所述语法树结构集合中;
其中,所述预设内存溢出漏洞特征规约,包括:语法树结构与预设树形结构相同。
4.根据权利要求1所述的内存溢出处理方法,其特征在于,在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合,包括:
在所述语法树结构集合内的各个语法树结构中增加所述内存溢出选择节点作为所述语法树结构的父节点;其中,所述内存溢出选择节点下包括选择结构逻辑判断子树,内存溢出漏洞修复与处理逻辑子树,所述语法树结构。
5.根据权利要求1所述的内存溢出处理方法,其特征在于,在获得语法树结构集合之后,在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点之前,还包括:
利用预设内存溢出漏洞特征规约,对所述语法树结构集合内的各个语法树结构进行再次检测,以对所述语法树结构集合进行筛选。
6.根据权利要求1至5任一项所述的内存溢出处理方法,其特征在于,利用所述目标语法树结构集合对所述目标文件进行调整,包括:
利用所述目标语法树结构集合对所述语法森林中相应地语法树进行替换。
7.一种内存溢出处理装置,其特征在于,包括:
内存溢出结构检测模块,用于获取目标文件并对所述目标文件的语法森林进行检测,获得符合预设内存溢出漏洞特征规约的语法树结构集合;
内存溢出结构优化模块,用于在所述语法树结构集合内的各个语法树结构中增加内存溢出选择操作节点,获得目标语法树结构集合;
目标文件调整模块,用于利用所述目标语法树结构集合对所述目标文件进行调整;
内存溢出保护模块,用于利用调整后的目标文件进行内存溢出保护;
其中,所述内存溢出保护模块,具体用于获得调整后的所述目标文件之后,利用汇编模块将所述目标文件转化为对应逻辑的汇编代码,再通过目标代码生成模块生成目标代码;组态软件通过网络或串口通信的方式将所述目标代码下载至控制器,由控制器加载执行;
具体实现过程包括:
步骤一、利用选择结构逻辑判断子树确定是否出现内存溢出;
步骤二、如果是,则利用内存溢出漏洞修复与处理逻辑子树屏蔽内存写入操作;
步骤三、如果否,则利用所述语法树结构完成内存写入操作。
8.一种内存溢出处理设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述内存溢出处理方法的步骤。
9.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述内存溢出处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910768851.3A CN110472411B (zh) | 2019-08-20 | 2019-08-20 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910768851.3A CN110472411B (zh) | 2019-08-20 | 2019-08-20 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110472411A CN110472411A (zh) | 2019-11-19 |
CN110472411B true CN110472411B (zh) | 2021-05-07 |
Family
ID=68512009
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910768851.3A Active CN110472411B (zh) | 2019-08-20 | 2019-08-20 | 一种内存溢出处理方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110472411B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112965851A (zh) * | 2021-03-30 | 2021-06-15 | 建信金融科技有限责任公司 | 内存溢出处理方法、装置、电子设备和存储介质 |
CN113268243B (zh) * | 2021-05-11 | 2024-02-23 | 网易(杭州)网络有限公司 | 内存预测方法及装置、存储介质、电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599046A (zh) * | 2009-06-26 | 2009-12-09 | 深圳市茁壮网络股份有限公司 | 一种内存检测方法及装置 |
CN106295322A (zh) * | 2016-07-26 | 2017-01-04 | 北京航空航天大学 | 一种针对缓冲区溢出攻击的硬件保护模型 |
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7080169B2 (en) * | 2001-12-11 | 2006-07-18 | Emulex Design & Manufacturing Corporation | Receiving data from interleaved multiple concurrent transactions in a FIFO memory having programmable buffer zones |
US6996677B2 (en) * | 2002-11-25 | 2006-02-07 | Nortel Networks Limited | Method and apparatus for protecting memory stacks |
DE602005024514D1 (de) * | 2005-03-31 | 2010-12-16 | Texas Instruments Inc | Verfahren und System zum Vereiteln und Neutralisieren von Pufferüberläufangriffen |
CN101286191B (zh) * | 2008-05-21 | 2011-01-12 | 成都市华为赛门铁克科技有限公司 | 一种缓冲区溢出攻击的防护方法、装置及系统 |
CN103455759B (zh) * | 2012-06-05 | 2017-03-15 | 深圳市腾讯计算机系统有限公司 | 一种页面漏洞检测装置及检测方法 |
CN108763928B (zh) * | 2018-05-03 | 2020-10-02 | 北京邮电大学 | 一种开源软件漏洞分析方法、装置和存储介质 |
CN109871693A (zh) * | 2019-02-21 | 2019-06-11 | 北京百度网讯科技有限公司 | 用于检测漏洞的方法和装置 |
-
2019
- 2019-08-20 CN CN201910768851.3A patent/CN110472411B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101599046A (zh) * | 2009-06-26 | 2009-12-09 | 深圳市茁壮网络股份有限公司 | 一种内存检测方法及装置 |
CN106295322A (zh) * | 2016-07-26 | 2017-01-04 | 北京航空航天大学 | 一种针对缓冲区溢出攻击的硬件保护模型 |
CN106294156A (zh) * | 2016-08-11 | 2017-01-04 | 北京邮电大学 | 一种静态代码缺陷检测分析方法及装置 |
Non-Patent Citations (2)
Title |
---|
Various Buffer Overflow Detection Means for Elbrus Microprocessors;Roman M. Rusiaev etc.;《IEEE》;20160116;第119-121页 * |
源代码安全漏洞检测方法研究;王跃;《中国优秀硕士学位论文全文数据库》;20141015;第2014卷(第10期);第27-35页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110472411A (zh) | 2019-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108985073B (zh) | 一种高度自动化的智能合约形式化验证系统及方法 | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
CN111736954B (zh) | 多智能合约虚拟机实现方法、多智能合约虚拟机及系统 | |
CN109086215B (zh) | 一种嵌入式软件单元测试用例生成方法及系统 | |
CN109062152B (zh) | 一种基于逻辑组态产生的Local变量在线监控方法 | |
CN109918081B (zh) | 一种编译方法及编译器 | |
US11215960B2 (en) | Engineering apparatus, control method of engineering apparatus, and program for generating executable code for controlling target hardware | |
CN110472411B (zh) | 一种内存溢出处理方法、装置、设备及可读存储介质 | |
CN110162474B (zh) | 一种基于抽象语法树的智能合约重入漏洞检测方法 | |
EP3379443A1 (en) | Method and computer device to deobfuscate a source code | |
CN101533454B (zh) | 编译方法 | |
CN106933642B (zh) | 应用程序的处理方法及处理装置 | |
US6381736B1 (en) | Method for compile-time type-checking of arguments for externally-specified format strings | |
CN115827116A (zh) | 函数调用方法、装置、设备及计算机可读存储介质 | |
JP2010140408A (ja) | ソースコード変換装置 | |
CN117667045A (zh) | 集成深度学习和plc语言的边缘控制器及代码生成方法 | |
CN115495745B (zh) | 一种基于风险函数的工业软件源代码静态检测方法及系统 | |
JP5038760B2 (ja) | ソースコード変換装置及びソースコード変換方法 | |
KR20190105774A (ko) | 스마트 계약 언어에서 함수 호출의 안전성 향상 방법 | |
CN111078270B (zh) | 应用安全管控方法、装置、电子设备及存储介质 | |
CN113946338B (zh) | 基于rinsim仿真平台的c语言编译方法及装置 | |
CN118556227A (zh) | 信息处理方法、装置、计算设备和计算机可读介质 | |
CN112527574B (zh) | 一种处理器测试方法、装置、设备及可读存储介质 | |
CN115827467A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |