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

下载地址:网盘下载

内容简介

编辑

《程序员的自我修养:链接、装载与库》对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。

媒体评论

编辑

这是一本深人阐述链接、装载和库等问题的优秀图书,读来让人愉悦,你从巾可以清晰地了解程序的前世今生,彻底理解敲人的代码如何变成程序任系统中运行。通读本书不管对于开发还是trouble shootin9都会很有帮助。建议每一位希望从事系统开发、或希望更实务地理解操作系统和编译器、或不满足于只写代码的优秀程序员都拥有这样一本书。

——邹飞,趋势科技(中国)研发中心资深软件要程师

本书从大处着眼,小处着手,以通俗易懂的语言,深入浅出地对系统软件的底层形成机制进行条分缕析,正合药山禅师所谓“高高山顶立,深深海底行”。循着作者的思绪一路走来,有如醍醐灌顶。畅快淋漓。非常高兴有预览此书初稿的宝贵机会,我在浏览书稿和查核相关资料的过程中,学到了很多以前未知或知之不深的内容。

——冯亮,阿里巴巴(中国)网络技术有限公司运维部系统架构师

目录

编辑

第1部分 简介

第1章 温故而知新

1.1 从HELLO WORLD 说起

1.2 万变不离其宗

1.3 站得高,望得远

1.4 操作系统做什么

1.5 内存不够怎么办

1.6 众人拾柴火焰高

1.7 本章小结

第2部分 静态链接

第2章 编译和链接

2.1 被隐藏了的过程

2.2 编译器做了什么

2.3 链接器年龄比编译器长

2.4 模块拼装——静态链接

2.5 本章小结

第3章 目标文件里有什么

3.1 目标文件的格式

3.2 目标文件是什么样的

3.3 挖掘SIMPLESECTION.O

3.4 ELF 文件结构描述

3.5 链接的接口——符号

3.6 调试信息

3.7 本章小结

第4章 静态链接

4.1 空间与地址分配

4.2 符号解析与重定位

4.3 COMMON 块

4.4 C++相关问题

4.5 静态库链接

4.6 链接过程控制

4.7 BFD 库

4.8 本章小结

第5章 WINDOWS PE/COFF

5.1 WINDOWS 的二进制文件格式PE/COFF 134

5.2 PE 的前身——COFF

5.3 链接指示信息

5.4 调试信息

5.5 大家都有符号表

5.6 WINDOWS 下的ELF——PE

5.7 本章小结

第3部分 装载与动态链接

第6章 可执行文件的装载与进程

6.1 进程虚拟地址空间

6.2 装载的方式

6.3 从操作系统角度看可执行文件的装载

6.4 进程虚存空间分布

6.5 LINUX 内核装载ELF 过程简介

6.6 WINDOWS PE 的装载

6.7 本章小结

第7章 动态链接

7.1 为什么要动态链接

7.2 简单的动态链接例子

7.3 地址无关代码

7.4 延迟绑定(PLT)

7.5 动态链接相关结构

7.6 动态链接的步骤和实现

7.7 显式运行时链接

7.8 本章小结

第8章 LINUX 共享库的组织

8.1 共享库版本

8.2 符号版本

8.3 共享库系统路径

8.4 共享库查找过程

8.5 环境变量

8.6 共享库的创建和安装

8.7 本章小结

第9章 WINDOWS 下的动态链接

9.1 DLL 简介

9.2 符号导出导入表

9.3 DLL 优化

9.4 C++与动态链接

9.5 DLL HELL

9.6 本章小结

第4部分 库与运行库

第10章 内存

10.1 程序的内存布局

10.2 栈与调用惯例

10.3 堆与内存管理

10.4 本章小结

第11章 运行库

11.1 入口函数和程序初始化

11.2 C/C++运行库

11.3 运行库与多线程

11.4 C++全局构造与析构

11.5 FREAD 实现

11.6 本章小结

第12章 系统调用与API

12.1 系统调用介绍

12.2 系统调用原理

12.3 WINDOWS API

12.4 本章小结

第13章 运行库实现

13.1 C 语言运行库

13.2 如何使用MINI CRT

13.3 C++运行库实现

13.4 如何使用MINI CRT++

13.5 本章小结

附录A

A.1 字节序(BYTE ORDER)

A.2 ELF 常见段

A.3 常用开发工具命令行参考

索引

下载地址:网盘下载

原文地址:https://www.cnblogs.com/longgg/p/8424167.html

时间: 2024-11-08 19:35:34

程序员的自我修养—链接、装载与库pdf的相关文章

程序员的自我修养-链接、装载与库-7 动态链接

动态链接 静态链接的好处:使得不同部门的开发者能够相对独立的开发和测试自己的程序模块,促进了开发效率,原先限制程序的规模也随之扩大. 缺点:浪费内存空间和磁盘空间,模块更新困难 种种罪行: 空间浪费:想想一下每个程序内部除了printf, scanf, strlen等公用库函数,还有非常多的其他库函数以及他们所需的辅助数据结构.在Linux中一个普通的c程序需要的静态库至少1MB以上. 简而言之就是,相同的目标模块每一个程序都会保留一份obj文件. 更新困难:一旦程序中有任何模块更新,整个程序都

《程序员的自我修养——链接、装载与库》——装载

导读 可执行文件只有装载到内存以后才能被CPU执行.早期装载的基本过程就是把程序从外部存储器中读取到内存中的某个位置,随着硬件MMU的诞生,多进程.多用户.虚拟存储的操作系统出现以后,可执行文件的装载过程变得非常复杂.现在我们通过ELF文件在linux下的装载过程,来层层拨开迷雾,看看可执行文件装载的本质到底是什么? 目录 进程的虚拟地址空间 装载方式 进程虚拟地址空间的分布 Linux内核装载ELF过程简介 正文 1.进程的虚拟地址空间 我们知道每个程序被运行起来以后,它将拥有自己独立的虚拟地

《程序员的自我修养——链接、装载与库》——链接

导读 对于平常的应用程序开发,我们很少需要关注编译和链接过程,因为通常的开发环境都是流行的集成开发环境(IDE),比如Visual Studio.Myeclipse等.这样的IDE一般都将编译和链接的过程一步完成,通常将这种编译和链接合并在一起的过程称为构建,即使使用命令行来编译一个源代码文件,简单的一句”gcc hello.c”命令就包含了非常复杂的过程.然而,正是因为集成开发环境的强大,很多系统软件的运行机制与机理被掩盖,其程序的很多莫名其妙的错误让我们无所适从,面对程序运行时种种性能瓶颈我

程序员的自我修养-链接、装载与库-6 可执行文件的装载与进程

可执行文件的装载与进程 可执行文件只有装载到内存后才能被CPU执行.基本过程就是把程序从外部存储器中读取到内存中的某个位置. 程序(可执行文件)是一个静态的概念.就是一些预编译好的指令和数据组成的一个文件.进程则是一个动态的概念.很多时候,把动态库叫作运行时. 每个程序在执行时,都拥有自己独立的 虚拟地址空间. 虽然,内存中的虚拟地址空间很大,但是任意一个程序都必须在OS的监督下使用资源,不能任意访问或者占用内存.大多数时候我们在Windows下碰到的"进程因非法操作需要关闭" 和 L

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

第二部分 静态链接 被隐藏了的过程:预处理.编译.汇编.链接(Build过程 在IDE中) 预编译: 源代码hello.cpp和相关头文件(stdio.h)被预编译器cppp预编译成一个.i文件. 预编译命令: gcc -E hello.c -o hello.i 或者 cpp hello.c > hello.i 过程:预编译主要处理那些源代码中的以'#'开始的预编译指令.比如"#include" "#define"等. 包括: 展开宏定义: 处理所有条件预编译

读《程序员的自我修养 —— 装载与动态链接》乱摘

2016.05.14 – <程序员的自我修养 -- 链接.装载与库>的装载与动态链接部分. - 余甲子 石凡 潘爱民编 个人选读笔记 - 学点表皮. 05.14 PART II 装载与动态链接 1 可执行文件的装载与进程 1.1 进程虚拟地址空间的大小 每个进程拥有自己独立的虚拟地址空间,该虚拟地址空间的大小由计算机的硬件平台决定,具体地说是由CPU的位数决定的(地址线 -- C语言中的指针所占空间).硬件决定了地址空间的最大理论上限,即硬件的寻址空间大小,如32位的硬件平台决定了虚拟地址空间

《程序员的自我修养》 第二章——编译和链接

摘自http://blog.chinaunix.net/uid-26548237-id-3839979.html <程序员的自我修养>第二章——编译和链接 2.1 被隐藏了的过程    C语句的经典,“Hello World”程序几乎是每个程序员闭着眼睛都能写出的,编译运行一气呵成,基本成了程序入门和开发环境测试的默认标准. #include <stdio.h> int main() { printf("Hello World\n"); return 0; 在L

程序员的自我修养:(1)目标文件

程序员的自我修养:(1)目标文件 1.目标文件 1.1 编译与链接 在使用像Visual Studio或Qt Creator等IDE时,通常有一个叫做"构建"的按钮.当编辑完成要运行和测试时点一下它,程序就能跑起来了,所以我们很少关心编译和链接.其实,编译和链接合并在一起就称为 构建(Build).简单的一次按键,实际背后却是异常复杂的过程: 预编译(Preprocessing) 编译(Compilation) 扫描:算法类似有限状态机(FSM),将字符转换成Token. 语法分析:分

读《程序员的自我修养》感受

这书不错,链接-装载-库 我觉得是很底层的东西.比如很多人闭着眼睛都能写出来的hello world(当然不包括brianfuck,如果你会,你真的闹残了吗= =), 其实链接编译器做了很多,不然就哪来的printf,这IO初始化也是CRT(c runtime)库完成的.堆栈的初始化,还有系统装载让程序运行等等.涉及很多. 书里后面就讲了一个CRT库,自己写一个,感觉不错,学了很多.比如malloc,free的实现,话说还是跨平台的.当然库很小,功能不多,不过写这个也可以学学算法.内存的分配,这