用于内存泄露漏洞的检测方法和装置的制造方法
【技术领域】
[0001]本发明涉及漏洞检测领域,具体而言,涉及一种用于内存泄露漏洞的检测方法和
目-Ο
【背景技术】
[0002]现有技术中,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,会发生内存泄露。
[0003]例如,在移动终端上某个应用程序不停地申请内存,如请求查看图片Α,但是一直都没有反馈,内存耗完,该应用程序会发生异常,这就是内存泄露的场景。
[0004]在现有技术中可以通过内存泄露检测工具检测内存泄露。具体地,Android产品的内存测试分为java层与native层(原生层),java层分析以抓取Android某个运行态下的内存镜像,通过静态分析方式来执行,但是现有分析工具MAT (Memory Analyzer)无法展示内存镜像中存放的图片,无法判定内存镜像中的图片是否和当前操作吻合。其中,正常情况下内存镜像中的图片和当前操作界面或逻辑相吻合,如果内存镜像中的图片和当前操作不吻合很可能是发生了程序bug。如果无法判定内存镜像中的图片是否和当前操作吻合,则无法确定程序是否发生bug。
[0005]现有技术中判断内存镜像中的图片和当前操作界面或逻辑是否相吻合,如图1所示,在检测过程中,分析工作窗口中获取的内存数据的内存对象记录10’中仅仅会显示图片的名称和图片的宽高(图中未示出),然后可以通过获取到的宽高和文件名到后台查找代码逻辑,使用超找到的代码逻辑判断此处是否存在内存泄露,使用这种方式处理流程长,操作复杂,成本高;且由于处理流程长判断结果准确性低。
[0006]针对上述的通过查询图片对象的代码逻辑检测内存泄露漏洞,检测准确性低的问题,目前尚未提出有效的解决方案。
【发明内容】
[0007]本发明实施例提供了一种用于内存泄露漏洞的检测方法和装置,以至少解决通过查询图片对象的代码逻辑检测内存泄露漏洞,检测准确性低的技术问题。
[0008]根据本发明实施例的一个方面,提供了一种用于内存泄露漏洞的检测方法,该检测方法包括:获取内存数据中当前选定的内存对象记录,其中,内存数据为终端的内存记录的使用终端上应用程序时产生的数据,内存数据中包括一条或多条内存对象记录;在预定展示区域绘制当前选定的内存对象记录所指示的对象图片;判断对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,得到判断结果;使用判断结果确定应用程序是否存在内存泄露漏洞。
[0009]根据本发明实施例的另一方面,还提供了一种用于内存泄露漏洞的检测装置,该检测装置包括:获取模块,用于获取内存数据中当前选定的内存对象记录,其中,内存数据为终端的内存记录的使用终端上应用程序时产生的数据,内存数据中包括一条或多条内存对象记录;绘制模块,用于在预定展示区域绘制当前选定的内存对象记录所指示的对象图片;第一判断模块,用于判断对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,得到判断结果;第一确定模块,用于使用判断结果确定应用程序是否存在内存泄露漏洞。
[0010]通过本发明实施例,在获取内存数据中当前选定的内存对象记录之后,在预定展示区域绘制当前选定的内存对象记录所指示的对象图片,然后通过对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,确定应用程序是否存在内存泄露漏洞。在上述实施例中,通过预定展示区域中展示的图片,可以直观准确判断应用程序是否存在内存泄露漏洞,从而解决了现有技术中通过查询图片对象的代码逻辑检测内存泄露漏洞,检测准确性低的问题,实现了准确检测因图片产生的内存泄露漏洞的效果。
【附图说明】
[0011]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0012]图1是根据现有技术的一种检测方法的示意图;
[0013]图2是根据本发明实施例的用于内存泄露漏洞的检测方法的环境示意图;
[0014]图3是根据本发明实施例的用于内存泄露漏洞的检测方法的流程图;
[0015]图4是根据本发明实施例的预定展示区域的示意图;
[0016]图5是根据本发明实施例的一种绘制内存对象记录所指示的图片的方法;
[0017]图6是根据本发明实施例的一种可选的获取内存对象记录的流程图;
[0018]图7是根据本发明实施例的获取位图对象的像素属性数据和尺寸属性数据的流程图;
[0019]图8是根据本发明实施例的用于内存泄露漏洞的检测装置的示意图;以及
[0020]图9是根据本发明实施例的一种终端的结构框图。
【具体实施方式】
[0021 ] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0022]需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0023]实施例1
[0024]根据本发明实施例,提供了一种用于内存泄露漏洞的检测方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0025]可选地,在本实施例中,上述图片的传输方法可以应用于如图2所示的第一终端101所构成的硬件环境中。如图2所示,第一终端可以通过网络或数据线与第二终端102连接,向第二终端102上传或下载数据。
[0026]上述网络包括但不限于:广域网、城域网或局域网。在本发明实施例中,上述的终端可以为移动终端、个人电脑,具体地,移动终端和个人电脑可以为智能手机、平板电脑、PDA 等。
[0027]根据本发明实施例,提供了一种用于内存泄露漏洞的检测方法,如图3所示,该方法可以包括如下步骤:
[0028]步骤S302:获取内存数据中当前选定的内存对象记录,其中,内存数据为终端的内存记录的使用终端上应用程序时产生的数据,内存数据中包括一条或多条内存对象记录。
[0029]步骤S304:在预定展示区域绘制当前选定的内存对象记录所指示的对象图片。
[0030]步骤S306:判断对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,得到判断结果。
[0031]步骤S308:使用判断结果确定应用程序是否存在内存泄露漏洞。
[0032]通过本发明实施例,在获取内存数据中当前选定的内存对象记录之后,在预定展示区域绘制当前选定的内存对象记录所指示的对象图片,然后通过对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,确定应用程序是否存在内存泄露漏洞。在上述实施例中,通过预定展示区域中展示的图片,可以直观准确判断应用程序是否存在内存泄露漏洞,从而解决了现有技术中通过查询图片对象的代码逻辑检测内存泄露漏洞,检测准确性低的问题,实现了准确检测因图片产生的内存泄露漏洞的效果。
[0033]其中,上述实施例中的步骤S306:判断对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,得到判断结果,可以通过如下方法实现:
[0034]获取对象图片的第一图片信息,并获取终端缓存的缓存图片的第二图片信息和应用程序的当前界面显示的图片的第三图片信息,通过比较第一图片信息和第二图片信息判断对象图片是否存在于终端的缓存中;以及通过比较第一图片信息和第三图片信息判断对象图片是否为应用程序的当前界面显示的图片。
[0035]具体地,若存在与第一图片信息一致的第二图片信息,则确定对象图片存在于终端的缓存中;若不存在与第一图片信息一致的第二图片信息,则确定对象图片不存在于终端的缓存中。若第三图片信息与第一图片信息一致,则确定对象图片为应用程序的当前界面显示的图片;若第三图片信息与第一图片信息不一致,则确定对象图片不为应用程序的当前界面显示的图片。
[0036]如图4所示的内存对象记录10和预定绘制区域30。
[0037]本发明的上述实施例中,在预定展示区域绘制当前选定的内存对象记录所指示的对象图片可以包括:根据当前选定的内存对象记录的内存对象ID获取内存对象的对象属性数据;在通过对象属性数据确定内存对象为位图对象的情况下,从终端的内存中读取位图对象的像素属性数据和尺寸属性数据;基于位图对象的像素属性数据和尺寸属性数据生成位图对象的图像对象;将图像对象绘制在预定展示区域,以展示对象图片。
[0038]具体地,基于位图对象的像素属性数据和尺寸属性数据生成位图对象的图像对象可以包括:对像素属性数据和尺寸属性数据进行像素解码,得到像素解析数组;获取像素解析数组中各个元素的像素颜色,其中,像素解析数组中每个元素代表位图对象中的一个像素;基于各个元素的像素颜色和尺寸属性数据生成位图对象的图像对象。
[0039]在本发明一个可选的实施例中,对像素属性数据和尺寸属性数据进行像素解码,得到像素解析数组可以包括:根据尺寸属性数据的高度和尺寸属性数据的宽度生成原始像素矩阵,其中,尺