Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

导读

你将学到什么

本书将详细描述现在流行的Windows和Linux操作系统下各自的可执行文件、目标文件格式;普通C/C++程序代码如何被编译成目标文件及程序在目标文件中如何存储;目标文件如何被链接器链接到一起,并且形成可执行文件;目标文件在链接时符号处理、重定位和地址分配如何进行;可执行文件如何被装载并且执行;可执行文件与进程的虚拟空间之间如何映射;什么是动态链接,为什么要进行动态链接;Windows和Linux如何进行动态链接及动态链接时的相关问题;什么是堆,什么是栈;函数调用惯例;运行库,Glibc和MSVC CRT的实现分析;系统调用与API;最后我们自己还实现了一个Mini CRT。

应当具备的基础知识

在本书中,我们尽量避免要求读者有很多的基础知识,但难免有些要求。其中包括对C/C++编程语言的基本了解、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章 运行库
      • 主要介绍运行库的概念、C/C++运行库、Glibc和MSVC CRT、运行库如何实现C++全局构造和析构及以fread()库函数为例对运行库进行剖析。
    • 第12章 系统调用与API
      • 主要介绍Linux和Windows的系统调用及Windows 的API。
    • 第13章 运行库实现
      • 本章主要实现了一个支持堆、基本文件操作、格式化字符串、基本输入输出、C++ new/delete、C++ string、C++全局构造和析构的Mini CRT。

编译本书的程序

编译本书中所有的示例代码,在Windows平台下可使用Microsoft Visual C++ 2005或2008,操作系统为Windows XP sp3。读者可以去微软的官方网站免费下载Visual C++ 2008 Express版:

http://www.microsoft.com/express/vc/

Linux下使用的GCC 4.1.2,ld版本为2.18,Glibc和ld-linux.so的版本为2.6.1,操作系统为Ubuntu 7.04。