✍️ Xposed运行原理 密级: 【C-1】 | 时间:2023-12-07 | 目录:测试笔记 | 编辑本文 文章距今已发表三个月,请自行判断文中技术方法、代码的有效性:) zygote 进程是 Android 系统中第一个拥有 Java 运行环境的进程,它是由用户空间 1 号进程 init 进程通过解析 init.rc 文件创建出来的,从 init 进程 fork 而来。 zygote 进程是一个孵化器。Android 系统中所有运行在 Java 虚拟机中的系统服务以及应用均由 zygote 进程孵化而来。 zygote 通过克隆(fork)的方式创建子进程,fork 出来的子进程将继承父进程的所有资源,基于这个特性,zygote 进程在启动过程将创建 Java ART 虚拟机,预加载一个 Java 进程需要的所有系统资源,之后子进程被创建后,就可以直接使用这些资源运行了。 自 Android 5.0 系统开始,zygote 不再是一个进程,而是两个进程,一个是 32 位 zygote,负责孵化 32 位进程(为了兼容使用了 armeabi 和 armeabi-v7a 等 32 位架构的本地动态库的应用),另一个是 64 位 zygote 进程,负责孵化 64 位应用进程(可加载 arm64-v8a 等 64 位架构本地库)。 Xposed 对 zygote 进程的实现源码进行修改后,重新编译出 app_process 可执行文件,替换了系统的 app_process 文件(包括 64 位 zygote),并在其中加载了 XposedBridge.jar 这个 Dex 代码包,它包含 Xposed 的 Java 层实现代码和提供给 Xposed 模块的 API 代码,那么当 init 进程启动 zygote 服务进程时,将执行修改过的 app_process 文件,此时 zygote 进程就具有了 Xposed 的代码,Xposed 可以进行加载Xposed 模块代码等任意操作了。 所有 Android 应用都是运行在 Java 虚拟机上的,所有的 Android 应用都是 zygote 的子进程,那么当 Android 应用进程启动后,将具备 zygote 进程加载的所有资源,从而将 Xposed 代码继承到了 Android 应用进程中,实现了将 Xposed 代码加载到每一个进程中的目的。 ![](https://img.meituan.net/imgupload/bebb4ce52cfbeba0cea38e5a3b217365185690.png) 评论列表 写评论 您的IP:3.140.185.37,临时用户名:db060457评论已接入DepyWAF审计与流量系统,请勿频繁操作导致IP拉黑 提交评论 © 版权声明:非标注『转载』情况下本文为原创文章,版权归 Depy's docs 所有,转载请联系博主获得授权。