【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
文章目錄
- 一、類加載器
- 二、類加載的雙親委托機制
一、類加載器
Java 虛擬機 ClassLoader 類加載器 :
- Bootstrap ClassLoader : 啟動類加載器 , 該 加載器由 C/C++ 實現 , 加載 Java 的核心類庫 , 如 java.lang 包下的系統類 ; Java 中無法和獲取 ;
- Extention ClassLoader : 擴展類加載器 , 加載 /lib/ext 下的類 , Java 中可以獲取 , 其實現類為 ExtClassLoader ;
- Application ClassLoader : 應用類加載器 , 加載開發者開發的類 , Java 中可以通過 ClassLoader.getSystemClassLoader 方法獲取 , 其實現類為 AppClassLoader ;
類加載器加載類流程 : Bootstrap ClassLoader 先加載系統的核心類庫 , Extention ClassLoader 加載額外的 /lib/ext 類庫 , Application ClassLoader 加載開發者自己開發的類庫 ;
加載完 開發者 開發的類庫 后 , 程序才能開始執行 ;
二、類加載的雙親委托機制
類加載器級別 : 權限 / 重要性 從高到低排列 ;
- 啟動類加載器 Bootstrap ClassLoader
- 擴展類加載器 Extention ClassLoader
- 應用類加載器 Application ClassLoader
- 自定義類加載器 Custom ClassLoader
在雙親委托機制中 , 上層的類加載器 是 下層類加載器 的父類 ;
類加載的雙親委托機制 :
類加載器 ClassLoader 接收到 類加載任務 之后 , 自己不會先進行加載 , 反而將該 類加載任務 委托 給 父類類加載器 執行 ;
父類類加載器 接收 到 該 類加載任務 之后 , 也會 委托 父類的父類 類加載器 執行 ;
委托操作 , 會一直傳遞到 最頂層的 啟動類加載器 Bootstrap ClassLoader ;
- 如果 啟動類加載器 Bootstrap ClassLoader 完成了 類加載 操作 , 返回加載的類 ;
- 如果 啟動類加載器 Bootstrap ClassLoader 無法完成 類加載 操作 , 就會 將 類加載任務 委托給 子類完成 ;
同理 , 父類 委托 給子類的 類加載任務 , 如果 子類類加載器 可以完成加載 , 成功返回 , 如果子類類加載器無法完成加載 , 就再次 將 類加載任務 委托給 子類的子類 , 繼續向下傳遞 ;
向上委托 : 每個兒子都不想加載類 , 類加載任務到來后 , 優先將任務委托父親去做 , 父親有活交給父親的父親去做 ;
向下委托 : 假如 父親無法加載類 , 則再交給 兒子去做 , 兒子嘗試加載 , 如果也無法加載 , 兒子再交給孫子去做 ;
雙親委派模式優點 :
- 避免了類重復加載 : 如果某 Class 類已經加載過了 , 通過該機制 , 可以 直接讀取出已經加載的類 ;
- 安全性強 : 系統類 無法 被替代 , 系統類只能由 啟動類加載器 Bootstrap ClassLoader 加載 , 應用類加載器 加載被篡改的 Java 核心類是無效的 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】GDA 逆向工具
- 下一篇: 【Android 逆向】类加载器 Cla