Comments on ELF

Comments on ELF

2025 南京大学《操作系统原理》
Comments on ELF

ELF: 不仅是 “可执行文件”

一个经典、没有任何问题的设计

  • E = Executable
  • L = Linkable
    • 一个标准,管好所有相关工具链
    • 甚至还有 Core Dump

但是

  • ……
2025 南京大学《操作系统原理》
Comments on ELF

被《计算机系统基础》支配的恐惧?

2025 南京大学《操作系统原理》
Comments on ELF

和 ELF 搏斗的每一年

你期末复习的时候吐血了吗?

  • 同学 A: 吐了
  • 同学 B: 吐了
    • “连 CSAPP 这一章都讲得不怎么样”

不只是你们,我们也在吐血

  • 任课教师 A: 第一次打开 ppt 真的有点吐血的感觉
  • 任课教师 B: 根本讲不完,我估计听懂的人也不多
  • 任课教师 C (我自己):太好了,再也不用教了

我们面对的挑战:到底要不要读手册呢?

2025 南京大学《操作系统原理》
Comments on ELF

为什么?

反思

  • ELF 不是一个人类友好的 “状态机数据结构描述”
    • 为了性能,彻底违背了可读 (“信息局部性”) 原则

几乎让你直接去读一个内存里的二叉树

  • “Core dump”
    • Segmentation fault (core dumped)
    • (为什么叫 “core dump”?)
  • 地狱笑话:今天的 core dump 是个 ELF 文件
    • “状态快照”——Everything is a state machine
2025 南京大学《操作系统原理》
Comments on ELF

64 ×\times 64 Bit Magnetic Core Memory

center

2025 南京大学《操作系统原理》
Comments on ELF

既然提到 Core Dump 了

在不那么方便 gdb 的时候

  • ulimit -c unlimited (或者一个你认为合理的值)
  • Crash (SIGSEGV, SIGABRT, SIGILL, ...) 时会做 core dump
    • 适合于 production systems

但 gdb 竟然不允许我继续执行

  • 明明状态里该有的都有啊 (内存 + 寄存器)
    • 往回走呢?2018 年你还可以发一篇 OSDI
  • 想要继续执行?可以用 CRIU
    • 智能 Agent 时代,这玩意可好用了
2025 南京大学《操作系统原理》
Comments on ELF

但曾经,并不是这样的

UNIX a.out “assembler output”

  • 一个相对平坦的数据结构
struct exec {
    uint32_t  a_midmag;  // Machine ID & Magic
    uint32_t  a_text;    // Text segment size
    uint32_t  a_data;    // Data segment size
    uint32_t  a_bss;     // BSS segment size
    uint32_t  a_syms;    // Symbol table size
    uint32_t  a_entry;   // Entry point
    uint32_t  a_trsize;  // Text reloc table size
    uint32_t  a_drsize;  // Data reloc table size
};
  • 功能太少 (不支持动态链接、调试信息、内存对齐、thread-local……),自然被淘汰
2025 南京大学《操作系统原理》
Comments on ELF

换句话说……

支持的特性越多,越不人类友好

  • 听到 “程序头表”、“节头表”,大脑需要额外转译
  • 含义隐晦的 R_X86_64_32, R_X86_64_PLT32
  • 大量的 “指针” (人类无法阅读的偏移量)
    • (我竟然已经被训练成基本可以正常阅读了 😂)
    • 卷王们在考试周经历了同样的魔鬼训练
      • 这就是大学需要改变的地方

人类友好的方式

  • 越 “平坦”,越容易理解
  • 所有需要的信息都立即可见
2025 南京大学《操作系统原理》
Comments on ELF

给你一次重新设计的机会

那就设计一个 FLE 吧

  • Funny (Fluffy) Linkable Executable
  • AIGC
    • Friendly Learning Executable (GPT-4o)
    • Fast Learner's Executable (DeepSeek-r1)

核心设计思路

  • 一切都对人类直接可读 (所有信息都在局部)
  • 回归链接和加载中的核心概念:代码、符号、重定位
    • 你们会怎么设计?
2025 南京大学《操作系统原理》