用于内存泄露漏洞的检测方法和装置的制造方法_2

文档序号:9616191阅读:来源:国知局
寸属性数据的高度值为N,尺寸属性数据的宽度值为M,原始像素矩阵为N行Μ列的矩阵或为Ν列Μ行的矩阵,尺寸属性数据的高度和尺寸属性数据的宽度以像素为单位;从像素属性数据中获取原始像素矩阵中各个元素的颜色通道数据,其中,颜色通道数据包括透明度通道数据、红色通道数据、绿色通道数据和蓝色通道数据;将各个元素的颜色通道数据保存入原始像素矩阵的元素中,得到像素解析数组。
[0040]需要进一步说明的是,获取像素解析数组中各个元素的像素颜色可以包括:依次在颜色表中检索像素解析数组中各个元素的像素颜色。
[0041]下面结合附图5详细介绍本发明。如图5所示,本发明的上述实施例可以通过如下步骤实现:
[0042]步骤S501:使用预设的图片配色信息对位图对象的像素属性数据和尺寸属性数据进行解码处理得到像素解析数组。
[0043]具体地,得到了待分析图片对象的像素缓冲、高、宽参数后,就可以按照用户选择的配色方案(即上述实施例中的预设的图片配色信息,如ARGB8888、RGB565或ARGB4444)来进行解码了。
[0044]下面以预设的图片配色信息为ARGB8888配色方案为应用场景,详细介绍本发明:
[0045]获取到的位图图片的尺寸属性数据中的宽高是400*400,那么就有160000个32位(bit)像素缓冲。其中,32位像素缓冲是因为Android对ARGB8888的定义为Alpha通道 8bit, Red 通道 8bit, Green 通道 8bit, Blue 通道 8bit,四个 8bit 相加就是 32bit 了 ;然后把获取到的图片的像素缓冲按照32位一节的单位,逐个分出Alpha, Red, Green, Blue四个颜色通道数据;建立一个int32型变量,用位移操作,将blue (即上述实施例中的蓝色通道数据)放置到变量的低8位,Green(即上述实施例中的绿色通道数据)放置到变量的8-16位,Red(即上述实施例中的红色通道数据)放置到变量的16-32位,Alpha(即上述实施例中的透明度通道数据)放置到变量的高八位,这样就完成了一个像素点的颜色初步解析,得到一个int32型的像素解析数组int [160000]。
[0046]步骤S502:获取像素解析数组中各个元素的像素颜色,得到像素颜色集合。
[0047]上述步骤中得到的像素解析数据中每个元素为对应像素的调色板取色序列号,可以通过该元素数据来获取颜色表中对应的颜色,得到像素颜色集合。
[0048]其中,上述实施例中的像素颜色为用于屏幕显示的原始像素颜色,这里使用的颜色表(如设备调色板)可以为“直接颜色模型”。
[0049]步骤S503:使用像素颜色和尺寸属性数据生成位图对象的图片数据,通过该图片数据的构造函数得到图像对象。
[0050]具体地,使用调色板逐个检索出像素解析矩阵中的像素颜色后,生成每像素用4个int32描述的数据组,将像素颜色和图片的高宽一起构造一个图像数据ImageData,并通过图片数据ImageData的构造函数来最终得到一个图像对象(Image对象)。
[0051]步骤S504:将图像对象绘制到预定展示区域。
[0052]将这个Image对象绘制到如图4所示的Gavans控件上,B卩可显示出当前选定的被分析的图像对象(即上述实施例中的对象图片)。
[0053]在本发明的上述实施例中,获取内存数据中当前选定的内存对象记录可以包括:创建数据监听接口 ;调用数据监听接口监听工作窗口中的当前选定的内存对象记录,其中,工作窗口中显示有内存数据。
[0054]具体地,调用数据监听接口监听工作窗口中的当前选定的内存对象记录可以包括:通过数据监听接口监听在工作窗口中发生的当前选择事件;从当前选择事件中提取内存对象ID ;获取内存对象ID所指示的当前选定的内存对象记录。
[0055]如图6所示,本发明的上述实施例可以通过如下步骤实现:
[0056]步骤S601:创建集成开发环境标准窗口类。
[0057]在该实施例中创建eclipse (即集成开发环境)标准窗口类(SWT—StandardWidget Toolkit)。
[0058]具体地,在该标准窗口类中可以包括一个Combo和一个Canvas,通过Combo可以获取预设的图片配置信息(即用户选定的配色方案),如,用户可以选择ARGB8888、ARGB4444或RGB565的配色方案。通过Canvas可以用于绘制的图片(在该实施例中的Canvas即为上述实施例中的预定展示区域)。
[0059]步骤S602:建立被激活接口。
[0060]通过建立被激活接口(即上述实施例中的数据监听接口 )创建数据监听事件,其中,该被激活接口可以为监听选择接口。
[0061]具体地,通过被激活接口 partActivited获取内存泄露漏洞分析软件的当前工作台窗口切换。
[0062]步骤S603:获取内存泄露漏洞分析软件的当前工作台窗口。
[0063]步骤S604:判断当前工作台窗口是否为内存分析窗口。
[0064]其中,如果当前工作台窗口为内存分析窗口,则执行步骤S605。如果当前工作台窗口不为内存分析窗口,返回执行步骤S602。其中的内存分析窗口为上述实施例中的工作窗□。
[0065]具体地,可以通过传入参数来确定当前工作窗口是否为HeapEditor内存分析窗口。如果是HeapEditor,就调用addSelect1nChangedListener来增加对用户在HeapEditor中选择操作的监听,这样就可以知道用户选择的是窗口中的哪一行对象记录。
[0066]其中,上述实施例中的传入参数即为工作窗口的描述信息,如工作窗口的坐标信肩、Ο
[0067]步骤S605:获取用户的当前选择事件。
[0068]通过上述步骤完成SWT控件的初始化流程后,就可以在监听选择接口中获得用户选择事件(Select1n Changed Event),并通过其获取第一个元素get First Element的方法获得当前选定的内存对象记录。
[0069]在本发明的上述实施例中,根据当前选定的内存对象记录的内存对象ID获取内存对象的对象属性数据可以包括:从终端的内存中读取内存对象ID所指向的内存对象的对象名称,其中,对象属性数据包括内存对象的对象名称。
[0070]进一步地,在从终端的内存中读取内存对象ID指向的内存对象的对象名称之后,检测方法还可以包括:判断对象名称是否为预设位图对象名称;若对象名称为预设位图对象名称,则确认内存对象为位图对象;若对象名称不为预设位图对象名称,则确认内存对象不为位图对象。
[0071]在获取当前选定的内存对象记录之后,可以通过图7所示的步骤获取当前选定的内存对象记录的像素属性数据和尺寸属性数据。具体地可以通过如下步骤实现:
[0072]步骤S701:将通过监听选择接口获取到的当前选择事件转换成内存对象行ID。
[0073]具体地,获取当前选择事件中的选择上下文信息,从选择上下文信息中获取对象数据集合,从对象数据集合提取内存对象ID。
[0074]步骤S702:判断监听到的内存对象是否为位图对象。
[0075]其中,若监听到的内存对象为位图对象,则执行步骤S703。若监听到的内存对象不为位图对象,则执行步骤S705。
[0076]具体地,如果内存对象的对象名称为:android.graphics.Bitmap,就确定该内存对象是一个位图对象;如果内存对象的对象名称不为:android.graphics.Bitmap,则确定该内存对象不是位图对象。
[0077]步骤S703:获取位图对象的像素属性数据。
[0078]具体地,获取位图对象的mBuffer字段内容,在该字段中存储了这个图片的像素缓存(即上述实施例中的像素属性数据),其中,像素缓存可以包括该图片的像素点的绿色通道数据、红色通道数据、蓝色通道数据和透明度通道数据。
[0079]步骤S704:获取位图对象的尺寸属性数据。
[0080]具体地,获取该图片的高(mWidth字段)和宽(mHeight字段)。
[0081]步骤S705:获取下一个选择事件。
[0082]需要进一步说明的是,判断对象图片是否存在于终端的缓存中,或者对象图片是否为应用程序的当前界面显示的图片,得到判断结果可以包括:在对象图片不存在于终端的缓存中且对象图片为应用程序的当前界面显示的图片时,得到第一判断子结果;否则,得到第二判断子结果;使用判断结果确定应用程序是否存在内存泄露漏洞可以包括:在得到第一判断子结果时,确定应用程序不存在内存泄露漏洞;在得到第二判断子结果时,确定应用程序存在内存泄露漏洞。
[0083]通过本发明上述实施例,在建立数据监听接口之后,获取用户的当前选择事件,从当前选择事件中提取当前选定的内存对象ID,通过内存对象ID获取当前选定的内存对象记录的内存对象的对象属性数据。在对象属性数据中的对象名称符合预设位图对象名称时,确定该内存对象为位图对象,获取该内存对象的像素属性数据和尺寸属性数据,基于像素属性数据和尺寸属性数据在预定展示区域绘制内存对象记录的图片,使用该预定展示区域绘制的图片判断应用程序是否存在内存泄露漏洞。
[0084]在上述实施例中通过在使用该预定展示区域绘制的图片判断应用程序是否存在内存泄露漏洞,不仅可以直观地查看图片内容,使得内存图片测试很容易;进一步地,可以大幅提高andr1d内存分析中对于图片分析的准确度,并且简化了检测流程,降低了分析成本。
[0085]下面以QQ空间为应用场景详细介绍本发明。
[0086]例如,用户A在用户B的QQ空间中相册中的图片P进行点赞操作,该图片P会显示用户B的相册中,而且会显示在用户B的相册下面的评论中,然而在终端的内存中仅仅存在一张即可。通过网络获取用户A的终端的内存数据,并在内存分析软件上,在建立数据监听接口
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1