两类人―搞windows的和搞linux的

一般搞学问的和搞技术的不能太书生气,细化一些就是不要纯粹地搞理论,可是我还是难免的要形而上的总结一下两类人,一类就是搞windows的高手,另一类就是搞linux的大侠,其实刻意的区别这些真的没有设么意义,可是我写此文的目的就是想借此阐述一下linux和windows的根本思想和意义的不同。

搞windows的人我见的很多,也有不少堪称为高手的朋友,他们的一致性特点就是对x86的intel汇编非常熟悉,也可以说是精通,他们的电脑上总是安装着各种各样的反汇编工具,令你眼花缭乱。当我看到这些人在使用这些工具看着天书一样的代码,我打心眼里面佩服,他们从一些类似mov eax,0xXXXX的东西里面就能窥视到代码逻辑,这不能不让人佩服,甚至他们可以窥视内核,有一本书叫做《天书夜读》,他们几乎都看过,没有看过的是因为觉得那太小儿科了,搞windows的人精通十六进制,好像他们是从50年代走过来的人一样探查着底层的一切。夸完了他们就该损他们了,这个时候一分为二还是不错的,他们即使精通x86的intel汇编,会使用各种调试工具,也不见得他们知其所以然,可以说,Microsoft的策略使得他们变得很可怜,他们迷失于代码的细枝末节,将世界理解为intel的汇编,以为任何非intel汇编不可解决,他们很多甚至不知道sparc处理器和ppc处理的基本架构,甚至逮个处理器就找段间长跳转指令,甚至给他们给计算机他们就找bios,甚至给他们个操作系统装完驱动后不重启总觉得不放心... 他们一旦遇到困难就打开他们心爱的反汇编工具来探究代码逻辑,即使是新手也不会忘了去浏览“看雪论坛”,总之他们就是程序员,就是编程者,离系统设计总是差那么一大截。

现在看看linux的粉丝们,和windows粉丝不同,遇到问题时,他们不用动用任何反汇编工具,直接可以看到源代码,我这里所说的问题不单单是指linux自带的程序和内核,还包括了任何可以在gnu和sourceforge上找到的东西,这样,他们的思想就天生的比windows的粉丝们高那么一个层次,他们不用理解任何汇编就可以理解整个系统的架构,具有调侃意义的是,他们并不是不理解汇编,而是他们理解的汇编比windows粉丝们还要多,他们对汇编的理解不是为了解决问题,不是为了hack,而是为了设计一个自己的系统,如果它们想hack,那么用c已然足够,linux的粉丝们不光知道x86,他们还知道x86不过是一个最差劲的处理器,他们的心根本不在pc,而在整个IT领域,他们对sparc玩得不亦乐乎,他们对c语言和汇编的整合得心应手,他们可以节省下来很多时间来进行思考和设计,他们不必为一个序列号算法茶饭不思...

windows的粉丝们总是被牵着鼻子走路,Microsoft总是在推出新东西,出产新规范,粉丝们总是为可以在第一时间得到消息而自豪,.NET框架就是一个例子,然后他们的行为就是拼命地学习,新手们总是会遇到一个问题,就是编程或者运行时为系统找不到特定的库而耿耿于怀,系统总是提示他们安装一些新东西,然后这些新东西就成了他们炫耀的资本,初学者总是会遇到的另一个问题就是安装vs200X集成开发环境,大学生们的作业有的竟然是安装vs200x。linux下的工作者完全不同,如果你安装好了linux,并且是开发环境版本的,那么你只管写程序,然后man gcc,瞬间就可以把gcc玩弄于鼓掌之中,粉丝们可以将大部分时间用于自己的代码逻辑了。众所周知,linux的发行版众多并且不统一,那么编程者是否会因此为遭罪呢?不!虽然linux有很多发行版,但是如果你想开发一个大众的应用,那么只要底层的api稳定并且统一,那么你就是幸福的,幸运的是,linux遵循绝大部分的posix调用,而posix的意义大家都知道,很稳定,并且多年不变,于是乎,真正开发linux应用的可以不必太在意自己在用什么发行版了。如果我看到一个开发者在为开发一个应用(涉及到开发内核模块)而为挑选发行版耿耿于怀,那么我就太看不惯他了,windows的粉丝不要亵渎linux了!发行版之所以这么丰富,原因就是linux继承了unix的优良基因,机制和策略相分离,其实unix也是有很多版本的,它们的内核实现有的也不同,但是它们的机制是相同的,某种意义上内核的东西也不一定都是机制,内核中也可以实现策略,比如sun的solaris,IBM的AIX以及HP的hp的unix。

windows的dll是它的一个很重要的特征,但是同时也成了它的一个地狱,具体原因我就不说了。之所以windows中有那么多的库可以被反汇编工具所调试,那就是因为它有很多的dll,甚至有很多系统的dll,比如ntdll.dll,kernel32.dll,user32.dll等等,它们的存在也导致了一些可以勾住它们的小子被认为是高手,linux的情况呢,大大不同,你想执行read,那么开源的glibc马上导进系统调用,马上进入内核,小子们就傻了,如何知道其中的奥秘呢?看代码吧,调试内核吧,于是小子们成了大侠,而勾住windows的dll的小子们却迷失于intel汇编而被认为是高手后不可自拔!linux的glibc没有那么多闲事,但是在windows下调用标准c库的read函数,那么在进入内核之前会先进入ntdll.dll的ReadFile,后者再进入内核,其实这么实现还是微软不敢太得瑟,它完全没有必要实现标准c库的read而告之人们想要读文件就调用ReadFile,但是它还是用如此丑陋的方式兼容了标准c。

最后是我的一个经历,我们项目组要上linux项目,组里的一个windows高手上去就找到了该项目相关的一个项目的windows版本,打开他们反汇编工具看了起来相关项目的dll库,我问他时,他说想看看都调用了哪些api,可是他根本不知道那个相关项目是开源的...而且那么为开发linux而挑选发行版的就是他...

你可能感兴趣的:(windows,linux,汇编,Microsoft,dll,工具)