杀死system server实际上只是将设备的dalvik子进程重启
SQLite提供了本地数据存储功能,webkit提供了可嵌入的wev浏览器引擎。Fretetype提供了位图和矢量字体渲染功能
供应商特定的程序库,即那些为某设备型号提供硬件支撑的代码库,保存在/verder/lib(或/syrtem/vender(lib))路径。其中包括对圆形显示设备、GPS接收器或蜂窝式无线电的底层支撑库等。非厂商特定的程序库则保存在/system/lib路径中,通常包括一些外部项目,如:
Libexif:一个JPEG EXIF格式的处理库
Libexpat:Expat的XML解析库
Libaudioalsa/libtinyalsa:ALSA音频库
Libbluetooth:blue2linux蓝牙库
Libxbus:D-BUS的IPC库
Inti程序通过执行一系列命令对用户空间环境进行初始化。代替从/etc/init.d路径执行基于运行级别的shell脚本,android基于从/inti.rc中找到的指令来执行命令
Property服务位于android的初始化服务中,它提供了一个持续性的(每次启动)、内存映射的、基于键值对的配置服务,属性可以通过多种方式进行读取和设置
Android的基本奔溃报告功能是由一个称为debugged的守护进程提供的,当调试器守护进程启动时,它将打开到android日志功能的一个连接,然后在一个抽象名字空间套接字开始监听客户端的连入。每次程序开始运行,链接器会安装信号处理程序,然后处理某些信号
Android调试桥(ADB)是由几个部件组成的,包括在android设备上的adbd守护进程、在属主工作站上运行的adb服务器,以及相应的abd命令行客户端
Volume守护进程,或称vold,是android系统负责安装和卸载各种文件系统的服务。Vold也处理android secure container(ASEC)文件的安装与卸载,当应用已存于FAT等不安全的文件系统上时,ASEC会对其进行加密处理。它们会将应用加载中进行环回(loopback)设备进行安装,通常挂载到/mnt/asel。不透明二进制块(OBB)也由vold进行安装和卸载。这些文件与应用共同打包,以存储由一个共享密钥加密的数据。而与AESC容器不同的是,对OBB的安装和卸载是由应用自身执行。Vold是以root身份执行的
对android的linux内核最重要的一个添加也许是binder驱动。Binder是一个基于openbinder修改版本的IPC机制。Binder作为一个架构,以客户端-服务器模型运行,允许一个进程同时调用多个“进程”进程中的方法。Binder架构将底层细节进行抽象,使得这些方法
分区是在设备的持久性存储内存中划分的逻辑存储单元或分块,而布局是指对分区制定次序、偏移、尺寸。分区布局是在绝大多数设备中是由引导加载程序(boot loader)来处理的,在某些特殊情况下,也可以由内核本身处理。
一般地,系统的NAND布局会使用一下分区布局:
引导加载模式:在手机开机时负责对硬件的初始化,引导启动android内核,并实现的引导模式开机闪屏
引导区:存储与android的引导映像(boot-image),包含一个linux内核(zimage)和root文件系统RAM磁盘(initrd)
恢复区:存储了一个最小化的android引导映像,该映像提供了一个维护功能,并作为故障保护机制
系统区:存储设备上被挂载至/system的整个android系统映像,这一映像中包含了android框架,程序库、系统、二进制文件,以及预装的应用
用户数据区:也称数据分区。在一个已引导的系统上,会被挂载至/data目录
缓存区:在将应用安装至SD卡的设备中会包括dalvik-cache文件夹,其中存储了dalvikvm的缓存。
无线电分区:存储基带映像系统的分区。此分区通常只在具有通过功能的设备上存在
当引导加载程序完成硬件的初始化之后,它从引导分区中将android内核和init加载到ram中。最后它将跳进内核,让内核继续启动的过程。
Android内核处理过程最后将挂载root文件系统,并启动最初的用户空间进程:init
Init进程是所有的其他用户空间进程的父进程。当它启动时,从Initrd服务挂接的root文件系统任然是读写权限。/init.rc脚本作为init的配置文件,指定了初始化操作系统用户空间组件时需要采取哪些动作,其中包括启动一些android核心服务,如通话的rild,用于VPN访问的mtpd以及andriod调试桥守护进程adbd等。其中的一个服务,Zygote,负责创建DalvikVM,然后启动第一个java组件system server。最后,其他的android框架层服务才会被启动。
Fastboot模式是通过usb将完整硬盘映像刷到特定分区的android协议
Root的过程需要涉及在系统分区上拥有一个带有恰当set-uid权限的su二进制程序,这会允许在任何需要的时候提升权限
通过java接口创建的sqlite数据库,共享配置文件和原始数据文件都使用0660的文件权限,这使得文件对于所属的用户ID和用户组ID都是可读写的,然而当通过原生代码或外部指令创建文件时,应用进程会继承其父进程。Zygote的文件权限为000,这意味着全局可读写。
需要的进程间通信(IPC)端点包括service、activity、broadcast receiver和content provider
攻击向量通常指的是攻击者实施行动的方式,描述了用来执行攻击的方法
在android系统中,缓冲协议(protoobufs)用来传输结构化数据并实现远程调用协议(RPC)