转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52138483

  • Hook机制中Binder代理类关系图
  • Hook机制中Binder代理时序图
  • MyServiceManager
  • ServiceManagerCacheBinderHook
  • ServiceManagerBinderHook
  • BinderHook

Hook机制中Binder代理类关系图

Hook机制中Binder代理时序图


MyServiceManager

  • mOriginServiceCache:这里存储的是原始的service cache。每个ActivityThread在bindApplication()的时候,会从ServiceManager那边获得一个service cache(可以减少和Binder代理之间通信,系统Binder是一个专门的BinderProxy和把上层的service和Binder driver进行IPC),每次要和某个service通信时,会先检查这个cache里有没有代理对象,如果有的话就直接用,不需要再和ServiceManager进行一次binder交互了。
  • mProxiedServiceCache:这里存储的就是service cache的代理对象了,因为我们要hook这些binder和上层(serviceConnection时会转成IBinder接口)调用,所以必须把service cache也替换成我们的代理对象,每次调用都会走进ServiceManagerCacheBinderHook对象的invoke()方法。
  • mProxiedObjCache:这里存储的是所有的proxyservice Object,那原始的service对象放在哪里呢?其实是在BinderHook的mOldObj里。

ServiceManagerCacheBinderHook


前面把service cache存起来,下次如果要真正和service进行通信,通过getOriginService()把原始的service cache拿出来用就行了。

ServiceManagerBinderHook


这个类继承自ProxyHook,主要是用来hook住getService()和checkService()这两个API。如果这两个API被调用,并且在mProxiedObjCache发现有对应的代理对象,则直接返回这个代理对象。

BinderHook


先调用ServiceManagerCacheBinderHook的onInstall()方法更新一下service cache,然后生成一个新的代理对象放到mProxiedObjCache里。这样下次不管是从cache里取,还是直接通过binder调用,就都会返回我们的代理对象。

Binder代理其实在android 系统中也是一个十分重要的角色。

这部分可以从网上搜下相关资料。360 plugin 的Binder代理就是借鉴了系统的Binder相关。

第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码,即可关注。

插件开发之360 DroidPlugin源码分析(三)Binder代理相关推荐

  1. linux驱动开发之spi-omap-100k.c源码分析

    代码分析 对于linux的驱动代码来说,我们要从后往前分析: /** OMAP7xx SPI 100k controller driver* Author: Fabrice Crohas <fc ...

  2. 安全开发之w9scan扫描器源码学习

    安全开发之w9scan扫描器源码学习 工作流程 信息搜集 子域名扫描 w9scan中的子域名扫描实现 泛解析绕过 cms指纹识别 插件加载 插件格式 加载过程 基于爬虫的漏洞扫描 线程调度 w9sca ...

  3. 【投屏】Scrcpy源码分析三(Client篇-投屏阶段)

    Scrcpy源码分析系列 [投屏]Scrcpy源码分析一(编译篇) [投屏]Scrcpy源码分析二(Client篇-连接阶段) [投屏]Scrcpy源码分析三(Client篇-投屏阶段) [投屏]Sc ...

  4. Nouveau源码分析(三):NVIDIA设备初始化之nouveau_drm_probe

    Nouveau源码分析(三) 向DRM注册了Nouveau驱动之后,内核中的PCI模块就会扫描所有没有对应驱动的设备,然后和nouveau_drm_pci_table对照. 对于匹配的设备,PCI模块 ...

  5. Spring源码分析(三)

    Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...

  6. 【转】ABP源码分析三:ABP Module

    Abp是基于模块化设计思想进行构建的.开发人员可以将自定义的功能以模块(module)的形式集成到ABP中.具体的功能都可以设计成一个单独的Module.Abp底层框架提供便捷的方法集成每个Modul ...

  7. paho架构_MQTT系列最终章-Paho源码分析(三)-心跳与重连机制

    写在前面 通过之前MQTT系列-Eclipse.Paho源码分析(二)-消息的发送与接收的介绍,相信仔细阅读过的小伙伴已经对Eclipse.Paho内部发送和订阅消息的流程有了一个较为清晰的认识,今天 ...

  8. Journey源码分析三:模板编译

    2019独角兽企业重金招聘Python工程师标准>>> 在Journey源码分析二:整体启动流程中提到了模板编译,这里详细说下启动流程 看下templates.Generate()源 ...

  9. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  10. ABP源码分析三十:ABP.RedisCache

    ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...

最新文章

  1. 我的Rails笔记(1)
  2. Redis简介、与memcached比较、存储方式、应用场景、生产经验教训、安全设置、key的建议、安装和常用数据类型介绍、ServiceStack.Redis使用(1)...
  3. UIVIewController自定义切换效果-b
  4. error: #5: cannot open source input file core_cm3.h: No such file or directory
  5. 排序算法 | 直接插入排序算法的图解、实现、复杂度和稳定性分析
  6. 当你刷新当前Table时,刷新后如何回到你上一次所在位置呢?
  7. python元组的方法_Python元组及其方法
  8. MWeb 的基本使用
  9. dephi(pascal)中修改Label字体的样式(加粗,斜体,下划线)
  10. python协同过滤算法_协同过滤算法介绍及算法实现
  11. 道了 14 年歉的扎克伯格,继续犯错的 Facebook
  12. hp usb disk storage format tool
  13. linux 安装pinphp遇到的“系统不支持curl!”问题
  14. 强烈推荐大家看这篇文章:iOS开发常用三方库、插件、知名博客等等(特别有用)
  15. GNN-图卷积模型-2017:GAT【消息传递(前向传播):聚合函数+更新函数】【聚合函数:attention(邻域所有节点根据注意力机制进行加权)】【训练更新函数的参数】【直推式归纳式】【同质图】
  16. xpath helper
  17. Go语言自学系列 | golang包管理工具go module
  18. 丘成桐:如何学好微分几何
  19. 启动openoffice命令
  20. HTML注册登录页面模板,左右切换,用户注册、用户登录两种功能。

热门文章

  1. 触发器的创建和使用(sql2005)
  2. ora-01031:insufficient privileges解决方法总结
  3. Anaconda Python安装,Spyder汉化及调试
  4. node.js(一)基础介绍
  5. Cure Your Acne by NOT Eating This!
  6. Notepad++一键编译运行(Python、Java、C++)
  7. 【JZOJ6225】【20190618】计数
  8. linux/mac下一键删除下载失败的maven jar包
  9. Oracle的常用修改表及字段的语句
  10. NYOJ 214(二分插入)