具体描述
这本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。
对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。
作者简介
目录信息
第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 常用开发工具命令行参考
索引
· · · · · · (收起)
读后感
书里面写了不少比较底层的知识,而且介绍的还比较具体。另外还有一个简单的运行时库的实现。 适合常翻常看。难得的不错的国内的计算机书。
感谢周老师的抬爱,前天收到了博文给我寄的《程序员的自我修养》这本书,利用业余时间大概翻了翻,但没有深入阅读,只因刚开始还以为是讲编程习惯之类的概念性书籍,然而一读之下才发现原来是讲C++底层编程相关技术的书,而我对C++一无所知,尽管有C的经验,却也压根就无法写出...
我是经过了好几次的犹豫才买下这本书的。 第一次看到这本书,链接、装载与库这个主题让我很感兴趣,但一时拿不出钱。想想都是系统底层的东西,就算没看这本书,也不会影响到以后工作,就没买。 第二次又看到有人推荐它,心就又痒痒了,因为经济的原因,还是没买。 第三次想到这...
深入讲解程序的链接、装载、运行 最后的miniCRT代码好像有两个小bug,但基本不影响程序运行 P419 第14行(不算空行)后好像应该return的 P419 第20行(不算空行)后好像应该检查并设置next->next->priv 关于crtbegin和crtend的链接顺序,在gcc 4.3.2(ubuntu8.10)环境下,ld会自动...
用户评价
说实话,我买这本书很大程度上是因为我正在经历一个职业瓶颈期,感觉自己的技术视野似乎被困在了日常的CRUD操作和Bug修复中,难以突破。我急切地需要一些能够“拔高”我思考层面的内容。我期望它能提供一些关于软件架构哲学层面的见解,比如为什么选择某种设计模式,而不是另一种,背后的权衡是什么?更重要的是,我希望作者能分享一些关于如何培养“工程师的直觉”的经验——那种不需要每次都查文档,就能大致判断出某个方案可行性的能力。这种直觉的养成,在我看来,就是“自我修养”中不可或缺的一部分。如果这本书能提供一些清晰的框架或方法论,帮助我系统地从一个“执行者”转变为一个“思考者”,那它就绝对物超所值了。
最近阅读体验让我有些疲惫,充斥着各种浮夸的标题和空洞的口号。因此,我对这本书抱有一种审慎的期待——我更看重扎实的论据和基于实践的深刻反思,而非华丽的辞藻堆砌。我希望作者能够坦诚地谈论作为一名资深开发者所必然会遇到的心路历程:挫败感、倦怠期、技术选型带来的巨大压力,以及如何从失败中汲取教训。一个真正的“修养”,必然包含对自身局限性的认识和持续改进的勇气。我尤其好奇,在作者看来,代码之外,例如在职业道德、知识分享和指导后辈方面,一个成熟的程序员应该展现出怎样的风范?这种非技术层面的“修养”,对于构建一个健康的职业生态至关重要。
这本书的封面设计简洁而有力,给我一种沉稳、内敛的感觉,这正是我在寻找的特质。我最近一直在思考,如何在日常的编码任务之外,为自己的技术栈增加一些“护城河”。市面上充斥着太多关于“如何快速学会XX框架”的速成指南,但真正有价值的往往是那些探讨底层原理和思想深度的书籍。我希望这本书能够深入剖析优秀程序员的思维模型,比如他们是如何分解一个庞大且模糊的需求,如何预见潜在的技术债务,以及他们是如何在重构时保持冷静和条理的。我关注的重点在于“修养”二字所蕴含的长期价值——它是不是关于如何培养对技术的热情而不被短视的商业目标所裹挟?是不是关于如何在快节奏的开发周期中,依然坚持高质量的工程实践?我渴望看到的是一套成熟的、经得起时间考验的理念,而非昙花一现的技术热点解读。
这本书的书名确实吸引人,它让我对一个技术人员如何塑造自己的职业生涯和内在品质充满了好奇。我拿起它的时候,满脑子想的都是那些在代码和咖啡中度过的深夜,那些面对复杂算法时的百思不得其解,以及最终茅塞顿开的喜悦。我期待着能在字里行间找到一些关于如何在高压环境下保持专注、如何系统性地提升自己的硬技能,同时又不至于在技术迭代的洪流中迷失方向的智慧。我希望它能提供一些超越具体编程语言的通用原则,比如如何构建一个可持续的学习路径,如何与团队成员进行高效的沟通,以及如何在技术深度和业务广度之间找到一个健康的平衡点。毕竟,编程不仅仅是写出能运行的代码,更是一种解决问题的思维方式,而“自我修养”这个词汇,暗示着作者对这种思维深度的追求和对个人成长的重视。我特别想知道,作者是如何定义一个“有修养”的程序员的,是代码的优雅性,还是解决问题的全面性?
这本书的厚度和内容密度,从目录上看就透露出一种不容小觑的份量感。它没有试图用短小的章节来迎合碎片化阅读的习惯,这让我感到欣慰。我正在寻找的,是一种能让我静下心来,进行深度思考和自我反思的伴侣。我希望书中能有关于如何平衡“快速交付”与“代码完美”之间的永恒矛盾的论述。在快速迭代的市场需求下,如何坚守自己的工程底线,同时又不至于成为团队的瓶颈,这是一个实战中的难题。我更倾向于那些探讨软件生命周期中,个人角色如何随着时间演变的深刻洞察,而不是那些只聚焦于入门知识的浅尝辄止。这本书,在我看来,应该是一本可以常读常新的“内功心法”,而不是一本用完即弃的“工具手册”。
其实 我是一名⋯⋯⋯⋯⋯⋯⋯⋯ 程序员。
代码是编译之后是如何链接,装载以及运行的,程序员的高级读本
就国内出版的书而言中上吧,如果有系统编程相关经验的话内容其实也只能算是扫盲级别的。书中错误其实还是蛮多的,严重的原则性错误大概有那么一两处,不碍事的小瑕疵基本散布在各个章节(后面重复出现EBP加加减减傻傻分不清楚我都快orz了...),还好基本不妨碍阅读所以也懒得写到笔记上,自己看的时候注意下就好了....
好书
好书