公元1999年的炎热夏季,我捧起我哥留在家的清华黄皮本《IBM-PC汇编语言程序设计》,苦读。一个星期后我那脆弱的小心灵如玻璃般碎裂了,为了弥补伤痛我哭爹求妈弄了8k大洋配了台当时算是主流的PC,要知道那是64M内存!8.4G硬盘啊!还有传说中的Celeon 300A CPU。不过很可惜的是在当时那32k小猫当道的时代,没有宽带网络,没有软件,没有资料,没有论坛,理所当然我对伟大的计算机科学体系的第一步探索就此夭折,此时陪伴我的是那些盗版光盘中的游戏,把CRACK_XXX文件从光盘复制到硬盘成了时常的工作,偶尔看到光盘中的nfo文件,心里也闪过一丝对破解的憧憬。
上了大学后有网可用了,慢慢地接触到了一些黑客入侵的知识,想当黑客是每一个充满好奇的小青年的神圣愿望,整天看这看那,偷偷改了下别人的网页就欢喜得好像第一次偷到鸡的黄鼠狼。
大一开设的汇编教材就是那不知版了多少次的《IBM-PC汇编语言程序设计》,凭着之前的那星期苦读,考试混了个80分。可惜当时头脑发热,大学60分万岁思想无疑更为主流,现在想想真是可惜了宝贵的学习时间。
不知不觉快毕业了,这时手头上的《黑客防线》,《黑客X档案》积了一大摞,整天注来注去的也厌烦了,校园网上的肉鸡一打一打更不知道拿来干什么。这时兴趣自然转向了crack,看着杂志上天书般的汇编代码,望望手头还算崭新的汇编课本,叹了口气,重新学那已经忘光了的汇编语言吧。咬牙再咬牙,看完寻址方式那章后我还是认输,不认不行啊,头快裂了,第三次努力终告失败。虽然此时也可以爆破一些简单的软件,虽然也知道搞破解不需要很多的汇编知识,但我还是固执地希望能学好这门基础中的基础课程。
毕业了,进入社会了,找工作,上班,换工作成了主流旋律,每天精疲力尽的哪有时间呢?在最初的中国移动到考公务员再到深圳再到家里希望的金融机构,一系列的曲折失败等待耗光了我的热情,我失业了,赋闲在家无所事事,唯一陪伴我的是那些杂志,课本,以及过时的第二台电脑。我不想工作,我对找工作有一种恐惧,我靠酒精麻醉自己,颓废一段日子后也觉得生活太过无聊了,努力看书考了个CCNA想出去,结果还是被现实的就业环境所打败。三年时间,一无所获。
再之后来到女朋友处陪伴她度过刚毕业踏入社会工作的适应时期,这段时间随便找了个电脑技术工作,每月赚那么个几百块做生活费。不过这半年让我收获比较大的就是时间充裕,接触到了不少新东西,我下定决心要把汇编学好,这时我在网上看到了别人推荐的王爽《汇编语言》,没抱什么希望在当当网购了人生中的第一次物,19块6毛,我记得很清楚,呵呵。
废话终于完了,感谢各位能看到这里,下面进入正题吧。
16位汇编
对于一个汇编初学者,首先必看的就是王爽老师的这本《汇编语言》,虽然它不是很完整,虽然它有一些错漏,虽然它需要一些前置知识(详见书籍前言部分,前言一定要仔细看!),但是王爽老师独特的教学理念构造了这本循序渐进的书,我们从中可以抛开对汇编语言的畏惧心态,一步一步的深入进去,更可喜的是在这本书里我们可以学到宝贵的底层编程意识和思想,这对于初学者来说是最为重要的,掌握了意识思想,进一步学习下去也不会再艰难。大家学习的时候一定要严格按照“前言”的要求去做,这样才能有最好的效果。
半个月,就半个月,我已经看完了书,我可以自信地宣布:我掌握汇编语言了。虽然比较基础,但想想我那六年半时间,想想我那几次痛苦的尝试,心中无端生出一丝怨恨,为什么当年没有这本书呢,否则我的成就绝不会是现在这样。我的学习过程是先看完一遍书,做了一些习题(当时没电脑上机操作),现在有了新的电脑了,便重新看一遍,把所有的上机操作和编程练习都完成了(除了最后的磁盘操作外)。
好书推荐:
1.《80x86汇编语言程序设计教程》杨季文编著,清华黑皮本。本书可以当作进一步深入学习的教材。
2.《The Art of Assembly Language》 [英文版],经典著作。
32位汇编
虽然上面学到的知识已经可以应付大学要求,但是16位汇编始终还是落后于时代了,所以我们要学习32位汇编,这里首推的是《Intel汇编语言程序设计(第4版)》,可以这样说,有了这本书,你就可以不必看别的32位汇编教材了。不过这本书的内容比较压缩,信息量大,需要时常翻阅复习。本书适合初学者及从16位转向32位汇编的人们。本书光盘中带有例子程序和作者Kip Irvine写的几个链接库,极大地简化了一些烦琐的基本操作,同时附带的Masm 6.15和编译链接批处理程序也可以用在王爽老师的《汇编语言》学习里,不过我建议不要安装光盘里的TextPad来编写源代码,个人推荐使用EditPlus。
认真学完这本书,应该可以对付一般的破解工作了,起码我是能进行一般的算法分析推出注册码咯。
好书推荐:
80x86保护模式系列教程 [中文版] 作者:李彦昌。本书可以可以当作进一步深入学习的教材。
64位汇编
虽然现在我们的系统主要还是WinNT系列,但是64位的CPU已经普及市场,64位的操作系统Vista也在不少电脑里安家落户,64位汇编语言学习不再是前沿研究。可惜我手头上的资料太少,无法作进一步介绍,各位高手看到这里还请指点。
相关资料:《Intel 64位CPU指令集及编程方法》电子文档。
相关链接:
1.
开始进行 64 位 Windows 系统编程之前需要了解的所有信息
http://www.microsoft.com/china/MSDN/library/Windev/64bit/issuesx64.mspx?mfr=true
2.
Moving to Windows x64
http://www.ntcore.com/Files/vista_x64.htm
Win32汇编
单纯的汇编似乎除了在底层开发,嵌入式开发以及高级语言内嵌汇编外没有多少地方使用了。为了在实际应用中更大地发挥,我们必须学习Win32汇编。这方面的资料比较少,国内的当然就是罗云彬的《Windows环境下32位汇编语言程序设计 第二版》了。hoho,大部头著作啊,可以当成防身行暴武器哦。
好书推荐:
1.
《Iczelion的Win32汇编教程》,网络上最初的系统Win32教程,罗云彬那书大部分内容都是从里面编著出来的,呵呵。
2.《Kernel Mode Drivers教程中文版》,Four-F的驱动开发教程,不论开不开发驱动还是得看看。
如果你已经精通上面罗列的东西,觉得有点不胜寒了,建议还是进行一下流行的哲学研究吧。
好书推荐:
1.
朱邦复的《组合语言之艺术》,作者的经验可以让我们的效率变得更高。
2.
《汇编语言与禅-Zen Of Assembly Language》,我还没看,哪位有空慢慢研究吧。
个人建议,虽然上面的书籍都能找到电子书,但是我认为上面列出的主要的三本书最好还是买纸质实体书吧,主要便于阅读和翻查,而且这么好的书,你能不支持一下作者吗?正版系统买不起而已,正版书籍我们还是扛得住的,小小一百几十块钱,少抽几包烟就够了。况且实体书读起来的感觉就是比电子书要好。如果您更喜欢阅读电子版本,那么当这段是废话略过也罢。
学习难免遇到一时难于解决的问题,网络交流也是必须的,介绍一下我认为不错的几个网站:
汇编语言学习论坛:
http://www.asmedu.net/forum.jsp
这里有王爽《汇编语言》讨论区,好像网站没开多久,大家凑合看看吧。
《Intel汇编语言程序设计(第4版)》作者的网站:
http://kipirvine.com/asm/4th/index.html
这个链接是关于书本的,更多内容请自己看首页。
罗云彬的编程乐园:
http://asm.yeah.net
上面有不少好东西下载哦。
AoGo汇编小站
http://www.aogosoft.com/
东西不少,论坛也还可以。
80x86汇编小站
http://www.x86asm.com/
CSDN论坛汇编板块:
http://community.csdn.net/Expert/ForumList.asp?typenum=1&roomid=1703
国外的著名汇编论坛:
http://www.asmcommunity.net/board/index.php
http://masm32.com/board/
MSDN当然也不能少:
http://msdn2.microsoft.com/zh-cn/default.aspx
顺便广告广告:
我的博客http://hi.baidu.com/hkbyest和http://blog.csdn.net/hkbyest/里也有我平时收集的一些资料和代码,有空捧捧场交流一下。
总结
学习汇编或许不容易,而且很枯燥,但是作为计算机科学体系中的重要基础,掌握汇编除了进行破解外还有许多优点,最简单地说,这么底层这么枯燥这么难的你都能学好,那些高级的人性化的还在话下吗?希望本文能给广大汇编学习者一些帮助,谢谢~