没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Whatever your programming language, whatever your platform, you probably tap into linker and loader functions all the time. But do you know how to use them to their greatest possible advantage? Only now, with the publication of Linkers & Loaders, is there an authoritative book devoted entirely to these deep-seated compile-time and run-time processes.
资源推荐
资源详情
资源评论
中国 Linux 论坛 www.linuxforum.net [Linkers & Loaders 翻译计划]
- 1 -
Linkers & Loaders
翻译校对版 Beta1
中国 Linux 论坛 www.linuxforum.net [Linkers & Loaders 翻译计划]
- 2 -
第 0 章 引子 - 5 -
献给......................................................................................................................................- 5 -
介绍......................................................................................................................................- 5 -
本书的目标读者是哪些人?..............................................................................................- 5 -
章节摘要..............................................................................................................................- 6 -
工程项目..............................................................................................................................- 7 -
致谢......................................................................................................................................- 7 -
联系我们..............................................................................................................................- 8 -
第 1 章 链接和加载.................................................................................................................... - 9 -
连接器和载入器是做什么的呢?........................................................................................- 9 -
地址绑定:从一个历史的角度..........................................................................................- 9 -
连接和载入........................................................................................................................ - 11 -
编译器驱动........................................................................................................................- 15 -
连接:一个真实的例子....................................................................................................- 16 -
练习....................................................................................................................................- 19 -
第 2 章 体系结构的问题.......................................................................................................... - 20 -
应用二进制界面................................................................................................................- 20 -
内存地址............................................................................................................................- 20 -
地址信息............................................................................................................................- 22 -
指令格式............................................................................................................................- 22 -
过程调用和可寻址性........................................................................................................- 23 -
数据和指令引用................................................................................................................- 25 -
SPARC ...............................................................................................................................- 27 -
分页和虚拟内存................................................................................................................- 30 -
Intel 386 分段 ....................................................................................................................- 35 -
嵌入式体系机构................................................................................................................- 36 -
练习....................................................................................................................................- 37 -
第 3 章 目标文件...................................................................................................................... - 39 -
目标文件中都有什么?......................................................................................................- 39 -
空目标格式: MS-DOS .COM 文件 ..................................................................................- 40 -
代码区: Unix a.out 文件....................................................................................................- 40 -
重载:MS-DOS EXE 文件............................................................................................... - 46 -
符号和重载........................................................................................................................- 47 -
可重载 a.out.......................................................................................................................- 47 -
IBM 360 目标格式
............................................................................................................- 58 -
微软可移植执行体格式.................................................................................................... - 61 -
Intel/Microsoft 的 OMF 文件格式....................................................................................- 67 -
不同目标格式的比较........................................................................................................- 71 -
项目....................................................................................................................................- 71 -
练习....................................................................................................................................- 72 -
第 4 章 存储空间分配.............................................................................................................. - 73 -
段和地址............................................................................................................................- 73 -
简单存储布置.................................................................................................................... - 73 -
多种段类型........................................................................................................................- 74 -
中国 Linux 论坛 www.linuxforum.net [Linkers & Loaders 翻译计划]
- 3 -
段和页面对齐.................................................................................................................... - 76 -
公共块和其他特殊的段.................................................................................................... - 76 -
连接器控制脚本................................................................................................................- 83 -
嵌入式系统存储分配........................................................................................................- 84 -
实际的存储分配................................................................................................................- 85 -
练习....................................................................................................................................- 89 -
项目....................................................................................................................................- 90 -
第 5 章 符号管理...................................................................................................................... - 91 -
绑定和符号解析................................................................................................................- 91 -
符号表格式........................................................................................................................- 91 -
名字调整(搅拌).................................................................................................................- 97 -
弱外部和其他种类的符号..............................................................................................- 100 -
维护调试信息.................................................................................................................. - 100 -
练习..................................................................................................................................- 102 -
项目..................................................................................................................................- 102 -
第 6 章 链接库 ....................................................................................................................... - 104 -
连接库的目的.................................................................................................................. - 104 -
库文件格式...................................................................................................................... - 104 -
建立库文件...................................................................................................................... - 108 -
搜索库文件...................................................................................................................... - 109 -
性能问题.......................................................................................................................... - 110 -
弱(隐式)外部符号(Weak external symbols)................................................................... - 110 -
练习.................................................................................................................................. - 111 -
项目.................................................................................................................................. - 112 -
第 7 章 重定位 ....................................................................................................................... - 114 -
硬件和软件重定位.......................................................................................................... - 114 -
链接时重定位和加载时重定位...................................................................................... - 115 -
符号和段重定位.............................................................................................................. - 115 -
基本的重定位技术.......................................................................................................... - 116 -
可重链接和重定位的输出格式......................................................................................- 120 -
其它重定位格式..............................................................................................................- 121 -
特殊情况的重定位..........................................................................................................- 122 -
练习..................................................................................................................................- 123 -
项目..................................................................................................................................- 123 -
第 8 章 加载和重叠................................................................................................................ - 125 -
基本加载..........................................................................................................................- 125 -
带重定位的基本加载...................................................................................................... - 126 -
位置无关代码.................................................................................................................. - 126 -
自举加载..........................................................................................................................- 133 -
树状结构的覆盖..............................................................................................................- 133 -
练习..................................................................................................................................- 139 -
项目..................................................................................................................................- 139 -
第 9 章 共享库 ....................................................................................................................... - 141 -
绑定时间(Binding time).............................................................................................- 142 -
中国 Linux 论坛 www.linuxforum.net [Linkers & Loaders 翻译计划]
- 4 -
共享库的结构.................................................................................................................. - 144 -
创建共享库...................................................................................................................... - 144 -
使用共享库链接..............................................................................................................- 147 -
使用共享库运行..............................................................................................................- 147 -
malloc hack 和其它共享库问题 .....................................................................................- 148 -
练习..................................................................................................................................- 150 -
项目..................................................................................................................................- 151 -
第 10 章 动态连接和装载...................................................................................................... - 152 -
ELF 动态连接 .................................................................................................................- 152 -
ELF 文件内容 .................................................................................................................- 152 -
装载一个动态连接程序.................................................................................................. - 155 -
运行时的动态连接..........................................................................................................- 160 -
Microsoft 动态连接库.....................................................................................................- 160 -
OSF/1 准共享库 .............................................................................................................. - 164 -
让共享库加速.................................................................................................................. - 165 -
几种动态连接方法的比较..............................................................................................- 166 -
练习..................................................................................................................................- 166 -
工程..................................................................................................................................- 167 -
第 11 章 高级技术.................................................................................................................. - 168 -
C++的技术 ...................................................................................................................... - 168 -
增量链接和重新连接...................................................................................................... - 172 -
链接时的垃圾收集..........................................................................................................- 173 -
链接时优化...................................................................................................................... - 174 -
链接时代码生成..............................................................................................................- 175 -
Java 链接模式 .................................................................................................................- 177 -
练习..................................................................................................................................- 179 -
项目..................................................................................................................................- 179 -
中国 Linux 论坛 www.linuxforum.net [Linkers & Loaders 翻译计划]
- 5 -
第 0 章 引子
$Revision: 2.2 $
$Date: 1999/06/09 00:48:48 $
献给
我的家人, 托妮亚和莎拉。
介绍
只要有计算机,就会有连接器和加载器, 因为它们是非常重要的工具. 它
们不但可以处理单一源文件,更可以处理多个输入模块, 从而产生目标代码.
早在 1947 年,程序员就开始使用加载器处理存放在分离磁带上上的代码,
并且最终把它们整合,重定位在一个目标文件里. 到了上世纪 60 年代早期,这
些加载器就发展的比较完善了. 因为那时内存仍旧很贵、很有限并且计算机的速
度也比较慢(以现代计算机的速度比较), 连接器为了让大程序加载到较小的内
存空间中,就建立了复杂的内存布局,为了让以前编译过的文件节省重构时间,
它也做了一些优化.
上世纪 70 到 80 年代,连接技术几乎没有什么大的改进. 连接器趋向于变
得更加简单, 虚拟存储技术的出现,把很多存储管理方面的工作从应用程序层
面移到了操作系统里面, 随着计算机速度越来越快, 磁盘容量越来越大,通过
替换少量模块的方式重新建立被链接程序要比仅仅链接程序中被修改的部分更
加容易(译者注: 重新建立这里提到了两种方式:1,仅仅将修改过的部分编译
后重新连接到程序中;2,将需要替换的模块重新编译后替换原先的模块。就这
两种方法而言,后者更加容易一些)。到了 90 年代,连接器又变得复杂起来,
增加了一些对当时流行特性的支持,如动态连接、共享库以及 C++. 一些拥有扩
展指令字长和编译器显式调度(译者注: 在 IA64 中确实存在此类方法,即在编
写程序时向编译器显式的指定某些调度策略,从而优化程序运行,例如可以在程
序中调用编译器的功能指定更高层次的流水线,我想这里可能就指的此类意思。)
内存访问方式特性的新处理器架构,诸如 IA-64, 将对连接器提出新需求,以
确保目标文件中出现所需的代码.
本书的目标读者是哪些人?
本书预计供下述几种读者使用。
z 学生:正在学习编译器构造课程,而且粗略地学习过操作系统但缺乏对
连接和装载过程的认识,往往认为连接过程琐碎或是浅显。虽然说过去
Fortran,Pascal, 和 C 语言吃香的时候,操作系统并不使用内存交
剩余178页未读,继续阅读
资源评论
Mr.小萝卜
- 粉丝: 24
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功