在本文中,我们将讨论如何使用Android Studio的堆转储功能转储特定应用程序的内存 以及 如何使用 EclipseMemoryAnalyzer(MAT)来分析我们获得 的 堆转储 。
创建Android应用程序的堆的转储是可行的。我们可以使用EclipseMemoryAnalyzer这样的工具进一步分析和使用。但是,这些转储是二进制格式的,不能直接由EclipseMemoryAnalyzer解析。因此我们需要将这些文件转换成可以由EclipseMemoryAnalyzer解析的标准格式,而这可以通过使用hprof-conv Android SDK来转换。
我们先将样本程序安装在Android模拟器中,并输入数据。如下图:
此示例 为 应用程序使用SharedPreferences存储用户插入的数据。
现在,打开Android Studio - > Tools -> Android- > Android Device Monitor
这样就会打开安卓监视器窗口,然后选择你正在运行应用程序的模拟器,再选中目标的包名,再点击“Update Heap”和“Dump HPROF File”。
点击Dump HPROF File会弹出对话框,选择要保存文件的位置。
现在下载
EclipseMemoryAnalyzer并安装它。
( http://www.eclipse.org/mat/downloads.php )
尝试着打开刚从Android Studio导出的hprof文件,
EclipseMemoryAnalyzer无法解析它并弹出一个错误提示如下图。
使用HPROF-CONV命令行工具,我们可以将HPROF文件转换成可以由MAT解析的标准格式。
正如前面提到的,Android SDK自带了HPROF-CONV,在platform-tools目录下。
我们通过执行如下命令将hprof转换为标准格式。
hprof-conv <in file> <out file>
在这个例子中,我们输入
hprof-conv com.example.m1_shared.hprof memory.hprof
如果一切顺利,我们应该能够使用MAT打开这个memory.hprof文件。
在MAT中打开这个文件。
点击“Dominator tree”查看所有的转储。
正如你所看到的,我们可以选择执行正则表达式搜索。并且可以使用这个搜索选项搜索特定的关键词。
让我们从搜索我们的目标应用程序的包名,看看我们能找到什么有趣的东西。
在左下角,我们可以看到一些应用程序相关的对象,如bankname,cardnumber,save,username等。
而在本文的开头,我们已经在应用程序中输入了一些数据。通过搜索我们输入的关键字看看是否有任何发现。
*参考来源:resources.infosecinstitute,FB小编东二门陈冠希编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)
在上面的图我们可以看到,我们正在寻找关键字“srini。”