搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
链接器和加载器
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787811245714
  • 作      者:
    (美)John R. Levine著
  • 出 版 社 :
    北京航空航天大学出版社
  • 出版日期:
    2009
收藏
编辑推荐
  不管你的编程语言是什么,不管你的平台是什么,你很可能总是会涉及链接器和加载器的功能。但是你知道如何最大限度地利用它们吗?只有现在,随着《链接器和加载器》的出版,总算有一本深入完整地彻底揭示编译时和运行时过程的权威著作了。
  《链接器和加载器》首先通过实例深入浅出地阐述了在不同的编译器和操作系统中链接和加载过程的差异。在这个基础上,作者提出了清晰实用的忠告,来帮助你创建更快、更清晰的代码。你将会学习如何规避和Windows DLL相关的陷阱,充分利用UNIX ELF库模式等。如果你对程序设计抱有非常认真的态度,那么你可以通过这本书充分地理解这个领域内最难懂的主题之一。《链接器和加载器》对于编译器和操作系统课程同样也是一本理想的补充读物。
  《链接器和加载器》特性
  ◆覆盖了Windows,UNIX,Linux,BeOS和其它操作系统的动态链接过程。
  ◆解释了Java链接模式,以及它是如何应用在网络小应用程序和可扩展Java代码中的。
  ◆帮助你编写更优雅、更高效的代码,以及构建能够被更加高效地编译、加裁和运行的应用程序。
  ◆包含了一个用Perl构建链接器的练习项目,项目文件可以从网络下载得到。
展开
作者简介
  莱文(John R.Levine),是很多书籍的作者或合作者,包括Lex & Yacc(OReilly),Programming for Graphics Files in C and C++(Wiley),以及7-heIntemetforDummies(IDG)。他还是Journal of C Language Translation的荣誉退休发行人、comp.compilers新闻组的长期仲裁人员,以及某个最早的商用Fortran 77编译器的创建者。他在耶鲁大学获得了计算机科学的博士学位。
展开
内容介绍
  《链接器和加载器》讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟的现代链接器所做的一些变化;并介绍一个持续的实践项目,即使用Perl语言开发一个可用的小链接器。
  《链接器和加载器》适合高校计算机相关专业的学生、实习程序员、语言设计者和开发人员阅读参考。
展开
精彩书评
  “我很享受阅读这本对实现链接器和加载器的众多技术和挑战进行有效概述的书。虽然书中的多数例子都集中在今天被广泛使用的三种计算机体系结构上,但这本书也包含了很多描述过去的一些有趣和古怪的计算机体系结构的注解。通过这些真实的战例,我断定作者本人真正经历了这些事情并存活了下来给我们讲述这个故事。”
               ——Guy Steele
展开
精彩书摘
  第1章 链接和加载
  1.1 链接器和加载器做什么?
  任何一个链接器和加载器的基本工作都非常简单:将更抽象的名字与更底层的名字绑定起来,好让程序员使用更抽象的名字编写代码。也就是说,它可以将程序员编写的一个诸如get
  ine的名字绑定到“iosys模块内可执行代码的612字节处”,或者可以采用诸如“这个模块的静态数据开始的第450字节处”这样更抽象的数字地址,并将其绑定到数字地址上。
  1.2 地址绑定:从历史的角度
  链接器和加载器是做什么的?深入理解的方法就是看看它们在计算机编程系统的发展中充当了什么角色。
  最早的计算机完全是用机器语言进行编程的。程序员需要在纸质表格上写下符号化的程序,然后手工将其汇编为机器码,通过开关、纸带或卡片将其输入到计算机中(真正的高手可以在开关上直接编码)。如果程序员使用符号化的地址,那他就得手工完成符号到地址的绑定。如果后来发现需要添加或删除一条指令,那么整个程序都必须手工检查一遍,并将所有被添加或删除指令影响的地址都进行修改。
  这个问题就在于名字和地址绑定得过早了。汇编器通过让程序员使用符号化名字编写程序,然后由程序将名字绑定到机器地址的方法解决了这个问题。如果程序被改变了,那么程序员必须重新汇编它,但是地址分配的工作已经从程序员转给计算机了。
展开
目录
第1章 链接和加载
1.1 链接器和加载器做什么?
1.2 地址绑定:从历史的角度
1.3 链接与加载
1.4 编译器驱动
1.5 链接:一个真实的例子
练习

第2章 体系结构的问题
2.1 应用程序二进制接口
2.2 内存地址
2.3 地址构成
2.4 指令格式
2.5 过程调用和寻址能力
2.6 数据和指令引用
2.7 分页和虚拟内存
2.8 Intel 386分段
2.9 嵌入式体系结构
练习

第3章 目标文件
3.1 目标文件中都有什么?
3.2 空目标文件格式:MS-DOS的COM文件
3.3 代码区段:UNIX的a.out文件
3.4 重定位:MS-DOS的EXE文件
3.5 符号和重定位
3.6 可重定位的a.out格式
3.7 UNIX的ELF格式
3.8 IBM 360目标格式
3.9 微软可移植、可执行体格式
3.10 Intel/Microsoft的OMF文件格式
3.11 不同目标格式的比较
练习
项目

第4章 存储空间分配
4.1 段和地址
4.2 简单的存储布局
4.3 多种段类型
4.4 段与页面的对齐
4.5 公共块和其他特殊段
4.6 链接器控制脚本
4.7 实际中的存储分配
练习
项目

第5章 符号管理
5.1 绑定和名字解析
5.2 符号表格式
5.3 名称修改
5.4 弱外部符号和其他类型符号
5.5 维护调试信息
练习
项目

第6章 库
6.1 库的目的
6.2 库的格式
6.3 建立库文件
6.4 搜索库文件
6.5 性能问题
6.6 弱外部符号
练习
项目

第7章 重定位
7.1 硬件和软件重定位
7.2 链接时重定位和加载时重定位
7.3 符号和段重定位
7.4 基本的重定位技术
7.5 可重链接和重定位的输出格式
7.6 其他重定位格式
7.7 特殊情况的重定位
练习
项目

第8章 加载和覆盖
8.1 基本加载
8.2 带重定位的基本加载
8.3 位置无关代码
8.4 自举加载
8.5 树状结构的覆盖
练习
项目

第9章 共享库
9.1 绑定时间
9.2 实际的共享库
9.3 地址空间管理
9.4 共享库的结构
9.5 创建共享库
9.6 使用共享库链接
9.7 使用共享库运行
9.8 malloc hack和其他共享库问题
练习
项目

第10章 动态链接和加载
10.1 ELF动态链接
10.2 ELF文件内容
10.3 加载一个动态链接程序
10.4 使用PLT的惰性过程链接
10.5 动态链接的其他特性
10.6 运行时的动态链接
10.7 微软动态链接库
10.8 OSF/1伪静态共享库
10.9 让共享库快一些
10.10 几种动态链接方法的比较
练习
项目

第11章 高级技术
11.1 C++的技术
11.2 增量链接和重新链接
11.3 链接时的垃圾收集
11.4 链接时优化
11.5 链接时代码生成
11.6 Java链接模型
练习
项目
参考文献
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证