程序员的自我修养

俞甲子

出版时间

2009-03-31

ISBN

9787121085116

评分

★★★★★

标签

编程

书籍介绍

这本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。

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

AI导读
核心看点
  • 深入剖析编译、链接、装载全过程
  • 详解ELF与PE文件格式及动态链接
  • 提供MiniCRT源码展示运行库原理
适合谁读
  • 计算机专业高年级学生及研究生
  • 希望深入理解底层机制的开发者
  • 对系统软件实现感兴趣的工程师
读前提醒
  • 建议结合CSAPP对比阅读以互补
  • 部分汇编细节可能过时,需留意
  • 当作工具书查阅比通读更高效
读者共识
  • 填补国内系统底层知识书籍空白
  • 行文思路清晰,适合初学者入门
  • 虽有小瑕疵,但仍是经典必读之作

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "可以使用volatile关键字来试图阻止过度优化,volatile基本可以做到两件事情: 1、阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回。 2、阻止编译器调整操作volatile变量的指令顺序。"
  • "实际上在动态链接器的自举代码中,除了不可以使用全局变量和静态变量之外,甚至不能调用函数,即动态链接器本身的函数也不能调用。这是为什么呢?其实我们在前面分析地址无关代码时已经提到过,实际上使用PIC模式编译的共享对象,对于模块内部的函数调用也是采用外部函数调用一样的方式,即使用GOT/PLT的方式,所以在GOT/PLT没有被重定位之前,自举代码不可以使用任何全局变量,也不可以调用函数。"
  • "这样看起来第一个模块内部调用或跳转很容易解决,但实际上这种方式还有一定的问题,这里存在一个名作共享对象“全局符号介入”问题。"
  • "所以对于bar()函数的调用,编译器只能选择第三种,即当作模块的外部符号处理。 ... 即使用static关键字定义bar函数,这种情况下,编译器要确定bar()函数不会其他模块覆盖,就可以使用第一类的方法,即模块内部调用指令。"
  • "由于可能存在的全局符号介入的问题,foo函数对于bar的调用不能够采用第一类模块调用的方法,因为一旦bar函数由于全局符号介入被其他模块中的同名函数覆盖,那么foo如果采用相对地址调用的话,那么这个相对地址就需要重定位,这由于共享对象的地址无关性矛盾。所以对于bar()函数的调用,编译器只能选择第三种,即当作模块外部符号处理。"
  • "程序源代码被编译以后主要分成两种段:程序指令和程序数据。代码段属于程序指令,而数据段和.bss段属于程序数据。"
  • "1:当程序被装载后,数据和指令分别被映射到两个虚存区域。由于数据区域对于进程来说是可读写的,而指令区域对于进程来说是只读的,所以这两个虚存区域的权限可以被分别设置成可读写和只读。这样可以防止程序的指令被有意或无意地改写。 2:对于现代的CPU来说,它们有着极为强大的缓存体系。由于缓存在现代的计算机中地位非常重要,所以程序必须尽量提高缓存的命中率。指令区和数据区的分离有利于提高程序的局部性。现代CPU的缓存一般都被设计成数据缓存和指令缓存分离,所以程序的指令和数据被分开存放对CPU的缓存命中率提高有好处。 3:最重要的原因。 当系统中运行着多个该程序的副本时,它们的指令都是一样的,内存中只需保存"
  • "其中: 第一列是VMA的地址范围 第二列是VMA的权限,r代表可读,w代表可写,x代表可执行,p代表私有,s代表共享 第三列是偏移,表示VMA对应的Segment在映像文件中的偏移 第四列是映像文件所在设备的主设备号和次设备号 第五列是映像文件的节点号 最后一列是映像文件的路径"
目录
第1部分 简介
第1章 温故而知新
1.1 从HELLO WORLD 说起
1.2 万变不离其宗
1.3 站得高,望得远

显示全部
用户评论
: TP31/8261
浑沦吞枣似地扫了一遍,,,讲解的很好,如果想要理解计算机的底层链接装载包括main之前系统干了些什么事儿,这本书真的很不错。
书名太233
好书
就国内出版的书而言中上吧,如果有系统编程相关经验的话内容其实也只能算是扫盲级别的。书中错误其实还是蛮多的,严重的原则性错误大概有那么一两处,不碍事的小瑕疵基本散布在各个章节(后面重复出现EBP加加减减傻傻分不清楚我都快orz了...),还好基本不妨碍阅读所以也懒得写到笔记上,自己看的时候注意下就好了....
借地标拥有福气《驱魔人的自我修养》。高开低走,开头几个副本巴士、女巫写得不错,游刃有余,灵异老题材也整了点新意出来,但我不喜欢把叙述视角转到配角上去。可惜干完女巫以后就开始没有骨架了,副本没有精干,像是没有大纲权靠脑子里的拼图凑剧情凑出来的,有点可惜。
书写得很不错!通俗易懂,满足了我的好奇心!
快速阅读,理解结构框架,类似龙书
把计算机的很多原理解释的非常清楚,强烈推荐
这本书读的还是挺有收获的 作者很用心 (若干年前读的 竟然没标记
下载
收藏