mirror of
https://github.com/feicong/rom-course.git
synced 2025-06-21 18:30:23 +00:00
Update README.md
更新图片地址
This commit is contained in:
parent
b264d8759b
commit
713c5c6125
@ -282,7 +282,7 @@ static int run_init_process(const char *init_filename)
|
||||
|
||||
这里能看到最后是通过`execve`拉起来了系统的第一个进程,`init`进程。总结内核启动的简单流程图如下。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 3.4 Init进程启动
|
||||
@ -1620,7 +1620,7 @@ pid-3638 W start CallStaticVoidMethod current proce
|
||||
|
||||
结合观测到的代码流程,再看下面的一个汇总图。不需要完全理解启动过程中的所有的处理,重点是在这里留下一个大致的印象以及简单的整理。
|
||||
|
||||

|
||||

|
||||
|
||||
## 3.7 Android app应用启动
|
||||
|
||||
@ -2493,7 +2493,7 @@ public void callApplicationOnCreate(Application app) {
|
||||
|
||||
看一张经典的`Android`架构图。
|
||||
|
||||

|
||||

|
||||
|
||||
从上图中可以看到`Framewok`的组成部分,它们的功能分别是:
|
||||
|
||||
@ -3048,11 +3048,11 @@ allow zygote apk_data_file:dir search;
|
||||
|
||||
接着给`010 Editor`编辑器安装一个`ELF`格式解析的模板,在工具栏找到模板->模板存储库。搜索`ELF`,点击安装,操作见下图。
|
||||
|
||||

|
||||

|
||||
|
||||
模板安装后,关闭文件,重新使用`010 Editor`打开后,将编辑方式切换为模板后,就能成功看到使用ELF格式解析so文件的结果了,如下图。
|
||||
|
||||

|
||||

|
||||
|
||||
`ELF`头部定义了`ELF`文件的基本属性和结构,也为后续的段表和节表等信息提供了重要的指导作用。加载`ELF`文件的第一步就是解析`ELF`头部后,再根据头部信息去解析其他部分的数据,`ELF`头部(`elf_header`)结构包含以下成员:
|
||||
|
||||
@ -3086,7 +3086,7 @@ allow zygote apk_data_file:dir search;
|
||||
|
||||
下图是`010 Edtior`解析展示的结果图。
|
||||
|
||||

|
||||

|
||||
|
||||
`program header table`是一种用于描述可执行文件和共享库的各个段(`section`)在进程内存中的映射关系的结构,也称为段表。每个程序头表入口表示一个段。在`Linux`系统中,它是被操作系统用于将`ELF`文件加载到进程地址空间的重要数据结构之一。每个`program header table`具有相同的固定结构,相关字段如下:
|
||||
|
||||
@ -3108,7 +3108,7 @@ allow zygote apk_data_file:dir search;
|
||||
|
||||
下图是编辑器中解析so看到的值
|
||||
|
||||

|
||||

|
||||
|
||||
`section header table`(节头表)是用于描述`ELF`文件中所有节(`section`)的元信息列表,也称为节表。它包含了每个节在文件中的位置、大小、类型、属性等信息。节头表的中相关字段如下:
|
||||
|
||||
@ -3134,7 +3134,7 @@ allow zygote apk_data_file:dir search;
|
||||
|
||||
通过这些信息,`section header table`可以为执行链接和动态加载提供必要的元数据信息。样例数据看下图
|
||||
|
||||

|
||||

|
||||
|
||||
`ELF`文件中有各种节用于存放对应的信息,几个常见的节点存放数据的描述如下。
|
||||
|
||||
@ -3152,7 +3152,7 @@ allow zygote apk_data_file:dir search;
|
||||
|
||||
* `.shstrtab` 节点(`Section Header String Table`)存储节名称字符串,即每个节的名称和节头表中的节名称偏移量。它包含了`ELF`文件中每个节的字符串名称,方便读取程序在加载时快速访问。在`Android`中,`.shstrtab`节点是一个特殊的节,它位于节头表的末尾,可以通过`ELF`文件头的`e_shstrndx`字段找到。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### 3.12.2 动态库加载流程
|
||||
|
Loading…
x
Reference in New Issue
Block a user