欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )

发布时间:2025/6/17 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、DexClassLoader 类加载器构造函数分析
  • 二、DexPathList 引入





一、DexClassLoader 类加载器构造函数分析



DexClassLoader 是加载 dex 文件的核心类 , 但是该类除了定义了一个构造函数之外 , 并没有实现其它业务逻辑操作 ;

DexClassLoader 是 BaseDexClassLoader 的子类 , 因此类加载的核心操作流程 , 都定义在 BaseDexClassLoader.java 代码中 ;


DexClassLoader 的构造函数 , 调用了 BaseDexClassLoader 的构造函数 ;

public class DexClassLoader extends BaseDexClassLoader {public DexClassLoader(String dexPath, String optimizedDirectory,String libraryPath, ClassLoader parent) {super(dexPath, new File(optimizedDirectory), libraryPath, parent);} }

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java


BaseDexClassLoader 的构造函数 , 调用了 ClassLoader 的构造函数 ;

public class BaseDexClassLoader extends ClassLoader {public BaseDexClassLoader(String dexPath, File optimizedDirectory,String libraryPath, ClassLoader parent) {super(parent);this.pathList = new DexPathList(this, dexPath, libraryPath, optimizedDirectory);} }

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java


查询 ClassLoader 源码时 , 在源码路径中检索出两个 ClassLoader , 分别是

  • Dalvik 下的 ClassLoader : /libcore/libdvm/src/main/java/java/lang/ClassLoader.java
  • ART 下的 ClassLoader : /libcore/libart/src/main/java/java/lang/ClassLoader.java

本篇博客分析的是 Dalvik 下的 ClassLoader 类加载器 , 因此分析的是 /libcore/libdvm/src/main/java/java/lang/ClassLoader.java 源码 ;

在 BaseDexClassLoader 中调用的 ClassLoader 构造函数如下 , 该构造函数中实现的内容很简单 , 只设置了该类加载器的父节点 ;

public abstract class ClassLoader {/*** 使用指定的类装入器作为其父类构造此类的新实例。** @param parentLoader* 要用作新类装入器父级的{@code ClassLoader}。*/protected ClassLoader(ClassLoader parentLoader) {this(parentLoader, false);} }

源码路径 : /libcore/libdvm/src/main/java/java/lang/ClassLoader.java





二、DexPathList 引入



BaseDexClassLoader 的构造函数 , 调用了 ClassLoader 的构造函数 之后 , 有调用了 DexPathList 的构造函数 , 创建 DexPathList 实例对象 , 赋值给了 BaseDexClassLoader 的唯一成员 private final DexPathList pathList ;

public class BaseDexClassLoader extends ClassLoader {private final DexPathList pathList;public BaseDexClassLoader(String dexPath, File optimizedDirectory,String libraryPath, ClassLoader parent) {super(parent);this.pathList = new DexPathList(this, dexPath, libraryPath, optimizedDirectory);} }

源码路径 : /libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java

总结

以上是生活随笔为你收集整理的【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。