本申请公开了一种系统内存处理方法、装置、电子设备及存储介质。包括:获取来自于目标应用程序的内存处理请求;响应于内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从目标地址中获取目标函数指针;基于目标函数指针指向的目标函数记录调用信息;在调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用原始函数指针指向的原始函数,为目标应用程序分配内存。本申请使用目标函数指针对原始函数指针进行替换,在系统调用原始函数时,先调用目标函数指针对应的目标函数记录调用信息,以此能够获取IOS客户端上内存分配及释放的情况,并对应用程序的内存分配进行监控,有利于后续维护应用程序的稳定性。的稳定性。的稳定性。
【技术实现步骤摘要】
一种系统内存处理方法、装置、电子设备及存储介质
[0001]本申请涉及计算机
,尤其涉及一种系统内存处理方法、装置、电子设备及存储介质。
技术介绍
[0002]目前,应用程序出现崩溃是对于用户影响非常大的,导致应用程序崩溃的原因包括:代码健壮性不足,或者应用程序内存占用过大,或者系统内存不足。其中在系统内存不足的情况下,会直接关闭应用程序的进程以回收系统内存。
[0003]因此,想要定位这种因内存占用过大导致的应用程序崩溃的情况,就需要对系统给应用程序分配的内存,以及应用程序释放的内存进行记录。现有技术中想要记录内存的分配及释放,一般采用hook内存分配及释放函数的方式,其中对于IOS的系统,可以通过method swizzling的方式hook“Objective
‑
C”函数,然而上述方式并不能对用于实现内存分配或释放的系统函数(例如:“malloc”函数、“calloc”函数、“free”函数)进行hook,以至于无法记录上述函数的调用场景以及调用信息,最终导致无法获取IOS客户端上所有内存分配及释放的情况。
技术实现思路
[0004]为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种系统内存处理方法、装置、电子设备及存储介质。
[0005]根据本申请实施例的一个方面,提供了一种系统内存处理方法,包括:
[0006]获取来自于目标应用程序的内存处理请求,其中,所述内存处理请求用于请求系统为所述目标应用程序分配内存;
[0007]响应于所述内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从所述目标地址中获取目标函数指针,其中,所述目标函数指针是对原始函数指针进行替换得到;
[0008]基于所述目标函数指针指向的目标函数记录调用信息;
[0009]在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数为所述目标应用程序分配内存。
[0010]进一步的,在所述获取内存处理请求之前,所述方法还包括:
[0011]获取用于替换所述目标应用程序中原始函数指针的更新信息,其中,所述更新信息包括:所述原始函数对应的字符串、所述目标函数指针、以及所述指定地址;
[0012]使用所述字符串查询所述原始函数指针当前所在的目标地址;
[0013]将所述目标函数指针写入所述目标地址,并所述原始函数指针的地址由所述目标地址变更为所述指定地址。
[0014]进一步的,所述使用所述字符串查询所述原始函数指针当前所在的目标地址,包括:
[0015]获取所述目标应用程序中指定格式文件的文件头以及偏移地址;
[0016]使用所述文件头以及所述偏移地址计算,得到表地址集合;
[0017]获取所述表地址集合对应的目标数据表集合;
[0018]从所述目标数据表集合中查询当前存储所述原始函数指针的目标地址。
[0019]进一步的,所述目标数据表集合包括:字符串数据表、符号数据表以及指针数据表;
[0020]所述从所述目标数据表集合中查询当前存储所述原始函数指针的目标地址,包括:
[0021]将所述字符串数据表中所述原始函数的字符串对应的字符串索引,确定为目标字符串索引;
[0022]将所述符号数据表中所述目标字符串索引对应的符号索引,确定为目标符号索引;
[0023]将所述指针数据表中查询所述目标符号索引对应的存储地址,确定为所述目标地址。
[0024]进一步的,在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数,为所述目标应用程序分配内存之后,所述方法还包括:
[0025]调用所述目标函数指针指向的目标函数,对所述目标应用程序进行监控得到内存释放信息;
[0026]基于所述内存释放信息与所述调用信息生成日志文件;
[0027]存储所述日志文件。
[0028]进一步的,在存储所述日志文件之后,所述方法还包括:
[0029]接收内存检测指令,并根据所述内存指令调用历史日志文件集合;
[0030]对所述历史日志文件集合中的内存释放信息进行检测,得到检测结果;
[0031]在所述历史日志文件集合中的内存释放信息达到内存释放上限的情况下,确定存在内存异常的应用程序,并对所述内存异常的应用程序执行相应的处理操作。
[0032]进一步的,所述对所述内存异常的应用程序执行相应的处理操作,包括:
[0033]确定所述内存异常的应用程序对应的异常类型;
[0034]根据异常类型与处理操作之间的对应关系,执行所述目标异常类型对应的目标异常处理操作。
[0035]根据本申请实施例的另一方面,还提供了一种系统内存处理装置,包括:
[0036]获取模块,用于获取来自于目标应用程序的内存处理请求,其中,所述内存处理请求用于请求系统为所述目标应用程序分配内存;
[0037]查询模块,用于响应于所述内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从所述目标地址中获取目标函数指针,其中,所述目标函数指针是对原始函数指针进行替换得到;
[0038]调用模块,用于基于所述目标函数指针指向的目标函数记录调用信息;
[0039]分配模块,用于在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数,为所述目标应用程序分配内存。
[0040]根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的步骤。
[0041]根据本申请实施例的另一方面,还提供了一种电子装置,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;其中:存储器,用于存放计算机程序;处理器,用于通过运行存储器上所存放的程序来执行上述方法中的步骤。
[0042]本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述方法中的步骤。
[0043]本申请实施例提供的上述技术方案与现有技术相比具有如下优点:本申请实施例使用目标函数指针对原始函数指针进行替换,在系统调用原始函数时,先调用目标函数指针对应的目标函数记录调用信息,以此能够获取IOS客户端上所有内存分配及释放的情况,并对应用程序的内存分配进行监控,有利于后续维护应用程序的稳定性,降低了应用程序的崩溃率。
附图说明
[0044]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
[0045]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种系统内存处理方法,其特征在于,包括:获取来自于目标应用程序的内存处理请求,其中,所述内存处理请求用于请求系统为所述目标应用程序分配内存;响应于所述内存处理请求,从系统文件中查询用于分配内存的原始函数指针的目标地址,并从所述目标地址中获取目标函数指针,其中,所述目标函数指针是对原始函数指针进行替换得到的;基于所述目标函数指针指向的目标函数记录调用信息;在所述调用信息记录完成的情况下,从指定地址获取原始函数指针,并调用所述原始函数指针指向的原始函数为所述目标应用程序分配内存。2.根据权利要求1所述的方法,其特征在于,在所述获取内存处理请求之前,所述方法还包括:获取用于替换所述目标应用程序中原始函数指针的更新信息,其中,所述更新信息包括:所述原始函数对应的字符串、所述目标函数指针、以及所述指定地址;使用所述字符串查询所述原始函数指针当前所在的目标地址;将所述目标函数指针写入所述目标地址,并将所述原始函数指针的地址由所述目标地址变更为所述指定地址。3.根据权利要求2所述的方法,其特征在于,所述使用所述字符串查询所述原始函数指针当前所在的目标地址,包括:获取所述目标应用程序中指定格式文件的文件头以及偏移地址;使用所述文件头以及所述偏移地址计算,得到表地址集合;获取所述表地址集合对应的目标数据表集合;从所述目标数据表集合中查询所述原始函数指针当前所在的目标地址。4.根据权利要求3所述的方法,其特征在于,所述目标数据表集合包括:字符串数据表、符号数据表以及指针数据表;所述从所述目标数据表集合中查询所述原始函数指针当前所在的目标地址,包括:将所述字符串数据表中所述原始函数的字符串对应的字符串索引,确定为目标字符串索引;将所述符号数据表中所述目标字符串索引对应的符号索引,确定为目标符号索引;将所述指针数据表中查询所述目标符号索引对应的存储地址,确定为所述目标地址。5.根据权利要求1所述的方法,其特征在于,在所述调用信息用于指示所述内存处理请求正常的情况下,从指定地址获取原始函数指针,并调用所述原始函...
【专利技术属性】
技术研发人员:冀睿哲,杨子斌,王仕俊,
申请(专利权)人:北京奇艺世纪科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。