Android so(ELF) 文件解析

前言

ELF 是一种可执行文件的格式,全称是 Executable and Linkable Format,即可执行和链接格式,它是 Unix/Linux 系统下的二进制文件的标准格式,与之对应的是 Windows 系统的 PE(Portable Executable)可执行文件格式,它们都是由 COFF(Common Object File Format,通用对象文件格式)文件格式发展而来。

so 文件是 Unix/Linux 系统中的动态库文件,被称为共享目标文件(Shared Object File),后缀名为 .so,它是 ELF 的一种,另外属于 ELF 类型的还有可重定位文件(Relocatable File)以及核心转储文件(Core Dump File)。

阅读更多

Android Dex 文件解析

前言

Java 代码文件在经过 javac 编译器编译后会产出 .class 格式的 Java 虚拟机可执行的字节码文件,而 Dex 文件则是 Android SDK 编译 Java 代码后的产物(Android SDK 使用 dx 或 d8 编译器将 .class 文件编译为 .dex 文件),了解 Dex 文件结构是理解 Android 虚拟机原理的基础,同时也是学习 Android 逆向工程的基础。

Dex 文件的文件后缀为 .dex,是 Android 虚拟机的可执行文件。

阅读更多

Android zygote 进程启动分析

前言

zygote 进程是 Android 系统中第一个拥有 Java 运行环境的进程,它由用户空间 1 号进程 init 进程通过解析 init.rc 文件创建,从 init 进程 fork 而来。从 zygote(受精卵)这个富含生物意义的名字可以知道,它是一个孵化器。Android 系统中所有运行在 Java 虚拟机中的系统服务以及应用均由 zygote 进程孵化而来。

理解 zygote 进程的启动过程以及所做的工作,将为理解 Java 层系统服务以及所有应用的进程启动流程打下基础。

阅读更多

Android init 进程启动分析

前言

Android 系统启动后,内核会创建 0 号内核进程 idle 进程,然后 idle 进程通过调用 kernel_thread 函数,以 kernel_init 函数作为参数,通过回调 kernel_init 函数执行可执行文件 /init 创建 Android 系统中的第一个用户级别的进程 init 进程,init 进程的 pid = 1,它是所有用户空间进程的始祖,init 进程会通过 fork 分裂出 servicemanager(Binder 服务管理服务)、zygote(Android 系统中第一个 Java 进程)以及 surfaceflinger(图形服务)等系统核心服务进程,理解 init 进程的启动过程以及所做的工作将为理解整个 Android 系统运行机制打下基础。

1
2
3
// kernel 3.18 - init/main.c

kernel_thread(kernel_init, NULL, CLONE_FS);
阅读更多