1

程序员的自我修养

 1 year ago
source link: https://book.douban.com/subject/3652388/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

内容简介  · · · · · ·

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

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

目录  · · · · · ·

第1部分 简介
第1章 温故而知新
1.1 从HELLO WORLD 说起
1.2 万变不离其宗
1.3 站得高,望得远
1.4 操作系统做什么
· · · · · · (更多)

原文摘录   · · · · · ·  ( 全部 )

  • 可以使用volatile关键字来试图阻止过度优化,volatile基本可以做到两件事情: 1、阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回。 2、阻止编译器调整操作volatile变量的指令顺序。 (查看原文)

    ziyoudefeng 2 回复 2赞 2012-12-22 14:21:19

    —— 引自第29页

  • 实际上在动态链接器的自举代码中,除了不可以使用全局变量和静态变量之外,甚至不能调用函数,即动态链接器本身的函数也不能调用。这是为什么呢?其实我们在前面分析地址无关代码时已经提到过,实际上使用PIC模式编译的共享对象,对于模块内部的函数调用也是采用外部函数调用一样的方式,即使用GOT/PLT的方式,所以在GOT/PLT没有被重定位之前,自举代码不可以使用任何全局变量,也不可以调用函数。 (查看原文)

    prife 6 回复 2赞 2013-02-05 00:26:53

    —— 引自第214页

> 全部原文摘录

喜欢读"程序员的自我修养"的人也喜欢的电子书  · · · · · ·

支持 Web、iPhone、iPad、Android 阅读器
  • 31 有用 御宅暴君 2015-10-22 21:43:42

    CSAPP 后就该读一读!终于搞懂了困扰我好多年的、该死的 C/C++ 编译模型

  • 2 有用 飘飘白云 2009-10-30 13:49:06

    代码在编译之后是如何链接、装载以及运行的,程序员的高级读本

  • 1 有用 mapix 2011-10-29 13:24:15

    学os的时候顺便买了本, 非常好的书, 讲的很到位,没有累赘

  • 17 有用 邻家の躺平人 2015-04-11 19:46:34

    就国内出版的书而言中上吧,如果有系统编程相关经验的话内容其实也只能算是扫盲级别的。书中错误其实还是蛮多的,严重的原则性错误大概有那么一两处,不碍事的小瑕疵基本散布在各个章节(后面重复出现EBP加加减减傻傻分不清楚我都快orz了...),还好基本不妨碍阅读所以也懒得写到笔记上,自己看的时候注意下就好了....

> 更多短评 804 条

我要写书评

程序员的自我修养的书评 · · · · · · ( 全部 82 条 )

Stanley

2009-06-27 11:16:53

平中见奇:程序员提升自己的参考方法

老实说,在2002年还在上大学的时候,我把技术类书籍分成了三六九等,从值得看到最不值得看到顺序如下: 1. 在美国工作的中国人使用中文编写的书籍:因为作者的眼界相比国内更加宽广,而字里行间流淌着中国人的思维方式,没有理解文化表达方面的障碍,行文相对活泼 2. 在美国工...

 (展开)

你们都是坏人

2009-11-28 11:21:46

给每个新手的修养之道

如果你是高手,Linux Hacker或者geek,请绕行 但如果你是新手 如果你曾好奇过windows系统目录下和软件目录下大堆大堆的dll文件是什么 如果你曾疑惑过我写下的代码经历的怎样的历程最后怎样到达了内存,编译器每天用,它到底做了什么 如果你已经学习或接触了C,汇编,计算机结构...

 (展开)

zoufeiyy

2009-05-20 14:10:40

推荐linux c/c++程序员一读

关于《程序员的自我修养》这本书,最初是在和博文的周筠老师MSN上谈起,当时听周老师提及这本书是一本关于链接和装载等系统软件知识的书籍,当时就很感兴趣,因为这方面的书在国内真的见得很少,一方面这种书似乎跟做应用开发的有距离,毕竟如果只是用用C#、Java,似乎没什么必...

 (展开)

云风

2009-06-01 21:10:00

莫等用时再读书

今年二月份拿到这本书的电子稿时,还不是现在这个名字。 《程序员的自我修养》这个名字听起来比原来的那个名字感觉好一些,但又让人感觉有点不知所谓。还是副标题直接:《链接、装载与库》。我更愿意接受这样的一个名字,有如那本多年前读过的英文经典:《Linkers & Loaders》...

 (展开)

veryzhang

2009-11-17 19:19:18

something after read

今天花了一天的时间从头到尾翻了一遍, 跳过了那些有X86汇编的部分, 和分析C++ CRT中解构析构的部分, 其他的都读了一遍. 读完之后唯一的感觉就是: 此书非读不可, 而且要经常读. 毫无疑问作者对于链接, 装载和库这三个方面是有深刻的认识的, 于深度和广度都无可挑剔, 而且组织...

 (展开)

冷月X

2010-05-20 13:23:16

非常值得一读的书

刚开始听到这本书这个题目的时候想起来周星驰电影里的《演员的自我修养》,接着看了一下关于这本书的介绍,才知道原来是写关于链接,装载与库的,于是我就买了一本来看看。没有想到的是这本书的行文思路特别好,解决了很多以前不明白的问题。更让我高兴的是这本书中所讲的内部...

 (展开)

不正直的绅士

2010-03-08 17:36:30

脚踏实地

我是经过了好几次的犹豫才买下这本书的。 第一次看到这本书,链接、装载与库这个主题让我很感兴趣,但一时拿不出钱。想想都是系统底层的东西,就算没看这本书,也不会影响到以后工作,就没买。 第二次又看到有人推荐它,心就又痒痒了,因为经济的原因,还是没买。 第三次想到这...

 (展开)

iWangLian

2010-03-08 12:46:25

没有参考文献

这本书出自两个非常年经的小伙子之手。其功力和对系统底层的理解让我吃惊。但这些知识不可能是凭空悟出来的,也不能全靠实验和源代码得来。 毫无疑问,它参考了不少书。作者在序中关于是用“编著”还是“著“挣扎了好久。但是文后没有参考文献。 其实我在看书的时候,有时候...

 (展开)

lianhui

2009-09-13 16:10:17

让我进一步深入了解语言内部更深层的运行机制

这篇书评可能有关键情节透露

周四拿到的书,周五开始看了,看了二天左右,当然周六下午还休息了,大概看了一遍,讲得比较详细,以前知道一些的,看了书后,可以更加坚定,很多东西以前都不能很确定是如何进行的。 其实感觉书还是有点厚,有些地方比较罗嗦,不知道是自已水平的原因,还是其他原因,不过总体...

 (展开)

Wzh

2010-02-10 02:16:45

读《链接、装载与库》

拿到这本书后,断断续续地花了一个半月才读完,虽然这本书没有让我一口气读完的欲望,但还是在很大程度上让基础薄弱的我了解了不少想了解的东西。可能是有两个作者的缘故,感觉这本书前后的风格不太一致,前半部分侧重于陈述概念,后半部分则喜欢在剖析代码中陈述内容,所以阅...

 (展开)

> 更多书评 82篇

读书笔记  · · · · · ·  ( 共 311 篇 )

我来写笔记

  • ziyoudefeng (娜娜,有你生活真幸福~~)

    本篇笔记全文摘自后面参考文献列出的地址,不过原文中有一些错别字,我这里把错别字改了改,然后也是按照自己机器上代码的结果来进行演示。再结合本书前面第6章“6.5 Linux内核装载ELF过程简介”来进行说明。 1、开始 The question is simple: how does linux execute my main()? Through this document, I'll use the following simple C program to illustrate how it works. It's called "execute_main.c" int main() { retu...

    2012-12-19 20:41:44   2人喜欢

  • 龙三 (の日常)

    2022-02-05 14:03:58   2人喜欢

  • prife (相濡以沫,不如相忘于江湖)

    实际上在动态链接器的自举代码中,除了不可以使用全局变量和静态变量之外,甚至不能调用函数,即动态链接器本身的函数也不能调用。这是为什么呢?其实我们在前面分析地址无关代码时已经提到过,实际上使用PIC模式编译的共享对象,对于模块内部的函数调用也是采用外部函数调用一样的方式,即使用GOT/PLT的方式,所以在GOT/PLT没有被重定位之前,自举代码不可以使用任何全局变量,也不可以调用函数。 笔者的疑问主要集中在,为什...   (6回应)

    2013-02-05 00:26:53   2人喜欢

  • ziyoudefeng (娜娜,有你生活真幸福~~)

    过度优化的问题自然很多,这里不再描述。只说解决方法: 可以使用volatile关键字来试图阻止过度优化,volatile基本可以做到两件事情: 1、阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回。 2、阻止编译器调整操作volatile变量的指令顺序。 但即使这样,还是有问题。 因为即使volatile能够阻止编译器调整指令顺序,也无法阻止CPU动态调度换序。下面举例说明: Singleton模式 volatile T* pInst = 0; T *GetInstance() ...   (2回应)

    2012-12-22 14:21:19   2人喜欢

论坛  · · · · · ·

【整理一下】书中的笔误 来自helinbo 15 回应 2022-09-04 21:12:41
动态链接器自举前不能调用自己函数的正确性讨论 来自肥猫爱编程 2022-08-15 00:53:14
. 来自forandom 3 回应 2022-07-23 13:49:13
评《程序员的自我修养:链接、装载与库》(转帖自C... 来自yolanda 1 回应 2022-07-23 13:19:24
【bug】 来点干货。书中的一处错误。 来自lili 5 回应 2022-07-23 13:15:23

> 浏览更多话题


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK