一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种系统内存处理方法、装置、电子设备及存储介质与流程

2022-02-20 04:34:48 来源:中国专利 TAG:
1.本技术涉及计算机
技术领域
:,尤其涉及一种系统内存处理方法、装置、电子设备及存储介质。
背景技术
::2.目前,应用程序出现崩溃是对于用户影响非常大的,导致应用程序崩溃的原因包括:代码健壮性不足,或者应用程序内存占用过大,或者系统内存不足。其中在系统内存不足的情况下,会直接关闭应用程序的进程以回收系统内存。3.因此,想要定位这种因内存占用过大导致的应用程序崩溃的情况,就需要对系统给应用程序分配的内存,以及应用程序释放的内存进行记录。现有技术中想要记录内存的分配及释放,一般采用hook内存分配及释放函数的方式,其中对于ios的系统,可以通过methodswizzling的方式hook“objective-c”函数,然而上述方式并不能对用于实现内存分配或释放的系统函数(例如:“malloc”函数、“calloc”函数、“free”函数)进行hook,以至于无法记录上述函数的调用场景以及调用信息,最终导致无法获取ios客户端上所有内存分配及释放的情况。技术实现要素:4.为了解决上述技术问题或者至少部分地解决上述技术问题,本技术提供了一种系统内存处理方法、装置、电子设备及存储介质。5.根据本技术实施例的一个方面,提供了一种系统内存处理方法,包括:6.获取来自于目标应用程序的内存处理请求,其中,所述内存处理请求用于请求系统为所述目标应用程序分配内存;7.响应于所述内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从所述目标地址中获取目标函数指针,其中,所述目标函数指针是对原始函数指针进行替换得到;8.基于所述目标函数指针指向的目标函数记录调用信息;9.在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数为所述目标应用程序分配内存。10.进一步的,在所述获取内存处理请求之前,所述方法还包括:11.获取用于替换所述目标应用程序中原始函数指针的更新信息,其中,所述更新信息包括:所述原始函数对应的字符串、所述目标函数指针、以及所述指定地址;12.使用所述字符串查询所述原始函数指针当前所在的目标地址;13.将所述目标函数指针写入所述目标地址,并所述原始函数指针的地址由所述目标地址变更为所述指定地址。14.进一步的,所述使用所述字符串查询所述原始函数指针当前所在的目标地址,包括:15.获取所述目标应用程序中指定格式文件的文件头以及偏移地址;16.使用所述文件头以及所述偏移地址计算,得到表地址集合;17.获取所述表地址集合对应的目标数据表集合;18.从所述目标数据表集合中查询当前存储所述原始函数指针的目标地址。19.进一步的,所述目标数据表集合包括:字符串数据表、符号数据表以及指针数据表;20.所述从所述目标数据表集合中查询当前存储所述原始函数指针的目标地址,包括:21.将所述字符串数据表中所述原始函数的字符串对应的字符串索引,确定为目标字符串索引;22.将所述符号数据表中所述目标字符串索引对应的符号索引,确定为目标符号索引;23.将所述指针数据表中查询所述目标符号索引对应的存储地址,确定为所述目标地址。24.进一步的,在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数,为所述目标应用程序分配内存之后,所述方法还包括:25.调用所述目标函数指针指向的目标函数,对所述目标应用程序进行监控得到内存释放信息;26.基于所述内存释放信息与所述调用信息生成日志文件;27.存储所述日志文件。28.进一步的,在存储所述日志文件之后,所述方法还包括:29.接收内存检测指令,并根据所述内存指令调用历史日志文件集合;30.对所述历史日志文件集合中的内存释放信息进行检测,得到检测结果;31.在所述历史日志文件集合中的内存释放信息达到内存释放上限的情况下,确定存在内存异常的应用程序,并对所述内存异常的应用程序执行相应的处理操作。32.进一步的,所述对所述内存异常的应用程序执行相应的处理操作,包括:33.确定所述内存异常的应用程序对应的异常类型;34.根据异常类型与处理操作之间的对应关系,执行所述目标异常类型对应的目标异常处理操作。35.根据本技术实施例的另一方面,还提供了一种系统内存处理装置,包括:36.获取模块,用于获取来自于目标应用程序的内存处理请求,其中,所述内存处理请求用于请求系统为所述目标应用程序分配内存;37.查询模块,用于响应于所述内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从所述目标地址中获取目标函数指针,其中,所述目标函数指针是对原始函数指针进行替换得到;38.调用模块,用于基于所述目标函数指针指向的目标函数记录调用信息;39.分配模块,用于在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数,为所述目标应用程序分配内存。40.根据本技术实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的步骤。41.根据本技术实施例的另一方面,还提供了一种电子装置,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;其中:存储器,用于存放计算机程序;处理器,用于通过运行存储器上所存放的程序来执行上述方法中的步骤。42.本技术实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述方法中的步骤。43.本技术实施例提供的上述技术方案与现有技术相比具有如下优点:本技术实施例使用目标函数指针对原始函数指针进行替换,在系统调用原始函数时,先调用目标函数指针对应的目标函数记录调用信息,以此能够获取ios客户端上所有内存分配及释放的情况,并对应用程序的内存分配进行监控,有利于后续维护应用程序的稳定性,降低了应用程序的崩溃率。附图说明44.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。45.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。46.图1为本技术实施例提供的一种系统内存处理方法的流程图;47.图2为本技术另一实施例提供的一种系统内存处理方法的流程图;48.图3为本技术另一实施例提供的一种系统内存处理方法的流程图;49.图4为本技术实施例提供的一种系统内存处理装置的框图;50.图5为本技术实施例提供的一种电子设备的结构示意图。具体实施方式51.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。52.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个类似的实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。53.本技术实施例提供了一种系统内存储处理方法、装置、电子设备及存储介质。本发明实施例所提供的方法可以应用于任意需要的电子设备,例如,可以为服务器、终端等电子设备,在此不做具体限定,为描述方便,后续简称为电子设备。54.在现有技术中,对于ios系统的操作设备,一般都采用methodswizzling来hook内存分配及释放函数,但是该方式无法hook部分系统函数,例如malloc函数,calloc函数,free函数等等,这样就会导致上述函数无法直接调用。55.其中,malloc的全称是memoryallocation函数,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。56.calloc函数功能:在内存的动态存储区中分配num个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回null。57.为了解决上述问题,本技术实施例对ios系统中mach-o文件的文件结构进行分析,得到了函数指针的查找和调用流程,并在函数指针的查找过程中,将函数指针进行替换,最终实现hook系统函数。58.其中,mach-o为machobject文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,mach-o提供了更强的扩展性,并提升了符号表中信息的访问速度。59.需要说明的是,开发商为了能在mach-o文件中访问外部函数,采用了pic(位置代码独立)技术。当应用程序内部需要调用系统的库函数时,会在mach-o文件的data段中建立一个指针,这个指针变量指向外部函数,动态连接器会动态的进行绑定,将mach-o文件中的data段中的指针,指向外部函数。所以,本技术实施例通过分析系统中函数指针的查找和调用流程,找到原始系统函数指针,对原始函数指针进行替换,并在动态连接器中重新进行绑定,以此实现了函数指针进行替换。具体实现过程如下:60.图1为本技术实施例提供的一种系统内存处理方法的流程图,如图1所示,该方法包括:61.步骤s11,获取用于替换目标应用程序中原始函数指针的更新信息,其中,更新信息包括:原始函数对应的字符串、目标函数指针、以及指定地址。62.在本技术实施例中,更新信息可以是根据用户输入的信息得到,更新信息中包括:原始函数对应的字符串、目标函数指针、以及指定地址。作为一个示例,原始函数对应的字符串可以是:malloc,目标函数指针可以是:my_malloc,指定地址可以是p1。63.步骤s12,使用字符串查询当前存储原始函数指针的目标地址;64.在本技术实施例中,步骤s12,使用字符串查询当前存储原始函数指针的目标地址,包括以下步骤a1-a4:65.步骤a1,获取目标应用程序中指定格式文件的文件头以及偏移地址。66.步骤a2,使用文件头以及偏移地址计算,得到表地址集合。67.在本技术实施例中,指定格式的文件头为mach_header,该文件头中携带有多个段地址,然后采用段地址与偏移地址进行计算,最终得到表地址集合,其中,表地址集合中的每个表地址对应一个数据表。68.作为一个示例,段地址与偏移地址的计算过程可以是:69.表地址=段地址×10h 偏移地址,例,表地址=1000h×10h 0001h=10001h。70.步骤a3,获取表地址集合对应的目标数据表集合。71.在本技术实施例中,目标数据表集合包括:字符串数据表、符号数据表以及指针数据表;作为一个示例,字符串数据表可以是:stringtable,符号数据表可以是:symboltable指针数据表可以是:lazysymbolpointertable。72.步骤a4,从目标数据表集合中查询原始函数指针当前所在的目标地址。73.在本技术实施例中,步骤a4,从目标数据表集合中查询原始函数指针当前所在的目标地址,包括以下步骤a41-a43:74.步骤a41,将字符串数据表中原始函数的字符串对应的字符串索引,确定为目标字符串索引。75.步骤a42,将符号数据表中目标字符串索引对应的符号索引,确定为目标符号索引。76.步骤a43,将指针数据表中查询目标符号索引对应的存储地址,确定为目标地址。77.作为一个示例,(1)使用更新信息携带的原始函数的字符串,在stringtable(字符串数据表)中查找,找到与该字符串相匹配的字符串索引时,将其记录为stringindex。78.(2)遍历symboltable(第一符号数据表),此table包含了一系列nlist_tstruct,当其中某个指针中的n_un.n_strx等于stringindex时,获取该符号索引在symboltable的位置,记录为symbolindex。79.(3)遍历indirectsymboltable(第二符号数据表),此table是一个包含了一系列数字,每个数字均为nlist_tstruct在symboltable中的index,当找到symbolindex对应的数字时,将该数字记录为indirectsymbolindex。80.(4)在lazysymbolpointertable(指针数据表)查找index为indirectsymbolindex,即为原始函数指针所在的目标地址。81.步骤s13,将目标函数指针写入目标地址,并原始函数指针的存储地址由目标地址变更为指定地址。82.在本技术实施例中,在得到目标地址之后,将目标函数指针插入到目标地址,并将原始函数指针存储至指定地址,以此实现了函数指针的重新绑定,当后续调用原始函数时,首先代用目标函数指针指向的目标函数,通过目标函数记录调用信息,最终达到系统对应用程序内存情况的监控。83.根据本技术实施例的一方面,提供了一种系统内存处理方法的方法实施例。图2为本技术实施例提供的一种系统内存处理方法的流程图,如图2所示,该方法包括:84.步骤s21,获取来自于目标应用程序的内存处理请求,其中,内存处理请求用于请求系统为目标应用程序分配内存。85.在本技术实施例中,目标应用程序在面临内存不足的情况下,需要向系统请求分配内存,从而避免系统因应用程序内存占用过大将应用程序强制退出的情况,因此应用程序会主动向系统发送内存处理请求。86.步骤s22,响应于内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从目标地址中获取目标函数指针,其中,目标函数指针是对原始函数指针进行替换得到。87.在本技术实施例中,系统在接受到内存处理请求后,会从系统文件中获取用于分配内存的原始函数指针,以及原始函数指针所在的目标地址,需要说明的是,在系统找到原始函数指针所在的目标地址时,目标地址上的原始函数指针已经被替换为目标函数指针。88.因此,系统在响应内存处理请求之后,从目标地址得到的是目标函数指针。89.步骤s23,基于目标函数指针指向的目标函数记录调用信息。90.在本技术实施例中,调用目标函数指针指向的目标函数,并采用目标函数对调用信息进行记录。调用信息包括:调用堆栈和调用参数。91.本技术实施例使用目标函数指针对原始函数指针进行替换,在系统调用原始函数时,先调用目标函数指针对应的目标函数记录调用信息,以此对应用程序的内存分配进行监控,有利于维护应用程序的稳定性,降低了应用程序的崩溃率。92.步骤s24,在调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用原始函数指针指向的原始函数,为目标应用程序分配内存。93.在本技术实施例中,通过分析mach-o文件结构,能够得到mach-o文件调用系统函数的调用流程,通过分析调用流程,动态查找调用系统库函数指针的关键位置,将此函数指针保留,替换成预先设置的函数指针,并利用替换后的函数指针对应的函数,记录相应的调用参数及调用堆栈,最后调用原有函数指针,从而实现hook系统的内存与释放函数。94.本技术实施例使用目标函数指针对原始函数指针进行替换,在系统调用原始函数时,先调用目标函数指针对应的目标函数记录调用信息,以此能够获取ios客户端上所有内存分配及释放的情况,并对应用程序的内存分配进行监控,有利于后续维护应用程序的稳定性,降低了应用程序的崩溃率。95.在调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用原始函数指针指向的原始函数,为目标应用程序分配内存之后,本技术实施例提供的一种系统内存处理方法,如图3所示,该方法包括:96.步骤s31,使用目标函数指针调用目标函数,对目标应用程序进行监控得到内存释放信息;97.步骤s32,基于内存释放信息与调用信息生成日志文件;98.步骤s33,存储日志文件。99.在本技术实施例中,在对目标应用程序分配内存后,还可以调用目标函数监控目标应用程序对分配内存的使用情况,并将每一条使用情况记录到内存释放信息。同时,将内存释放信息与调用信息生成日志文件并存储,目的是为了后续目标应用程序进行安全检测,确定目标应用程序是否存在内存隐患,对后续维护应用程序的稳定提供了可靠的依据。100.在本技术实施例中,在存储日志文件之后,方法还包括以下步骤c1-c3:101.步骤c1,接收内存检测指令,并根据内存指令调用历史日志文件集合。102.步骤c2,对历史日志文件集合中的内存释放信息进行检测,得到检测结果。103.步骤c3,在历史日志文件集合中的内存释放信息达到内存释放上限的情况下,确定存在内存异常的应用程序,并对内存异常的应用程序执行相应的处理操作。104.在本技术实施例中,内存释放信息达到内存释放上限至少包括:内存释放频率大于释放频率上限、内存释放容量大于预设容量上限等等。105.在本技术实施例中,步骤c3,对内存异常的应用程序执行相应的处理操作,包括:确定内存异常的应用程序对应的异常类型根据异常类型与处理操作之间的对应关系,执行目标异常类型对应的目标异常处理操作。106.在本技术实施例中,不同异常类型对应的处理操作不同,作为一个示例,内存释放频率大于释放频率上限时,目标异常处理操作为,限制应用程序的分配内存的频率。内存释放容量大于预设容量上限时,将内存释放容量进行拆分,按照预设频率进行分配。107.在本技术实施例中,通过记录ios客户端上所有内存分配及释放的情况,并在客户端发生内存问题后,将相关日志回收。通过分析日志,可以定位到引发内存问题的具体位置,也可以发现那些位置有内存使用隐患,如申请大内存、频繁申请内存、申请的内存在业务场景退出后还未释放等等。解决这些问题,可以大大提高客户端的稳定性,从而降低崩溃率,提升用户体验。108.图4为本技术实施例提供的一种系统内存处理装置的框图,该装置可以通过软件、硬件或者两者的结合实现成为电子设备的部分或者全部。如图4所示,该装置包括:109.获取模块41,用于获取内存处理请求,其中,内存处理请求用于为目标应用程序申请内存;110.查询模块42,用于响应于内存处理请求,从系统数据库中获取目标函数指针,其中,目标函数指针包括:目标函数指针以及目标应用程序中的原始函数指针;111.调用模块43,用于基于目标函数指针指向的目标函数记录调用信息;112.分配模块44,用于在确定调用信息记录完成的情况下,使用原始函数指针调用原始函数指针指向的原始函数,为目标应用程序分配内存。113.在本技术实施例中,该装置还包括:变更模块,包括:114.获取子模块,用于获取用于替换目标应用程序中原始函数指针的更新信息,其中,更新信息包括:原始函数对应的字符串、目标函数指针、以及用于存储原始函数指针的指定地址;115.查询子模块,用于使用字符串查询当前存储原始函数指针的目标地址;116.执行子模块,用于将目标函数指针写入目标地址,并原始函数指针的存储地址由目标地址变更为指定地址。117.在本技术实施例中,该装置还包括:查询子模块,用于获取目标应用程序中指定格式文件的文件头以及偏移地址;使用文件头以及偏移地址计算,得到表地址集合;获取表地址集合对应的目标数据表集合;从目标数据表集合中查询当前存储原始函数指针的目标地址。118.在本技术实施例中,目标数据表集合包括:字符串数据表、符号数据表以及指针数据表;119.查询模块,用于将字符串数据表中原始函数的字符串对应的字符串索引,确定为目标字符串索引;将符号数据表中目标字符串索引对应的符号索引,确定为目标符号索引;将指针数据表中查询目标符号索引对应的存储地址,确定为目标地址。120.在本技术实施例中,该装置还包括:监控模块,用于使用目标函数指针调用目标函数,对目标应用程序进行监控得到内存释放信息;基于内存释放信息与调用信息生成日志文件;存储日志文件。121.在本技术实施例中,该装置还包括:检测模块,该模块用于获取历史日志文件集合;对历史日志文件集合进行检测,得到检测结果;在检测结果用于指示存在内存异常应用程序的情况下,执行检测结果对应的目标处理操作。122.在本技术实施例中,检测模块,用于从检测结果中获取出现内存异常的异常应用程序,以及异常应用的目标异常类型;根据异常类型与处理操作之间的对应关系,执行目标异常类型对应的目标异常处理操作。123.本技术实施例还提供一种电子设备,如图5所示,电子设备可以包括:处理器1501、通信接口1502、存储器1503和通信总线1504,其中,处理器1501,通信接口1502,存储器1503通过通信总线1504完成相互间的通信。124.存储器1503,用于存放计算机程序;125.处理器1501,用于执行存储器1503上所存放的计算机程序时,实现上述实施例的步骤。126.上述终端提到的通信总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。127.通信接口用于上述终端与其他设备之间的通信。128.存储器可以包括随机存取存储器(randomaccessmemory,简称ram),也可以包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。129.上述的处理器可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现场可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。130.在本技术提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的文件检测方法。131.在本技术提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的文件检测方法。132.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk)等。133.以上所述仅为本技术的较佳实施例而已,并非用于限定本技术的保护范围。凡在本技术的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本技术的保护范围内。134.以上所述仅是本技术的具体实施方式,使本领域技术人员能够理解或实现本技术。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献