zoukankan      html  css  js  c++  java
  • 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段

  • 相关阅读:
    STL容器 erase的使用陷井
    转:VC++线程同步-事件对象
    VC线程同步方法
    C/C++四种退出线程的方法
    rabbitMQ 常用命令
    Spring @Configuration
    Spring RabbitMQ 延迟队列
    rabbitmq web管理界面 用户管理
    Linux下tar.gz 安装
    Linux下RPM软件包的安装及卸载
  • 原文地址:https://www.cnblogs.com/vendanner/p/5054901.html
Copyright © 2011-2022 走看看