第3部分 装载与链接

第6章 可执行文件的装载与进程

第1节 进程的虚拟地址空间

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_02

linux下虚拟地址空间的分配

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_03读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_04读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_05

第2节. 程序装载方式

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_06

1. 覆盖装入

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_07读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_08

2. 页映射

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_09

 

第3节 从操作系统角度看可执行文件的装载

1. 进程的建立过程

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_10读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_11读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_12读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_13读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_14

2. 页错误

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_15读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_16读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_17

第4节 进程虚存空间分布

1. ELF文件链接视图和执行视图

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_18读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_19

下面通过一个小例子查看实际的内存分配

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_20读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_21读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_22读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_23读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_24

2. 堆和栈

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_25读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_26读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_27

3. 堆的最大申请数量

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_28读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_29

5. 进程栈初始化

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_30读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_31读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_32

第5节 Linux 内核装载ELF过程简介

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_33读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_34读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_35读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_36读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_37

第6节 Windows PE的装载

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_38

第7章 动态链接

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_39

第8章 共享库的组织

 

第9章 Windows下的动态链接

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_40

第10章 内存

第1节 程序的内存布局

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_41

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_42读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_43读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_44

第2节 栈与调用惯例

1. 什么是栈

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_45读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_46读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_47读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_48读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_49读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_50读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_51

实例

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_52读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_53

2. 调用惯例

调用惯例主要涉及到3个方面

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_54

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_55

以上代码段实际操作过程如下:

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_56

一个多级调用栈的布局如下:

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_57读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_58

常见的函数调用惯例

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_59

3. 函数返回值传递

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_60读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_61读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_62读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_63

第3节 堆与内存管理

1. 什么是堆

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_64

2. Linux进程堆管理

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_65读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_66读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_67读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_linux_68读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_69

3. Windows 进程堆管理

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_70

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_71读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_72

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_73读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_74

4. 堆分配算法

(1) 空闲链表法

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_75

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_虚拟地址_76

(2) 位图的方法

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_动态链接_77

(3) 对象池

 

 

第11章 运行时库

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_78

第12章 系统调用与API

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_对象池_79

第13章 运行库实现

读书笔记之: 程序员的自我修养——链接,装载与库(第3,4部分)_可执行文件_80