黑暗森林中有一个叫人类的傻孩子,生了一堆火并在旁边高喊:我在这儿!我在这儿! 每日签到 收藏本站
登陆 / 注册 搜索

USERCENTER


查看:6679   回复: 4

[# 其他] 有哪些程序员可以称为“神”【中】

[复制链接]
发新帖
跳转到指定楼层
楼主
仗剑天涯吾是土豪 发表于 2017-10-31 18:08:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

        今天来谈谈另外两个大牛:

 38cf33bb550f443cab5973bdfc5315e8.jpg 有哪些程序员可以称为“神”【中】

        两个大胡子,经常分不清谁是谁,右边那位大家肯定都认得,克林顿同学给他们颁发国家技术奖。
        
        肯·汤普逊(Kenneth Lane Thompson)、丹尼斯·里奇(Dennis MacAlistair Ritchie), Unix 和C 语言之父 , 1983年ACM 图灵奖的获得者。理由是他们“研究发展了通用的操作系统理论,尤其是实现了UNIX操作系统”.

        注意后半句, 搞计算机的多少都会有一点OS情节,总是梦想是自己也能做一个OS ,我也是这样。

        可对大多数人来说,这是梦想而已,因为现代的操作系统 太复杂,太庞大,你即使精通理论,实现的工作量远远超出了一个人的能力范围。#t243:

        但是两位老兄竟然自己卷起袖子,带头编写了一个千古流芳的操作系统(Unix 的重要性和影响力这里就不用啰嗦了, 反正它和它的变种们已经统治了服务器端和手机端),我们看看第一版是怎么出炉的:

        1968年 ,两人被贝尔实验室派到MIT去参加一个ARPA出资的项目,开发一个分时的操作系统MULTICS (支持多任务并发运行,这在60年代可是很稀罕的), 在项目完成前不久,贝尔因为开发费用太大,而开发成功希望不大而把他们调回贝尔,两人深感沮丧。

        回到贝尔以后,面对实验室落后的仍以批处理工作的计算机环境,他们非常怀念MULTICS,决定自己动手改造,创造一个“舒适的,愉快的工作环境” 。 但是贝尔实验室因为退出了MULTICS , 更不会出钱来支持他们。

        1969 年 万般无奈的Thomason 在库房里发现了一个弃之不用的PDP-7 , 大喜过望,立刻开始实施他们的计划。但是PDP-7实在是老掉牙了, Thomason 又借口帮助公司开发一个字处理系统来处理专利申请书 , 冠冕堂皇的申请到一个新的,设备完善的PDP-11 , 这才使开发工作顺利开展。

        他们以极大的热情和极高的效率投入工作,使用汇编语言, 开发基本上以每个月一个模块(内核,文件系统,内存管理,I/O。。。) 的速度推进 !
        
        请注意关键字,1. 汇编语言,2. 每月一个模块。

        每次我看到这里,不由的倒吸一口凉气, 这实在是一个细思极恐的事情。#366:

        学过汇编的都知道,汇编只不过是二进制语言的一些助记符而已,连最基本的函数封装都没有,想做个循环必须用goto , 记得大学时学汇编,写个简单的读取键盘输入,在屏幕上回显都很费劲。

        可是这两位老兄竟然用汇编实现了操作系统, 并且一个月就能搞定内核,再用一个月就能搞定文件系统,你能想象得到他们到底有多牛吗?
        
        有人可能要问了,为什么不用C 语言呢? 答案很简单,C语言这时候还没有被他们俩发明。#362:

        Unix 在PDP-11上实现以后,两人很快就发现移植性很差, 这是当然,汇编语言嘛,高度依赖硬件。
        
        他们试图用一个高级语言来重写,先选择了BCPL(简称B 语言) ,然后又尝试PASCAL ,发现都不行,它们都不太贴近硬件操作。 于是两个人(主要是Dennis Ritchie)决定自己开发一套新的语言:这就是大名鼎鼎的 C 语言。

        C 语法简洁,对计算机模型做了良好的抽象,能够直接对内存操作,并且保持了很好的移植性。
        
        C的语法风格深深地影响到了他的那些著名的后辈们 C++, Java , C# ...... 都采用了大括号作为方法体的开始和结束,都使用分号来分开statement , 至于if .. else , while , switch 等基本控制语句几乎一样, 甚至连注释的风格都差不多。 由此可见C 的影响力和历史地位。

        Dennis Ritchie 用 C 语言重写了Unix , "重写"说起来简单,实际上并不是简单的汇编到C语言的翻译, 这里边包含了很多的发明和创造。
        
        重写过的Unix 很快就流行起来,40 多年过去了,虽然出现了很多的类Unix 系统,例如Linux, 但是他们都继承了Unix 中的基本思想, 并且发扬光大。

#f472:

        关于Unix 有个很有趣的故事,传说Ken Thompson在贝尔实验室,大摇大摆的走到任何一台Unix机器前,输入自己的用户名和密码,就能以root的方式登录!

        贝尔实验室人才济济,另外一些大牛发誓要把这个漏洞找出来,他们通读了Unix的C源码,终于找到了登录的后门, 清理后门以后编译Unix , 运行, 可是Thompson 还是能够登录进去。
        
        有人觉得可能是编译器中有问题,在编译Unix的时候植入了后门, 于是他们又用C语言重新写了一个编译器,用新的编译器再次编译了Unix, 这下总算天下太平了吧。
        
        可是仍然不管用, Thompson 依然可以用root登录,真是让人崩溃 !

        后来Thompson 本人解开了秘密,是第一个C 语言编译器有问题, 这个编译器在编译Unix源码的时候,当然会植入后门。

        这还不够,更牛的是,如果你用C 语言写了一个新编译器,肯定也需要编译成二进制代码啊,用什么来编译,只有用Thompson写的那第一个编译器来编译,好了, 你写的这个编译器就会被污染了。
        
        你的编译器再去编译Unix , 也会植入后门。

        KenThompson 和 Dennis Ritchie 绝对是两位超级程序员, Thompson 后来加入Google ,和Rob Pike (另外一个大牛)等人一起创造了Go 语言。

        预告:下一章介绍发明C#的Anders , 八卦一下Microsoft 和比尔盖茨 。
本文来自微信公众号:码农翻身(有重新排版)
作者:老刘

soarcloud「出类拔萃」 发表于 2017-11-1 08:40:53 | 只看该作者
编译器后门完全无解,除非写一个不需要编译的编译器
soarcloud「出类拔萃」 发表于 2017-11-1 08:48:03 | 只看该作者
当然,站在反汇编的角度,把一个写好的编译器执行文件,通过二进制查找,找到后门,在不破坏将后门代码更改或删除,那么最终得到的可执行的编译器就是无后门或者是有自己的后门的了。
不过进一步思考,反汇编工具中如果插入了发现后门就不反汇编的功能,那么后门就无法被找到并反编译,所有的文件编译器都对该后门进行了筛选,文件查看时也无法查看到后门,(好大的工作量)那么最终这个后门就是真的无法找到了。如果操作系统是后门设置人员写的,那就可以直接在系统级屏蔽看到后门的情况。所以,根本无解啊!
一起一伏「出类拔萃」 发表于 2018-1-22 12:09:15 来自手机 | 只看该作者
  我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子的看下去!
放我一个人生活「出类拔萃」 发表于 2018-1-22 13:08:07 来自手机 | 只看该作者
以前不懂 ,
看贴总是不回 ,
一直没提升等 级和增加经验 ;
现在我明白了 ,
反正回贴 可以升级 ,
也可以赚经验,


而升级又需要 经验,

我就把这句话复制下来,
遇贴就回 ,
捞经验就闪#y421:
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

关于我们|小黑屋|手机版|Archiver|古黑论

GMT+8, 2019-8-26 12:36 , Processed in 0.049840 second(s), 32 queries , Gzip On, Redis On.

© 2015-2019 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表