
Android / Binder
文章平均质量分 95
Omni-Space
专注Android, Mobile Security and AI
展开
-
【译】BINDER TRANSACTIONS IN THE BOWELS OF THE LINUX KERNEL
活页夹是Android中主要的IPC / RPC(进程间通信)系统。它允许应用程序彼此通信,并且它是Android环境中几种重要机制的基础。例如,Android服务是建立在Binder之上的。与Binder交换的消息称为活页夹事务,它们可以传输简单数据(例如整数),但也可以处理更复杂的结构,例如文件描述符,内存缓冲区或对象上的弱/强引用。Internet上有很多有趣的Binder文档,但...翻译 2020-03-31 00:58:07 · 626 阅读 · 0 评论 -
Binder子系统之调试分析(三)
一. binder调试信息1.1 binder_thread调用方法:print_binder_threadthread 8980: l 12 //tid=8980,looper=12关于looper状态值:BINDER_LOOPER_STATE_REGISTERED = 0x01, // 创建注册线程BC_REGISTER_LOOPERBINDE转载 2016-10-04 07:18:03 · 1358 阅读 · 0 评论 -
Binder子系统之调试分析(二)
一. 概述上一篇文章已经介绍了binder子系统调试的一些手段,这篇文章再来挑选系统几个核心服务进程来进行分析.1.1 创建debugfs首先debugfs文件系统默认挂载在节点/sys/kernel/debug,binder驱动初始化的过程会在该节点下先创建/binder目录,然后在该目录下创建下面文件和目录:proc/statsstatetransactions转载 2016-10-04 07:16:48 · 2293 阅读 · 0 评论 -
Binder子系统之调试分析(一)
一. 概述在博客以前有写过关于binder系列,大概写了10篇关于binder的文章,从binder驱动,到native层,再到framework,一路写到app层的使用。有兴趣的可以看看 Binder系列—开篇。二.Binder驱动调试看过Binder系列文章的同学,会发现Binder IPC过程最终都交给Binder Driver来完成,这是真正干跨进程通信活的地方,转载 2016-10-04 07:15:13 · 3692 阅读 · 0 评论 -
红茶一杯话Binder(传输机制篇_下)
1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向bin转载 2016-09-29 13:47:38 · 778 阅读 · 0 评论 -
红茶一杯话Binder(传输机制篇_中)
1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动。然而在驱动层,这部分数据又是如何传递到BBinder一侧的呢?这里面到底藏着什么猫腻?另外,上一篇文章虽然阐述了4棵红黑树,但是并未说明红黑树的节点到底是怎么产生的。现在,我们试着回答这些问题。1.1 概述 在Binder驱动层,和ioctl()相对的动作是b转载 2016-09-29 13:45:59 · 603 阅读 · 0 评论 -
红茶一杯话Binder(传输机制篇_上)
1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击。其实,在binder驱动层,还有个与之相对的结构,转载 2016-09-29 13:44:52 · 565 阅读 · 0 评论 -
红茶一杯话Binder(ServiceManager篇)
1.先说一个大概 Android平台的一个基本设计理念是构造一个相对平坦的功能集合,这些功能可能会身处于不同的进程中,然而却可以高效地整合到一起,实现不同的用户需求。这就必须打破过去各个孤立App所形成的天然藩篱。为此,Android提供了Binder机制。 在Android中,系统提供的服务被包装成一个个系统级service,这些service往往会在设备启动转载 2016-09-29 13:42:39 · 646 阅读 · 0 评论 -
红茶一杯话Binder
1 什么是Binder? 简单地说,Binder是Android平台上的一种跨进程交互技术。该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责Android平台的开发工作,所以把这项技术也带进了Android。转载 2016-09-29 13:40:47 · 770 阅读 · 0 评论 -
Binder源码分析之Java层(原)
前面的几节中我们介绍了Native层Binder通讯的原理和用法,那么在Java层如何使用Binder通讯呢?其原理又与Native层的Binder有什么关系呢? 与Native层的ServiceManager类似,Android在Java层也有一个ServiceManager用于处理Java层Service的注册、申请。只不过,Java层的这个ServiceManager,其实转载 2016-09-27 07:35:43 · 553 阅读 · 0 评论 -
Binder源码分析之Native层(原)
前面两节中介绍了Binder机制中的ServiceManager和Binder驱动,在这一节中,我们来介绍Native中的Binder通讯。 为了更好的理解过程,我们挑选Native中的MediaServer进行分析。一、MediaServer加载过程 Android启动过程中会去执行init.rc脚本,在这个脚本中将会启动一些关键的系统转载 2016-09-27 07:34:13 · 526 阅读 · 0 评论 -
以Binder视角来看Service启动
一. 概述在前面的文章startService流程分析,从系统framework层详细介绍Service启动流程,见下图:Service启动过程中,首先在发起方进程调用startService,经过binder驱动,最终进入system_server进程的binder线程来执行ActivityManagerService模块的代码。本文将以Binder视角来深入讲解其中地这转载 2016-10-04 07:19:26 · 925 阅读 · 0 评论 -
为什么Android要采用Binder作为IPC机制?
作者:Gityuan链接:https://www.zhihu.com/question/39440766/answer/89210950来源:知乎著作权归作者所有,转载请联系作者获得授权。在开始回答 前,先简单概括性地说说Linux现有的所有进程间IPC方式:1. 管道:在创建时分配一个page大小的内存,缓存区大小比较有限;2. 消息队列:信息复制两次,额外的CP转载 2016-10-06 16:51:46 · 674 阅读 · 0 评论 -
实现AIDL接口的Binder连接池
Binder作为AIDL通信的核心, 在使用中经常需要重复利用, 动态管理AIDL接口. Binder连接池的主要作用是把Binder请求统一发送至Service执行, 即动态管理Binder操作, 避免重复创建Service. 本文使用两种简单的AIDL服务, 使用Binder连接池动态切换, 含有演示Demo.Binder本文源码的GitHub下载地址AID转载 2017-03-30 17:54:38 · 775 阅读 · 0 评论 -
Android Binder Driver缺陷导致定屏问题分析
本文讲解异步binder call是如何阻塞整个系统的,通过ramdump信息以及binder通信协议来演绎并还原定屏现场。一、背景知识点解决此问题所涉及到的基础知识点有:Trace、CPU调度、Ramdump推导、Crash工具、GDB工具、Ftrace, 尤其深入理解binder IPC机制。1.1 工具简介Trace:分析死锁问题的最基本的技能,通过kill -3可生成相应的traces.t...转载 2018-06-05 13:15:03 · 3701 阅读 · 2 评论 -
Android Treble架构解析
本文主要介绍Treble架构下的HAL&HIDL&Binder相关技术原理。Treble的详细资料文档,请参考Treble 官方文档。1. Treble 简介Android 8.0 版本的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Project转载 2018-01-26 09:10:10 · 3715 阅读 · 1 评论 -
Binder实用指南(二) - 实战篇
本章的内容主要说明如何在JavaFramework层和Native层自定义Client-Server组件,并且使用Binder进行通信。一、Native Binder源码目录结构:alps/frameworks/native/cmds/NativeBinderDemo/123456|-NativeBinderDemo|---ClientD转载 2017-08-27 15:24:08 · 588 阅读 · 0 评论 -
Binder实用指南(一) - 理解篇
这是关于Android Binder机制的一篇文章,Binder是Android里面非常重要的组成,也是最难理解的一块知识点,学习Binder最好的方法是深入源码阅读,因为Binder相关的知识错综复杂,一般初学者也很容易迷失在源码的汪洋里,本文旨在梳理Binder的架构和流程,并且试着以实用的角度来看待Binder。一、为什么需要Binder机制?Android系统中,每个应用程转载 2017-08-27 15:22:49 · 759 阅读 · 0 评论 -
一个关于binder的debug技巧
在android的C/S IPC通信框架中,常会遇到binder通信异常的问题(其实不是太经常会遇到,主要在煲机和压测等极限测试的情况下才会出现),binder的driver基本不用去怀疑其出bug的可能性,基本为0,如果binder通信出现问题,那么十有八九都是app或者service本身写的有问题造成的。这里介绍一个通过kernel的sys文件系统去debug binder的方法,我遇转载 2017-08-26 13:57:50 · 2039 阅读 · 0 评论 -
理解Android Binder机制(3/3):Java层
本文是Android Binder机制解析的第三篇,也是最后一篇文章。本文会讲解Binder Framework Java部分的逻辑。Binder机制分析的前面两篇文章,请移步这里:理解Android Binder机制(1/3):驱动篇理解Android Binder机制(2/3):C++层):驱动篇下文所讲内容的相关源码,在AOSP源码树中的路径如下://转载 2017-06-17 02:06:24 · 2603 阅读 · 0 评论 -
理解Android Binder机制(1/3):驱动篇
Binder的实现是比较复杂的,想要完全弄明白是怎么一回事,并不是一件容易的事情。这里面牵涉到好几个层次,每一层都有一些模块和机制需要理解。这部分内容预计会分为三篇文章来讲解。本文是第一篇,首先会对整个Binder机制做一个架构性的讲解,然后会将大部分精力用来讲解Binder机制中最核心的部分:Binder驱动的实现。Binder机制简介Binder源自Be Inc公司开发转载 2017-06-17 02:00:41 · 2727 阅读 · 0 评论 -
Android插件化原理解析——Hook机制之Binder Hook
Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等;这些广泛存在系统服务给应用程序提供了诸如任务管理,音频,视频等异常强大的功能。插件框架作为各个插件的管理者,为了使得插件能够无缝地使用这些系统服务,自然会对这些系统服务做出一定的改造(Hook),使得插件的转载 2017-06-16 06:40:04 · 675 阅读 · 0 评论 -
农民斗地主——Binder fuzz安全研究
扣吧力作,欢迎转载,转载请注明来自colbert337.github.io最近扣吧忙成狗了,好久没更新博客,对不住大家了,今天趁天气暖和点,来一篇干货。由于好久没搞Android了,写得不专业的地方,请见谅哈。0.为什么要研究Binder fuzz以目前最热门的指纹方案为例。TZ:Trustzone(请自行百度)CA:Trustzone框架中的Clinet App转载 2017-03-15 05:32:31 · 1100 阅读 · 0 评论 -
Binder源码分析之驱动层(原)
前言 在《Binder源码分析之ServiceManager》一文中我们介绍了利用Binder进行通讯的流程,即ServiceManager把自己注册为“管理员”之后,负责其他Service的add操作,或者其他Client的get操作。在这个过程中,有一些接口我们并没有深入分析,比如: 1、打开Binder[java] view plain转载 2016-09-27 07:32:50 · 672 阅读 · 0 评论 -
Binder源码分析之ServiceManager(原)
ServiceManager作为Native层Service的管理员,有着极其重要的作用,主要表现两个方面: 1、对于服务端来说,系统所有的服务提供者都需要向ServiceManager注册。 2、对于客户端来说,所有客户端如果想要获得某个系统服务的代理,必须向ServiceManager申请相应的服务端代理。 下面从源码分析ServiceMa转载 2016-09-27 07:31:36 · 472 阅读 · 0 评论 -
Android framwork service添加(manager 远程调service,service jni调native code)
在平常android应用开发中,多数只是调framwork中的API进行application layer的coding,而在系统开发中可能会自己添加系统服务;系统服务如任何添加,服务如何调native code,以及service如何被manager调用...这里我给出一个结果验证的demo。1、实现编写native code,framwork/base/services/jni/c转载 2016-09-24 08:52:41 · 731 阅读 · 0 评论 -
Binder学习指南
毫不夸张地说,Binder是Android系统中最重要的特性之一;正如其名“粘合剂”所喻,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种及其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder挂钩;如果对Binder不甚了解,那么就很难了解这些系统机转载 2016-09-20 08:47:33 · 443 阅读 · 0 评论 -
Android Binder基本概念流程学习
一 Media Service进程启动Init.rc中描述的service对应linux 的进程:Media进程定义:service media /system/bin/mediaserver class main user media group audio camera inet net_bt net_bt_admin net_bw_acct d转载 2016-09-20 08:35:18 · 469 阅读 · 0 评论 -
Android的IPC机制Binder
第一部分 Binder的组成 1.1 驱动程序部分驱动程序的部分在以下的文件夹中:Java代码 kernel/include/linux/binder.h kernel/drivers/android/binder.c Java代码 kernel/include/linux/binder.h kernel/drive转载 2016-09-20 08:29:46 · 304 阅读 · 0 评论 -
Android Framework系统服务详解
Android Framework系统服务详解操作环境系统:Linux (Ubuntu 12.04)平台:高通Android版本:5.1PS: 符号...为省略N条代码一、大致原理分析Android本身有很多系统服务,如:AlarmManagerService、PowerManagerService、AudioServic转载 2016-09-13 09:53:18 · 1658 阅读 · 0 评论 -
Android Binder机制----实现自定义的系统服务
一.基于源码分析Binder机制: Binder机制是Android系统中实现跨进程通信(IPC)的一种重要机制。可以说,Binder机制在android系统中无处不在,所以,要研究android源码,学好Binder机制极其重要。 在学习Binder机制之前,我们先试着摸索一下系统中一些相关的涉及到Binder机制的代码。 首先,先看看SystemServer.ja转载 2016-09-13 09:51:43 · 850 阅读 · 0 评论 -
Android Binder 分析——匿名共享内存(Ashmem)
前面分析了 binder 中用来打包、传递数据的 Parcel,一般用来传递 IPC 中的小型参数和返回值。binder 目前每个进程 mmap 接收数据的内存是 1M,所以就算你不考虑效率问题用 Parcel 来传,也无法传过去。只要超过 1M 就会报错(binder 无法分配接收空间)。所以 android 里面有一个专门用来在 IPC 中传递大型数据的东西—— Ashmem(Anonymou转载 2016-04-15 09:27:07 · 5193 阅读 · 0 评论 -
Android Binder 分析——数据传递者(Parcel)
前面 binder 原理和通信模型中在接口实现部分(Bp 和 Bn)中应该看到很多地方都有使用 parcel。这个 android 专门设计用来跨进程传递数据的,实现在 native,java 层有接口(基本上是 jni 马甲)。照例先说下源代码位置(4.4 的):12345678910111213141516171819202122232425262728# ja转载 2016-04-15 09:25:44 · 7689 阅读 · 0 评论 -
Android Binder 分析——通信模型
通信就要搞一些协议,binder 的比较简单,但是也有一个基本的模型,这里以最基本的一次 IPC 调用来说明一下。然后涉及的代码主要在(这里不列 java 层的代码了,java 层的代码前面原理篇分析过了,主要是挂马甲调用 native 的方法的):123456789# native binder 头文件frameworks/native/include/binde转载 2016-04-15 09:24:49 · 1034 阅读 · 0 评论 -
Android Binder 分析——原理
分析之前说一下原理。为要 android 要搞这么复杂的一个东西。那是因为 android 是个多进程的系统,进程间的数据交换、相互调用(某几个程序配合完成某些业务)就涉及跨进程通信。2个进程不能直接访问数据的原因:每个进程的地址空间的独立的,所以进程A中某个数据的地址在进程B中不确定是什么东西。安全性,如果能随便访问其它进程空间的数据,那么是非常危险的事情(想想看你再用支付宝输支付密码的转载 2016-04-15 08:57:37 · 1120 阅读 · 0 评论 -
Android深入浅出之Binder机制
Android深入浅出之Binder机制一 说明 Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。我们这里将以MediaService的例子来分析Binder的使用:l ServiceManager,这是Androi转载 2016-09-21 16:13:12 · 1094 阅读 · 0 评论 -
Android Bander设计与实现 - 设计篇
摘要Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Bin转载 2016-09-21 16:17:56 · 817 阅读 · 0 评论 -
Android Binder设计与实现 - 实现篇(1)
本文属于原创作品,转载请注明出处并放于明显位置,原文地址:http://www.cnblogs.com/albert1017/p/3849585.html 前言 在学习Android的Binder机制时,看了http://blog.csdn.net/universus/article/details/6211589这篇文章(读本文前最好读一下),觉得写得非常棒,可惜只有设转载 2016-09-21 16:20:36 · 694 阅读 · 0 评论 -
两种AIDL用法分析(原)
我们在前面介绍了关于AIDL的两种用法,第一种用法主要用在应用层中(应用层的AIDL调用),第二种用法主要用在framework中(Framework中的AIDL调用)。但是这两种用法中都提到了Stub、asInterface等关键字,在这一节中我们主要针对AIDL内部机制的分析来深入理解AIDL调用的过程。 为了便于分析,我们还拿第一节中我们自己搭建的例子去分析。转载 2016-09-27 07:30:23 · 448 阅读 · 0 评论 -
Framework中的AIDL(原)
在上一节(应用层的AIDL调用)中我们介绍了应用层中的AIDL用法, 这一节中,我们来看一下系统Framework层中更为普通的AIDL用法。 为了便于分析,我们挑选了ITelephonyRegistry这个SystemService进行分析。这个服务的主要作用就是对通话相关的事件进行监听,我们把重心放在AIDL的实现结构上,不去关注ITelephonyRegistry具体的实现转载 2016-09-27 07:28:22 · 617 阅读 · 0 评论