android ART

frameworks/native/cmds/installd/commands.c

APK在安装的过程中,会通过dex2oat工具生成一个OAT文件

 

art/runtime/oat_file.c

OatFile类,通过调用它的静态成员函数Open可以在本进程中加载OAT文件;

 OatFile类的静态成员函数OpenElfFile的;

OpenElfFile创建了一个OatFile对象后,就调用它的成员函数ElfFileOpen来执行加载OAT文件的工作;ElfFile类来手动加载参数file指定的OAT文件,实际上就是按照ELF文件格式来解析参数file指定的OAT文件,并且将文件里面的oatdata段和oatexec段加载到内存中来。我们可以将ElfFile类看作是ART运行时自己实现的OAT文件动态链接器。一旦参数file指定的OAT文件指定的文件加载完成之后,我们同样是通过两个导出符号oatdata和oatlastword来获得oatdata段和oatexec段的起止位置。同样,如果参数requested_base的值不等于0,那么就要求oatdata段必须要加载到requested_base指定的位置去;

OpenElfFile最后也是调用OatFile类的成员函数Setup来解析其中的oatdata段

原文地址:https://www.cnblogs.com/vendanner/p/5054901.html