- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android运行时ART加载OAT文件的过程分析解析
Android运行时ART加载OAT文件的过程分析
在前面一文中,我们介绍了Android运行时ART,它的核心是OAT文件。OAT文件是一种Android私有ELF文件格式,它不仅包含有从DEX文件翻译而来的本地机器指令,还包含有原来的DEX文件内容。这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行,也就是我们不需要改变原来的APK编程接口。本文我们通过OAT文件的加载过程分析OAT文件的结构,为后面分析ART的工作原理打基础。
由于OAT文件本质上是一个ELF文件,因此在最外层它具有一般ELF文件的结构,例如它有标准的ELF文件头以及通过段(Section)来描述文件内容。关于ELF文件的更多知识,可以参考维基百科:。
作为Android私有的一种ELF文件,OAT文件包含有两个特殊的段oatdata和oatexec,前者包含有用来生成本地机器指令的dex文件内容,后者包含有生成的本地机器指令,它们之间的关系通过储存在oatdata段前面的oat头部描述。此外,在OAT文件的dynamic段,导出了三个符号oatdata、oatexec和oatlastword,它们的值就是用来界定oatdata段和oatexec段的起止位置的。其中,[oatdata, oatexec - 1]描述的是oatdata段的起止位置,而[oatexec, oatlastword + 3]描述的是oatexec的起止位置。要完全理解OAT的文件格式,除了要理解本文即将要分析的OAT加载过程之外,还需要掌握接下来文章分析的类和方法查找过程。
在分析OAT文件的加载过程之前,我们需要简单介绍一下OAT是如何产生的。如前面一文所示,APK在安装的过程中,会通过dex2oat工具生成一个OAT文件:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
const char* output_file_name, const char* dexopt_flags)
{
static const char* DEX2OAT_BIN = /system/bin/dex2oat;
static const int MAX_INT_LEN = 12; // -+10dig+\0 -OR- 0x+8dig
char zip_fd_arg[strlen(--zip-fd=) + MAX_INT_LEN];
char zip_location_arg[strlen(--zip-location=) + PKG_PATH_MAX];
char oat_fd_arg[strlen(--oat-fd=) + MAX_INT_LEN];
char oat_location_arg[strlen(--oat-name=) + PKG_PATH_MAX];
sprintf(zip_fd_arg, --zip-fd=%d, zip_fd);
sprintf(zip_location_arg, --zip-location=%s, input_file_name);
sprintf(oat_fd_arg, --oat-fd=%d, oat_fd);
sprintf(oat_location_arg, --oat-location=%s, output_file_name);
ALOGV(Running %s in=%s out=%s\n, DEX2OAT_BIN, input_file_name, output_file_name);
execl(DEX2OAT_BIN, DEX2OAT_BIN,
zip_fd_arg, zip_location_arg,
oat_fd_arg, oat_location_arg,
(char*) NULL);
ALOGE(execl(%s) failed: %s\n, DEX2OAT_BIN, strerror(errno));
}
这个函数定义在文件frameworks/native/cmds/installd/commands.
您可能关注的文档
- Altium_Designer使用解析.ppt
- AMETEK石英玻璃窗200887001解析.doc
- AndroidART运行时无缝替换Dalvik虚拟机的过程分析解析.doc
- AndroidBLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信解析.doc
- altiumdesigner教学PPT第2章解析.ppt
- an,en,in教学课件解析.ppt
- Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析解析.doc
- Android学习路线解析.ppt
- Android开发入门解析.ppt
- android程序基本构成(基础篇)解析.ppt
- 中国国家标准 GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南.pdf
- 《GB/T 45154-2024老龄化社会 年龄包容性劳动力通用要求与指南》.pdf
- 中国国家标准 GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 7019-2024纤维水泥制品试验方法.pdf
- GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 中国国家标准 GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件.pdf
- 中国国家标准 GB/T 45150-2024老龄化社会 认知症包容性社群框架.pdf
- 《GB/T 25320.4-2024电力系统管理及其信息交换 数据和通信安全 第4部分:包含MMS的协议集及其附件》.pdf
- 《GB/Z 44938.1-2024机械电气安全 第1部分:用于保护人员安全的传感器》.pdf
- 中国国家标准 GB/T 21551.3-2024家用和类似用途电器的抗菌、除菌、净化功能 第3部分:空气净化器的特殊要求.pdf
最近下载
- 2025杭州钱塘新区建设投资集团有限公第一次招聘9人笔试备考题库及答案解析.docx
- 2025年山东城市服务职业学院单招职业倾向性测试题库及答案(夺冠系列).docx VIP
- 统编版三年级语文下册第一单元单元整体 教学设计.docx VIP
- 耳鼻喉科病例讨论(共15张课件).pptx VIP
- 2025年山东城市服务职业学院单招职业倾向性测试题库一套.docx VIP
- 《教育强国建设规划纲要(2024—2035年)》解读讲座.pptx
- 捷捷微电:首次公开发行股票并在创业板上市招股说明书.docx
- 第一节经皮穿刺术.ppt
- 课件:十五种病症保健按摩课件.ppt
- 2025年山东城市服务职业学院单招职业技能测试题库ab卷.docx VIP
文档评论(0)