首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 逆向】加载 ClassLoader ( 启动加载 | 扩展加载 | 应用加载 | 加载的双亲委托机制 )

文章目录 一、加载 二、加载的双亲委托机制 一、加载 ---- Java 虚拟机 ClassLoader 加载 : Bootstrap ClassLoader : 启动加载 , 该 加载由...程序才能开始执行 ; 二、加载的双亲委托机制 ---- 加载级别 : 权限 / 重要性 从高到低排列 ; 启动加载 Bootstrap ClassLoader 扩展加载 Extention...ClassLoader 应用加载 Application ClassLoader 自定义加载 Custom ClassLoader 在双亲委托机制中 , 上层的加载 是 下层加载 的父...; 加载的双亲委托机制 : 加载 ClassLoader 接收到 加载任务 之后 , 自己不会先进行加载 , 反而将该 加载任务 委托 给 父加载 执行 ; 父加载 接收 到 该...加载任务 之后 , 也会 委托 父的父 加载 执行 ; 委托操作 , 会一直传递到 最顶层的 启动加载 Bootstrap ClassLoader ; 如果 启动加载 Bootstrap

84130

Android 加载

可以考虑使用 -Xverify:none 参数来关闭大部分的验证措施,以缩短虚拟机加载的时间。 准备 为变量分配内存并设置变量初始值,这些变量所使用的内存都将在方法区中进行分配。...加载 把实现加载阶段中的“通过一个的全限定名来获取描述此类的二进制字节流”这个动作的代码模块称为“加载”。...双亲委托机制 如果一个加载收到了加载的请求,它首先不会自己去尝试加载这个,而是把这个请求委派给父加载去完成,每一个层次的加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动加载中...,只有当父加载反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的)时,子加载才会尝试自己去加载。...,加强了安全性 URLClassLoader继承SecureClassLoader,用来通过URI路径从jar文件和文件夹中加载和资源,在Android中基本无法使用 BaseDexClassLoader

40700
您找到你想要的搜索结果了吗?
是的
没有找到

Android 加载

可以考虑使用 -Xverify:none 参数来关闭大部分的验证措施,以缩短虚拟机加载的时间。 准备 为变量分配内存并设置变量初始值,这些变量所使用的内存都将在方法区中进行分配。...加载 把实现加载阶段中的“通过一个的全限定名来获取描述此类的二进制字节流”这个动作的代码模块称为“加载”。...双亲委托机制 如果一个加载收到了加载的请求,它首先不会自己去尝试加载这个,而是把这个请求委派给父加载去完成,每一个层次的加载都是如此,因此所有的加载请求最终都应该传送到顶层的启动加载中...,只有当父加载反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的)时,子加载才会尝试自己去加载。...,加强了安全性 URLClassLoader继承SecureClassLoader,用来通过URI路径从jar文件和文件夹中加载和资源,在Android中基本无法使用 BaseDexClassLoader

47130

VM的加载的过程是通过引导加载

的生命周期 我们先来看下的生命周期,包括: 加载 连接 初始化 使用 卸载 其中加载、连接、初始化属于加载过程。 使用是指我们new对象进行使用。 卸载指对象被GC垃圾回收掉。...加载过程 JVM的加载的过程是通过引导加载(bootstrap class loader)创建一个初始(initial class)来完成的,这个是由JVM的具体实现指定的。...加载# 三大加载# 了解了加载过程后,我们来看看加载加载(ClassLoader)用来加载 Java 到 Java 虚拟机中。...系统中的加载在协同工作的时候会默认使用 双亲委派模型 。 双亲委派模型的理论很简单,分为如下几步: 即在加载的时候,系统会首先判断当前是否被加载过。...AppClassLoader的父加载为ExtensionClassLoader ,ExtensionClassLoader 的父加载为null,当父加载为null时,会使用启动加载 BootstrapClassLoader

66430

加载

加载类型   从Java虚拟机的角度来讲,只存在两种类加载:   * 启动加载(Bootstrap ClassLoader),这个加载使用C++语言实现,是虚拟机自身的一部分;   *...加载双亲委派模型要求除了顶层的启动加载外,其它的加载都应该有自己的父加载。这里的加载之间的父子关系不是通过继承实现的,都是使用组合关系来复用父加载的代码。   ...加载双亲委派模型的工作过程:如果一个加载收到加载的请求,它首先把这个请求委派给父加载去完成,每一层次的加载都是如此,因此所有的加载请求都应该传到顶层的启动加载中,只有当父加载反馈自己无法完成这个加载请求时...双亲委派模型优缺点   使用双亲委派模型来组织加载之间的关系,有个好处是:Java随着它的加载一起具备了一种带有优先级的层次关系。   ...由于只能向上委派,到了启动加载后不能往下询问,即顶层的加载,无法访问底层的加载加载

53830

加载

名称 加载哪的 说明Bootstrap(引导加载) ClassLoader JAVA_HOME/lib,无法直接访问(平台相关的底层C/C++语言实现, 所以该加载不能被...用户可以自己定义加载加载。...逻辑是从自定义加载一直往上父加载递归调用,直到扩展加载发现没有parent了,就会去查看引导加载加没加载过该类。...加载顺序应该是先查看引导加载是否加载,再由父加载尝试加载,最后是子类加载自己加载。...双亲委派:向上委派过程:第一步: 将自定义加载挂载到应用程序加载;第二步: 应用程序加载将请求委托给扩展加载;第三步: 扩展加载将请求委托给启动加载

6200

加载

一般来说,Java 虚拟机使用 Java 的方式如下:Java 源程序(.java 文件)在经过 Java 编译编译之后就被转换成 Java 字节代码(.class 文件)。...通过代理模式,对于 Java 核心库的加载工作由引导加载来统一完成,保证了 Java 应用所使用的都是同一个版本的 Java 核心库的,是互相兼容的。...前者称为一个的定义加载(defining loader),后者称为初始加载(initiating loader)。在 Java 虚拟机判断两个是否相同的时候,使用的是的定义加载。...加载在成功加载某个之后,会把得到的 java.lang.Class的实例缓存起来。下次再请求加载该类的时候,加载会直接使用缓存的的实例,而不会尝试再次加载。...defineClass来实现的(defining loader)—抛出 java.lang.NoClassDefFoundError异常(判断两个是否相同的时候,使用的是的定义加载) 参考:https

50030

加载

数组类型不通过加载创建,它由 Java 虚拟机直接创建。 所有的都由加载加载加载的作用就是将 .class文件加载到内存。...双亲委派模型 双亲委派模型介绍 每一个都有一个对应它的加载。 系统中的 ClassLoader 在协同工作的时候会默认使用 双亲委派模型 。 即在加载的时候,系统会首先判断当前是否被加载过。...当父加载无法处理时,才由自己来处理。当父加载为 null 时,会使用启动加载 BootstrapClassLoader 作为父加载。  ...} else {//父加载为空,使用启动加载 BootstrapClassLoader 加载 c = findBootstrapClassOrNull...如果没有使用双亲委派模型,而是每个加载加载自己的话就会出现一些问题,比如我们编写一个称为 java.lang.Object 的话,那么程序运行的时候,系统就会出现多个不同的 Object 

41040

Android 逆向】加载 ClassLoader ( 加载 Android 组件的加载 | 双亲委派机制实例分析 )

文章目录 一、加载 Android 组件的加载 二、加载 Android 组件的的双亲委派机制实例 一、加载 Android 组件的加载 ---- 打印 Activity 组件加载...及 该 加载 的 父加载 : package com.example.classloader_demo; import androidx.appcompat.app.AppCompatActivity...Android 组件的的双亲委派机制实例 ---- Activity 加载分析 : Activity 组件加载是 dalvik.system.PathClassLoader , dalvik.system.PathClassLoader...加载的 父节点是 java.lang.BootClassLoader 加载 , java.lang.BootClassLoader 是根节点的 加载 ; 双亲委派机制 : 在双亲委派机制中...是根节点的加载 , 其尝试加载 Activity , 发现加载不了 , 没有这个能力 , 然后 BootClassLoader 将任务 委派给子节点 PathClassLoader , PathClassLoader

26930

什么是加载加载有哪些?

实现通过的全限定名获取该类的二进制字节流的代码块叫做加载。...启动加载无法被Java程序直接引用,用户在编写自定义加载时,如果需要把加载请求委派给引导加载去处理,那直接使用null代替即可。...由于扩展加载是由Java代码实现的,开发者可以直接在程序中使用扩展加载加载Class文件。...它负责加载用户路径(ClassPath)上所有的库,开发者同样可以直接在代码中使用这个加载。如果应用程序中没有自定义过自己的加载,一般情况下这个就是程序中默认的加载。...四、自定义加载加载非 classpath 随意路径中的文件通过接口来使用实现,希望解耦时,常用在框架设计这些希望予以隔离,不同应用的同名都可以加载,不冲突,常见于 tomcat 容器继承ClassLoader

79720

什么是加载加载有哪些?

加载采用了双亲委派机制(Parent-Delegate Model),它将加载过程委派给父加载,只有在父加载无法找到所需时,才会尝试自己去加载。...加载的种类Java中有三种主要的加载,分别是:Bootstrap Class Loader(引导加载):它是JVM自身的一部分,负责加载Java的核心库,如java.lang包中的。...此外,还有一种特殊的加载:用户自定义加载:这种类加载由开发人员自行编写,用于自定义加载一些特殊的加载的示例代码下面通过示例代码来演示加载使用。...jdk.internal.loader.BuiltinClassLoader 是扩展加载,负责加载Java的扩展库。null 代表引导加载,它是JVM自身的一部分,没有父加载。...总结加载是Java虚拟机中的一个重要组成部分,它负责将Java文件加载到内存中,并在运行时动态链接和验证这些。Java中有三种主要的加载,分别是引导加载、扩展加载和应用加载

30540

jvm怎么加载_jvm加载

为什么要自定义加载 原因: 1、存放在自定义路径上的,需要通过自定义加载加载。...【注意:AppClassLoader加载classpath下的】 2、不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载去实现加密解密。...如何实现自定义加载 实现自定义加载有以下两步: 1、继承ClassLoader 2、重写findClass,在findClass里获取的字节码,并调用ClassLoader中的defineClass...如下:是一个自定义 的加载 public static class MyClassLoader extends ClassLoader{ @Override protected...一直提交给启动加载加载,通过他加载加载到的永远是/lib下面的java.lang.String 3、在这个自己写的中写上main方法 public static void main(String

44710

加载加载过程

加载子系统作用 加载子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。...除了的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) 加载ClasLoader角色 class file存在于本地硬盘上...补充:加载class文件的方式 从本地系统中直接加载 通过网络获取,典型场景:Web Applet 从zip压缩包中读取,成为日后jar、war格式的基础 运行时计算生成,使用最多的是:动态代理技术...由于Java采用的是懒加载策略,只有当我们需要用到这个的时候才会去加载他  初始化阶段就是执行构造方法()的过程。...此方法不需定义,是javac编译自动收集中的所有变量的赋值动作和静态代码块中的语句合并而来。 构造方法中指令按语句在源文件中出现的顺序执行。 ()不同于的构造

16130

java加载加载机制

Java的安全模型是的Java成为适于网络环境的技术——《深入Java虚拟机》   在安全方面Java的内置安全模型中使用了一种成为“沙箱”的组件,来保证Java程序对用户的安全,至于什么是“沙箱”...在沙箱组件中包括装载结构,加载体系结构也是java沙箱的第一道防线,因为程序都是通过加载才能够加载到JVM中的。   加载有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2....其中一个大家所熟悉的词就是“双亲委派机制”,所谓“双亲委派机制”,就是某个特定的加载在接到加载的请求时,首先将加载任务委托给父加载,依次递归,如果父加载可以完成加载任务,就成功返回;只有父加载无法完成此加载任务时...用一个图形表示就是:  引导加载(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。... 扩展加载(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载在此目录里面查找并加载 Java

97510

Android 逆向】加载 ClassLoader ( Android 的八种加载 | ClassLoader | BaseDexClassLoader | DexClassLoader )

文章目录 一、Android 加载 1、ClassLoader 抽象 2、BootClassLoader 3、BaseDexClassLoader 4、PathClassLoader 5、DexClassLoader...5、SecureClassLoader 6、URLClassLoader 一、Android 加载 ---- Android 中的 加载 ClassLoader 继承结构 如下 : 1、ClassLoader...抽象 ClassLoader 是抽象 , 是所有 加载 ClassLoader 的父 ; 2、BootClassLoader BootClassLoader 是 ClassLoader 子类..., 与 Java 虚拟机中的 BootstrapClassLoader 启动加载 作用相同 , 用于加载 Java 核心库 ; BootClassLoader 是单例 , 全局唯一 ; BootClassLoader...进行加载 ; Android 系统相关的 , 如 四大组件 , Android 自带 , 都是由 PathClassLoader 加载的 ; 5、DexClassLoader DexClassLoader

71120

加载介绍

加载 系统加载(System ClassLoader):负责java-classpath或-D java.class.path所指的目录下的与jar包装入工作,是常用的加载 扩展加载(Extension...ClassLoader):负责jre/lib/ext目录下的jar包或-D java.ext.dirs指定目录下的jar包装入工作库 引导加载(Bootstap ClassLoader):用C++...编写的,是JVM自带的加载,负责Java平台核心库,用来装载核心库。...该加载无法直接获取 自定义加载、系统加载、扩展加载引导加载,自左向右检查是否已装载,自右向左尝试加载 示 public class Test07 { public static...); //获取扩展加载的父加载--->根加载(C/c++) ClassLoader parent1 = parent.getParent();

24620
领券