程序员的自我修养:链接、装载与库

基本信息

  • 作者: 俞甲子、石凡、潘爱民
  • 出版社: 电子工业出版社
  • 出版年: 2009年4月
  • 页数: 483页
  • 文件大小: 30.42MB
  • 原始路径: /books/程序员的自我修养--链接、装载和库.pdf
  • 处理日期: 2026-09-03
  • 处理状态: done_toc_only(扫描版,已提取目录和序言)

核心主题

本书深入剖析系统软件的运行机制和原理,覆盖应用程序在编译、链接和运行时刻的各个环节:

  1. 代码指令保存方式 — 可执行文件格式(ELF/PE)
  2. 静态链接 — 库文件如何与应用程序链接
  3. 动态链接 — 共享库、延迟绑定、PLT/GOT机制
  4. 程序装载 — 进程地址空间布局、加载器工作原理
  5. C/C++运行库 — CRT初始化、全局对象构造析构、内存管理
  6. 系统服务调用 — 操作系统API的底层机制

章节结构(根据序言推断)

第一部分:链接基础

  • 可执行文件格式(ELF、PE)
  • 目标文件结构
  • 符号与重定位

第二部分:静态链接

  • 静态库的创建与使用
  • 链接过程详解
  • 符号解析与合并

第三部分:动态链接

  • 共享库机制
  • PLT(过程链接表)与GOT(全局偏移表)
  • 延迟绑定优化
  • dlopen/dlsym 动态加载

第四部分:装载与运行

  • 进程地址空间布局
  • 装载器(loader)工作原理
  • 动态链接器的实现
  • MiniCRT跨平台C/C++运行库

核心观点摘录

从序言(潘爱民)

“即使一个简单的’Hello World!’程序,也依赖于背后的输入输出库及系统提供的模块,这种依赖性已经成为现代软件在操作系统环境下运行的一个必要条件。”

“将程序的编译和运行过程所涉及的各种技术全面地串连起来介绍,却尚未有先例。“

从作者访谈(俞甲子)

“为了了解操作系统内核及装载、链接等这些关键的技术,我曾经自己从头写了一个很小的内核、装载器及一个简单的运行库,它们组成了一个可以完整运行在PC上的支持多进程、多线程的操作系统环境。”

“经常听很多人谈起,IT技术日新月异,其实真正核心的东西数十年都没怎么变化,变化的仅仅是它们外在的表现,大体也是换汤不换药吧。“

从石凡序言

“本书所讲的内容不是活跃在当今IT舞台上的高新技术,而是默默服务于所有计算机应用的扫地僧。”

“当你的程序无法启动的时候,你可能会在脑海里多设想一种可能性;当你的代码链接失败的时候,你可能会更快地意识到问题的所在;当你的程序发生非法操作的时候,你可能不至于面对错误报告毫无头绪。“

推荐参考书籍

  • 《Linkers and Loaders》— John R. Levine(链接装载领域权威)
  • 《Intel® 64 and IA-32 Architectures Software Developer’s Manuals》
  • 《Linux内核源代码情景分析》— 毛德操、胡希明
  • 《深入理解计算机系统》(CSAPP)— Bryant & O’Hallaron
  • 《深入解析 Windows 操作系统》— Russinovich
  • 《Advanced Programming in the UNIX Environment》— W. Richard Stevens

学习价值

  1. 知其然更知其所以然 — 理解程序从源码到执行的完整链路
  2. 调试能力提升 — 遇到链接错误、段错误时有明确的排查思路
  3. 性能优化基础 — 理解PLT/GOT、页对齐等机制有助于写出高效代码
  4. 跨平台视野 — 同时覆盖Windows和Linux两大平台

行动建议

  • 适合有C/C++基础的开发者系统学习系统底层知识
  • 配合实际操作(编译选项、链接脚本、逆向分析)学习效果更佳
  • 与《深入理解计算机系统》互为补充