作者:阿朵爸 | 来源:互联网 | 2023-09-24 12:02
前言事实上,现在市面上和网络上能找到的计算机技术方面的书籍和资料中,什么都很齐全,唯独关于这三个主题(链接、装载与库)的讨论十分稀缺,即使能找到一些也是犹如残缺的典籍,不仅不完整而
前言
事实上,现在市面上和网络上能找到的计算机技术方面的书籍和资料中,什么都很齐全,唯独关于这三个主题(链接、装载与库)的讨论十分稀缺,即使能找到一些也是犹如残缺的典籍,不仅不完整而且很多已经过时了。关于现在通用的Windows和Liunx平台的链接、装载及PE/ELF文件的详细分析,实在很少见。这个领域中,最为完整、也最为权威的莫过于John R. Levine的Linkers &Loaders,这本书我也前前后后通读了好几遍,虽然它对链接和装载方面的描述较为完整,但是过于理论化,对于实际的系统机制描述则过于简略。
你将学到什么
本书将详细描述现在流行的Windows和Linux操作系统下各自的可执行文件,目标文件格式;普通CIC++程序代码如何被编译成目标文件及程序在目标文件中如何存储;目标文件如何被链接器链接到一起,并且形成可执行文件;目标文件在链接时符号处理、重定位和地址分配如何进行;可执行文件如何被装载并且执行;可执行文件与进程的虛拟空间之间如何映射;什么是动态链接,为什么要进行动态链接;Windows 和Linux如何进行动态链接及动态链接时的相关问题;什么是堆,什么是栈:函数调用惯例;运行库,Glibe 和MSVC CRT的实现分析:系统调用与AP;最后我们自己还实现了一个Mini CRT。
应当具备的基础知识
在本书中,我们尽量避免要求读者有很多的基础知识,但难免有些要求。其中包括对CIC++编程语言的基本了解、x86汇编语言基础、操作系统基本概念及基本编程技巧和计算机系统结构的基本概念。
内容
本书分为4大部分,分别如下:
第1部分 简介
第1章 温故而知新
介绍基本的背景知识,包括硬件。操作系统。线程等。
第2部分 静态链接
第2章 编译和链接
介绍编译和链接的基本概念和步骤。
第3章 目标文件里有什么
介绍COFF日标文件格式和源代码鳊译后如何在目标文件中存储。
第4章 静态链接
介绍静态链接与静态库链接的过程和步骤。
第5章 Windows PE/COFF
介绍Windows平台的目标文件和可执行文件格式。
第3部分 装载与动态链接
第6章 可执行文件的装载与进程
介绍进程的概念、进程地址空间的分布和可执行文件映射装载过程。
第7章 动态链接
以Linux下的.so共享库为基础详细分析了动态链接的过程。
第8章 Linux 共享库的组织
介绍Linux下共享库文件的分布和组织。
第9章 Windows 下的动态链接
介绍Windows系统下DLL动态链接机制。
第4部分 库与运行库
第10章 内存
主要介绍堆与栈,堆的分配算法,函数调用栈分布。
第11章 运行库.
主要介绍运行库的概念。CIC++运行库、Glibe 和MSVC CRT、运行库如何实现C++全局构造和析构及以fread()库函数为例对运行库进行剖析。
第12章 系统调用与API
主要介绍Linux和Windows的系统调用及Windows的API.
第13章 运行库实现
本章主要实现了一个支持堆、基本文件操作、格式化字符串、基本输入输出、C++ new/delete. C++ string. C++ 全局构造和析构的Mini CRT.
这份《程序员的自我思想》电子书籍总共483页,需要完整版的朋友可以以下方式获取。