1. Static ELF Loader


可执行文件 ⇒ 一个描述了状态机的初始状态 (迁移) 的数据结构

<aside> 📝 Loader / 加载器

Boot Block Loader

操作系统内核也是一个 ELF 文件,加载时同样进行 Loader 的三个步骤

Loading Executable File

Untitled

On Linux x86-64 systems, the code segment starts at address 0x400000, followed by the data segment.

2. Dynamic Linking and Loading


随着库函数越来越大,希望项目能够 “运行时链接”。

目的在于:

  1. 减少库函数的磁盘与内存拷贝
  2. 大型项目的分解

理解动态连接 — 自己设计

假设编译器可以生成生成位置无关代码 (Position-Independent Code, PIC)

对于实现一个动态连接库,我们可以拆分成以下四点需求:

  1. 加载动态库 LOAD(""libc.dl")
  2. 导入外部符号 IMPORT(putchar)