美文网首页
入门ART虚拟机(3)——加载类和方法

入门ART虚拟机(3)——加载类和方法

作者: 十八垧 | 来源:发表于2017-07-08 08:48 被阅读753次

Android安全交流群:478084054

还是以Android-6.0.1源码为例,从BaseDexClassLoader的findClass开始跟踪一些源码。

调用成员变量pathList的findClass方法来查找类。

在DexPathList类的findClass方法中,遍历dexElements数组的每一个成员(前面笔记提到过,每一个Element对象里面封装着一个DexFile),然后调用DexFile的loadClassBinaryName方法来加载类。

loadClassBinaryName又调用了defineClass。

defineClass又调用了native方法defineClassNative。

defineClassNative对应art/runtime/native/dalvik_system_DexFile.cc中的DexFile_defineClassNative方法。

这里还是只抓主干,不过多关注一些旁枝末节。在DexFile_defineClassNative方法中,调用class_linker对象的DefineClass来加载类。(在创建ART虚拟机的过程中,会创建一个ClassLinker对象,用于加载类和链接类方法)

ClassLinker方法的内容比较多,只关注其中最关键的几步。先调用InsertClass将新类添加到已加载类的列表中。再调用LoadClass和LinkClass来加载和链接类。

调用FindOatClass查找与被加载类对应的OatClass,然后调用LoadClassMembers加载类的成员。

前面笔记中做过一种假设,就是DEX加固壳阻止了指定DEX生成OAT文件的过程,这种情况下传给LoadClassMembers方法的oat_class参数为nullptr。

下篇笔记继续。

相关文章

  • 入门ART虚拟机(3)——加载类和方法

    Android安全交流群:478084054 还是以Android-6.0.1源码为例,从BaseDexClass...

  • 入门ART虚拟机(4)——加载类和方法续

    Android安全交流群:478084054 接上篇笔记。 在ClassLinker的LoadClass方法中,先...

  • ClassLoader工作机制

    1.类加载器ClassLoaderAndroid的Dalvik/ART虚拟机如同标准JAVA的JVM虚拟机一样,在...

  • ART虚拟机学习

    重点请参考Android运行时ART简要介绍和学习计划 包含类加载和方法的执行 一、ART对APK的优化 APK里...

  • java类加载器和jar路径解析

    一、类加载器基本原理 虚拟机提供了3种类加载器:Bootstrap类加载器、Ext类加载器、App类加载器。他们之...

  • Java虚拟机——类加载机制和类加载器

    Java虚拟机——类加载机制和类加载器 类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周...

  • 虚拟机类加载机制

    虚拟机类加载机制 @(Java虚拟机)[类加载] [TOC] 类加载时机 类加载到卸载的生命周期包括: 加载(Lo...

  • Java类加载机制和对象创建过程

    Java类加载机制和对象创建过程 1、类加载 类加载的时机 ​ 类加载,即虚拟机加载.class文件。什么时候虚拟...

  • 5.虚拟机类加载机制

    虚拟机类加载机制 一、类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始...

  • 类加载流程

    类加载流程 加载阶段 加载阶段分为 虚拟机启动加载和运行时期加载。 虚拟机启动加载:加载JAVA_HOME/lib...

网友评论

      本文标题:入门ART虚拟机(3)——加载类和方法

      本文链接:https://www.haomeiwen.com/subject/dnsdhxtx.html