《当程序员的那些狗日日子》(十)编译与反编译
2011-04-07 01:26 java ee spring 阅读(235) 评论(0) 编辑 收藏 举报经过几个月的艰苦学习,我终于把那本厚厚的ASP.NET的书学完了。但是有一个问题我却一直没有找到答案,那就是ASP.NET程序是用什么开发工具来开发的,它的程序代码是怎么编译成DLL文件的。我曾以为.NET Framework就是ASP.NET程序的编译工具,此时我还不知道,.NET Framework其实只是ASP.NET程序(当然也包括所有.NET程序)的运行环境。最后还是老乡给我点明了:用Visual Studio .NET 2003(简称VS2003)。
老乡此前也一直在学ASP.NET,原来他那本ASP.NET的书对VS2003的使用有详细的介绍。此外这本书还介绍了ASP.NET编程的一些要点和技巧。于是我决定再学习这本书。为了学习方便,我又特地到北京西单图书大厦买了这本书回来。直到现在,我都很清楚地记得,这本书的作者叫章立民。
我不得不说的是,这本书与我之前所学的那本书,各有特点,但我还是比较偏爱之前的那本书,因为无论是它的编写还是排版,都让我觉得很好,唯一美中不足的地方就是它没有介绍VS2003这一ASP.NET程序开发必须用到的重要工具。所以此时老乡的这本书,就成了最好的弥补。
在老乡的指点下,我在电脑上装上了VS2003。看着VS2003那简洁舒适而又很人性化的界面,我一下子就被深深吸引住了,这是Dreamweaver所不能比拟的。对着VS2003,我仿佛才第一次真正走进了程序开发的世界。
有了前面那本书的学习基础,再学习这本书就容易和轻松得多。我照着书上的介绍,一步一步地在VS2003上进行操作。经过反复多次操作和实践,我终于在VS2003上编写了一个最简单的ASP.NET程序,并实现了将程序代码编译成了DLL文件。望着这个DLL文件,我有点激动,觉得它很神圣,仿佛它真的带我走进了程序开发技术的殿堂,同时我更觉得VS2003很牛很酷,很了不起。这时我才真正理解和体会到ASP.NET与ASP的区别,以及程序代码与页面分离的好处。程序代码后置,这就是ASP.NET的一大特点。
但是这时的我并没有看到,在ASP.NET和VS2003表面无限美好的背后,却是一个深深的黑洞,它正一步一步将我引进黑暗的地狱,而不是天堂,从而使我后来想逃而逃不掉。
我一边利用业余时间努力地学习这本新的ASP.NET的书,一边思考公司网站程序的问题,那是一个无法回避的问题。公司网站程序是用ASP.NET开发的,所以它的程序代码自然都是后置的,而且都被编译成DLL文件了,所以我就根本无法看到它的程序代码。因此就算我学会了ASP.NET,我还是不能对公司网站的程序进行改动。虽然这时我还在做着网站论坛系统,但迟早要面临这一问题。
自从我知道了公司网站程序是用ASP.NET开发并经过编译的之后,我就一直在找程序的源代码,可惜最后只找到了ASP.NET程序页面的代码后置类文件,而有关的类库项目源代码文件却没有找到。我在公司所使用的这台电脑,就是上一程序员在职时所使用的,我入职后除了C盘我在重装系统时将其格式化掉了外,其他盘的文件我都原封不动地保留了下来。所以我找不到类库项目的源代码文件,一是可能在C盘里被格式化掉了,二是可能上一程序员没有留下来。我入职时上一程序员已离职,所有的资料没有做任何交接,所以才出现了这样的问题。
但是矛和盾从来就是相对出现的,ASP.NET程序可以被编译,自然也可以对其进行反编译。经过在网上不断寻找,我终于找了一个ASP.NET程序的反编译工具──Reflector。这个简单易用的反编译工具,就像一个神奇的精灵,使得被编译过的ASP.NET程序在它面前也只好被展露无遗。当我将由公司网站的类库项目所编译出来的DLL文件用Reflector反编译出来后,我像是洞悉了自己心爱女人的内心秘密一样变得欣喜若狂。
于是我按照刚刚学到的VS2003的使用方法,在VS2003上打开了我之前所找到的公司网站程序的原有解决方案,并在其中建立起了有关的类库项目。接下来我所要做的就是,慢慢地将在Reflector反编译出来的类库项目的程序代码在新类库项目中重新组织起来。反编译出来的程序代码只需稍微作些修改就可以用到新类库项目中,这项工作并不难,难的是,我需要在这个过程中将程序本身所反映的实际业务逻辑弄明白,也就是要读懂这些程序代码,因为只有这样,我才能真正对公司网站程序有一个全面的了解和把握。所以这也是一项不轻松不容易、需要一定的时日才能完成的工作。
原来有了反编译,可以让事情变得轻而易举,即使没有源代码,照样可以将程序重写一遍。这似乎给了我一个很有意义的启示:不懂,没有关系,可以去学;没有源代码,也没有关系,可以去反编译。这也似乎印证了那句话,“没有做不到,只有想不到”。