什么是可执行文件?

学习操作系统前

  • 那个 “双击可以弹出窗口的东西”

学习操作系统后

  • 一个操作系统中的对象 (文件)
  • 一个字节序列 (我们可以把它当文本编辑)
  • 一个描述了状态机初始状态的数据结构
    • 哦,打扰了

作为 “数据结构” 的可执行文件

状态机初始状态的描述

  • 内存中的各段的位置和权限
  • 初始的 PC 在 ELF Header 的 entry
  • 寄存器和栈由操作系统决定
    • 上节课的 env.c

状态迁移的描述

  • 代码

RTFM: System V ABI

  • binutils 中的工具可以让我们查看其中的重要信息
  • ChatGPT 可以帮我们解释不明白的概念

加载最小可执行文件

最小可执行文件

  • 代码在内存中
  • PC 指向第一条指令
  • 除此之外,任何初始状态都行

直接把代码 mmap 到内存

  • 然后跳转过去即可
  • (你可以想象 execve 里就做了这件事)