19. 可执行文件和加载

背景回顾:我们已经见识了一个 “层层封装” 的应用生态世界,它们的 “底座” 是操作系统提供的对象和 API,以及封装它们的 C 标准库。之前,我们 “默认” 了编译器工具链可以帮助我们实现高级语言到可执行文件的翻译。今天是时候 “打开” 这部分内容了。

本讲内容:(静态链接) 可执行文件:概念、原理;链接器/加载器的设计与实现。

19.1 可执行文件

19.2 Funny Little Executable

19.3 加载 ELF 文件 🌶️

Take-away Messages

可执行文件是一个描述状态机初始状态的数据结构 (字节序列);加载器就是把这个 “初始状态” 搬运到操作系统中的程序。用数据结构的眼光看可执行文件,就不难发现它不好阅读的原因:它的设计者并没有打算让你阅读它。这样的难题在《操作系统》课程中经常出现;而我们的应对方法是先理解一个粗糙但重要的模型,然后在此基础上理解工业级实现面临的挑战和问题。

课后习题/编程作业

1. 编程实践

🖥️编程

除复现和理解课堂代码之外,Online Judge 已经就绪,请尽可能按照进度完成作业。