用户名  找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
热搜: 活动 交友 discuz
查看: 207|回复: 0

DexClassLoader加载流程

[复制链接]

2万

主题

158

回帖

16万

积分

管理员

积分
169913
发表于 2021-12-15 16:11:25 | 显示全部楼层 |阅读模式 IP:山东省 移动/数据上网公共出口

登录后更精彩...O(∩_∩)O...

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 mind 于 2021-12-15 16:22 编辑

DexClassLoader加载流程
总结:过程中出现dex起始地址和大小的还是可以进行dump的。另外,openDexFileNative中的dex2oat的流程可以dump,但是有些壳干掉了这个流程,不一定可以dump下来,

还是先来到DexClassLoader的初始化函数
路径:8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.java


进入BaseDexClassLoader
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java

进入DexPathList
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java

进入makeDexElements


进入loadDexFile


进入DexFile.loadDex
路径:
8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexFile.java


进入DexFile构造函数


进入openDexFile


进入openDexFileNative,已经到了native函数


进入native函数实现
路径:
8.0.0_r4/xref/art/runtime/native/dalvik_system_DexFile.cc

进入OpenDexFilesFromOat就是编译dex2oat的过程
OpenDexFilesFromOat->MakeUpToDate->GenerateOatFileNoChecks->Dex2Oat(这里已经开始准备需要编译的参数了)->Exec->ExecAndReturnCode
阻断dex2oat会增加app启动速度

如果阻断了dex2oat生成,OpenDexFilesFromOat函数就会走到以下流程加载dex文件,通过调用DexFile::Open最终又会走到openCommon函数



流程和InMemoryDexClassLoader基本差不多,主要还是在dex2oat的流程中,最终都会走到openCommon
————————————————
版权声明:本文为CSDN博主「986227498」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34581212/article/details/108731786

回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|哩布大模型|Civitai大模型|IP定位|图反推|站长素材|deepseek|即梦视频|阿狗工具|花瓣网|pinterest|php手册|宝塔文档|CyberChef|猫捉鱼铃|手机版|小黑屋|下载狗|IPS|在线工具|分享屋 ( 鲁ICP备2021028754号 )

GMT+8, 2025-1-24 16:20

Powered by 分享屋 X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表