- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Android和Qemu环境下捕获信息流
原著:Marco Sironi, Francesco Tisato
摘要:智能手机市场已变得具有十分广泛的战略意义。今天,最常见的智能手机操作系统是谷歌的Android和苹果的iOS。前者是特别有趣的,由于它的开源本质,让每个人都可以深刻的检查一个环节的OS。Android源代码还捆绑了一个硬件仿真器,基于开放源代码的软件Qemu,允许用户运行Android操作系统时不需要对物理设备做要求。我们首先从一个程序的一个普通系统中提取信息流。然后,我们专注于Android的Qemu架构和它们对基础设施的记录。最后,我们详细介绍在Android设备内部发生的事情:在一个特定的情况下,系统的启动。
1.引言
众所周知,上网的人数不断增加,但特别有意思的是看看他们是如何做到这一点。根据ITU[1]数据,在2011年底全球17%的人通过移动设备访问Web,其中45%是通过3G移动网络访问的。根据StatCounter[2]的统计显示,2012年10月份12.3%的网页在移动设备上被访问过,而在去年这一比例一直在增加。根据NPD集团[3]的统计显示,智能手机总销售额在2012年第二季度相比上年同期增长9%。
这些数据清楚地表明在移动设备市场,尤其是智能手机的市场的不断壮大,使它具有更高的战略相关性。在这种情况下,下列人员检查内部机制设备的能力就变得至关重要:要编写高效的应用程序的开发人员,想要改善系统性能或删除错误的工程师等。出于这个原因,我们将展示一个程序,来获取移动设备内部的信息流。
实际上,智能手机市场主要有两种操作系统:苹果的iOS和谷歌的Android[4]。在本文中,由于Android的扩散性和开源性,我们把注意力集中在它身上。事实上,Android源代码的开源性,可以让每个人都深入检查它的内部并且在任何级别上都可以获取系统的详细信息。
智能手机不仅有一个软件平台,也有其底层的硬件平台。在某些情况下,它可以从该组件收集需要的信息,但是这将要求在其中插入某种探头。这种操作是精确的不是每个人都能完成的:要执行它必须有足够的仪器(探头、焊接机等)和技能(必须知道在哪里附加探头、怎么办、如何获取数据)。幸运的是,谷歌提供了一个硬件仿真器——基于开放源代码软件的Qemu。这意味着,我们可以很容易地直接用软件监测到它的源代码,在一个简单而廉价的软件上就可以获得硬件信息。因此,在本文中,我们将不仅展示如何捕获在移动设备上运行软件的信息流,还有怎样在仿真硬件中捕获。
本文的其余部分的结构如下:在第2节中,我们提出了一个一般的程序,以便于从一个普通的系统获取信息流;在第3节中,我们将介绍在Android环境下,提出的一般程序的结构和一组预构建的可以用来提取信息流的工具;在第4节中,我们介绍Qemu平台的架构和其内置的日志基础设施。在本节中,我们也将重点放在由谷歌自定义的标准版本的Qemu。在第5章中,我们研究一个特定的场景:运行Android设备的启动阶段,这可以在得心应手的情况下,我们运行一个软件探测系统启动。
2一个普通程序
我们可以从一个设备得到大量的各种数据。由于这个原因,首先,我们必须说明的是,我们为什么要捕捉信息的流动。根据我们的目标,我们需要不同种类的信息。例如,考虑一个应用程序崩溃,我们要在不同条件下进行一些调试。我们所关注的是细节的、确定性的单执行,如执行状态、参数、变量值等信息。现在考虑另一种情况——我们要优化一个应用程序。我们的目的是要了解最耗时的方式,这样我们就可以分析,并最终对其进行编辑使应用程序以更快的速度运行(此操作通常被称为“应用程序分析”)。我们要寻找一种完全不同的信息:我们想知道哪个应用程序的方法被声明,它被调用的频率和时间。在这种情况下,我们最感兴趣的是获得大量数据并处理得到统计信息。另一个重要方面,我们必须明白的是跟踪装置是为了了解我们需要检查的抽象层是什么。例如,我们必须明白,我们需要的是在应用程序的方法层的信息,还是在物理操作层的细节中的系统调用层的信息。一种设备,或者一个普通的系统,通常在细节上都是很复杂的,因此抽象层凸显系统中细节问题的相关性,而忽略了那些不相关因素。这是在理解抽象层次上来显示我们需要的信息,并集中在它们身上的根本原因。它往往是需要从不同的抽象层捕捉信息流,然后再确定它们之间的关系是什么。
一旦我们的目标明确,下一步就是说明我们怎样得到它。我们必须收集所有必要的信息,因为任何不必要的信息都可能会导致不必要的副作用。尤其可能出现两个问题:时间开销和信息泛滥。当捕捉信息需要大量时间时我们需要时间开销,并且探针会减慢要跟踪的应用程序或系统的速度。时间开销会影响到我们捕捉需要的数据时的准确时间。请注意,当我们插入任何一种探针到一个系统中时,都会产生时
文档评论(0)