xposed结合Zygote分析
android中zygote相信大家都很熟悉,它执行的函数是app_main.cpp,而xposed主要实现的就是替换app_main.cpp。所以在分析xposed时有必要来认识下zygote。好了,废话不多说,直接看app_main.cpp源码我们发现其main函数主要由AppRuntime.start(className,bool)执行;而AppRuntime继承自AndroidRuntime,那自然去看AndroidRuntime.start(className,bool),其主要走三步:
1 startVm:创建虚拟机===>在此函数中首先设置虚拟机的参数,然后开启虚拟机,故虚拟机参数是在开机时就定下来了
2 startReg(env):注册JNI函数===>注册gRegJNI数组里的jni函数
3 CallStaticVoidMethod(startClass,startMeth,strArray):startClass=ZygoteInit,startMeth=main,从此进入java世界
上面是原本android中app_main会执行的主要操作,那对于xposed来说有会做哪些修改呢?
第3步,根据startClass来执行java 类,改变其值就可以改变执行流程。在xposed是这么操作的:
runtime.start(isXposedLoaded ? XPOSED_CLASS_DOTS_ZYGOTE : "com.android.internal.os.ZygoteInit",
startSystemServer ? "start-system-server" : "");
若xposedLoaded则在start中执行XPOSED_CLASS_DOTS_ZYGOTE,否则执行原本类"com.android.internal.os.ZygoteInit"。ok,来看下XPOSED_CLASS_DOTS_ZYGOTE为何物:
#define XPOSED_CLASS_DOTS_ZYGOTE "de.robv.android.xposed.XposedBridge"
原来去执行XposedBridge的main函数,关于main函数看Xposed学习三。在执行XposedBridge的main了,那原来的ZygoteInit不执行了吗?不急,看main函数:
if(startClassName == null) {
ZygoteInit.main(args);
} else {
RuntimeInit.main(args);
}
ok,继续上面的流程应该是去执行ZygoteInit.main函数了。在main函数会加载preloadClass()(此加载类函数很耗时间),preloadResource()。但最主要的是创建system_server,接着systerm_server会创建系统级的service,其中就包括PackageManagerService。而PackageManagerService在启动过程中会对系统中的应用程序进行安装(出现loadPackage嘞),也就是说每次开机都会重新安装所有的app。那怎么知道系统中安装了多少应用程序呢,android系统会把已安装的app信息写到/data/system/packages-xml中。
好了,背景到此为止,我们不继续深入了。在开机时会安装之前存在的app,即会加载package。嗯哼,知道IXposedHookLoadPackage在哪里会执行了吧。就到这里,细节看Xposed学习三。
以上是结合xposed的一些分析,现在我们来看看Zygote在android系统的其他方面。
Zygote 提供了三种创建进程的方法:
fork(): 创建一个Zygote进程;
forkAndSpecialize(): 创建一个非Zygote进程;其他特殊进程需要通过Zygote来
forkSystemServer(): 创建一个系统服务进程;即ServerServer
参考资料:
1 深入理解 Android 卷I:第4章 深入理解 Zygote
2 android系统源代码情景分析
xposed结合Zygote分析的更多相关文章
- xposed学习四:总结
xposed的学习要告一段落,接下来去学习android apk和so加固,这里我们回顾下xposed吧. xposed是个hook框架,它是基于dalvik(确切来说是目前的版本,作者说ART也快出 ...
- Xposed学习三:基石
在上一篇我们留下问题:handleLoadPackage如何生效即在何时被执行. 先看XposedBridge.class的main(该函数是在appruntime.start函数中替换原先zygot ...
- Xposed原理分析
目录 安卓系统启动 什么zygote? 安卓应用运行? Xposed介绍 Xposed构成 Xposed初始化大体工作流程 源码分析 初始化 app_main#main app_main#initia ...
- 阿里系产品Xposed Hook检测机制原理分析
阿里系产品Xposed Hook检测机制原理分析 导语: 在逆向分析android App过程中,我们时常用的用的Java层hook框架就是Xposed Hook框架了.一些应用程序厂商为了保护自家a ...
- Android系统启动分析(Init->Zygote->SystemServer->Home activity)
整个Android系统的启动分为Linux Kernel的启动和Android系统的启动.Linux Kernel启动起来后,然后运行第一个用户程序,在Android中就是init程序. ------ ...
- 认识Zygote
概述 在java中不同的虚拟机实例会为不同的应用分配不同内存,为了使Android系统尽快启动,使用了Zygote来预加载核心类库和一些加载时间长的类(超过1250ms),让Dalvik虚拟机共享代码 ...
- Xposed模块开发教程
转:http://vbill.github.io/2015/02/10/xposed-1/ http://blog.csdn.net/zhangmiaoping23/article/detai ...
- [深入理解Android卷一全文-第四章]深入理解zygote
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该由于纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的所有内容. ...
- Zygote原理学习
1 zygote分析 1.1 简介 Zygote本身是一个NATIVE层的应用程序,与驱动.内核无关.前面已经介绍过了,zygote由init进程根据init.rc配置文件创建.其实本质上来说,zyg ...
随机推荐
- HDOJ-3065(AC自动机+每个模板串的出现次数)
病毒侵袭持续中 HDOJ-3065 第一个需要注意的是树节点的个数也就是tree的第一维需要的空间是多少:模板串的个数*最长模板串的长度 一开始我的答案总时WA,原因是我的方法一开始不是这样做的,我是 ...
- python3 批量处理域名解析
域名批量解析,快速确认域名的存活性及IP地址,脚本中包含了具体的用法和简要说明 #!/usr/bin/env python # -*- coding:utf-8 -*- # python3.6 fro ...
- url里bookmark是什么意思
<a rel="bookmark" href="abc.com"> 点击查看 </a> rel 这个属性的全称是 relationsh ...
- C语言入门-ide的概念介绍及codeblocks编辑器安装汉化
大家好,本章教程就ide(集成开发环境)来说一说. ide就是编译器+编辑器,原理就是在编辑器写代码,然后编辑器会让编译器来编译成二进制可执行文件. 常见的c/c++编译器有mingw64,msvc, ...
- Solon 框架详解(九)- 渲染控制之定制统一的接口输出
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- python-@函数装饰器
例如@classmethod,@staticmethod的本质就是函数装饰器,其中,classmethod和staticmethod都是python的内置函数 使用@引用已有的函数后,可用于修饰其他函 ...
- 面向对象进阶时,if语句写错位置
这周blog我也不知道要写什么,因为这章我其实学得有点懵,前面那几天我纠结了好久代码,一直不知道原因错在哪里.后来经过询问老师才知道自己调用错了构造方法,相信也有跟我一样的新手会犯这个错误.我在创建关 ...
- 《逆向工程核心原理》——DLL注入与卸载
利用CreateRemoteThread #include <iostream> #include <tchar.h> #include <Windows.h> # ...
- linux screen的用法
今天使用vps时,起了一个http服务,因为需要用nc接收流量,就要关闭http服务,再去用nc接收流量就接收不到,请教了师傅,这里需要用到screen创建一个会话,就能http服务跟nc同时进行. ...
- 微信小程序实现搜索关键词高亮
目录 1,前言 2,思路 3,代码逻辑 1,前言 项目中碰到一个需求,搜索数据并且关键词要高亮显示,接到需求,马上开干.先上效果图.源码已经做成了小程序代码片段,放入了GitHub了,文章底部有源码链 ...