小学低年级时,爸爸总是在家对着屏幕研究无尽的英文代号,尽管我无法看懂,但那时对代码的好奇就在我心中埋下了种子,成为我一生的情节,尽管对VB6的情节这么深有时候会让我觉得无奈和难堪。
我的爸爸可能在计算机上并无太大的造诣,他也许并不聪明,更是长期喝酒(喝酒的确会伤害脑功能)。我从小到大直到跟妈妈之前,都生活在爸爸的冷热暴力之中。那时的他可能坚信真正的程序员用C++,可他几乎所有的程序都适合用C#完成。他学过basic、delphi、c++和汇编。书架上甚至能看到IBMPC汇编的书,可见他学习计算机是相当早的。但是他热衷于编程的时候,C#已经不再是宝宝了。这种思想深深的影响了我,使我觉得完全编译为本机代码的软件才是真正有技术和性能的软件,尽管我上了大学才知道这是错误的。那时候爸爸告诉我,VB6是解释运行的,所以性能比较低,比较业余。后来我才知道VB6是虚拟机语言,且部分编译成本机代码,性能尚可、简单易学。
三年级时,我爸爸教了我一些五笔字型,每天给我一些时间练打字,那时我们同学都玩QQ和QQ宠物,比谁的等级更高,可以边打字边挂级着实让我非常开心。那是一台815芯片组+赛扬900Mhz的电脑,内存只有256兆吧。这是在2000年我们家买的第一台电脑,在当时配置已经很好了,足足6000元,硬盘更是有40GB。呆呆虫和金山画王是当时喜爱的电脑游戏,我曾一度想把呆呆虫反向学习,后来在archive.org上找到了源代码。
四年级时,我爸爸给我买了VB6教材,是面向计算机二级考试的教材。他没有怎么教过我,都是我自学。爸爸的书架上有电脑报、汇编语言教材、VC6教材等等,是我年幼时的乐趣。我依然记得当时VC6教材对面向对象思想的糟糕解释让我看了很多遍都不能理解。
有一段时间,我知道VB6一样可以制作控制台程序后,非常兴奋。这套工具的作者写了个软件截获了link.exe的command参数,让我知道原来还有编译器和链接器的存在。我写了个幼稚的软件截获了C2.exe的command参数。像这样:
C2 -il C:\WINDOWS\TEMP\VB603389 -f Form1 -W3 -Gy -G5 -Gs4096
-dos -Zl -FoC:\TEMP\Form1.OBJ -QIfdiv -ML -basic
才知道这个编译器并不是直接从frm, bas, cls生成obj文件,而是被vb6.exe处理过了。这里的 -il C:\WINDOWS\TEMP\VB603389 就是VB6.exe生成的中间代码。-il的意思应该是intermediate language(中间语言)。这让我犯难,我本以为可以好好的玩编译器,看看他生成代码的过程。不过我现在知道,在c2的command参数后附上-FAs -Fa "C:\myvb\modbas.asm"也可以生成汇编代码,只是这种虚拟机语言的汇编代码难以看懂,需要vb-decomplier这样的反编译器帮助。后文我会写一个自动截获并生成汇编代码的软件(当然是用VB6写)。
初中时,我学习了c语言,学的相当的浅,数据结构、算法更是没有概念,我家的书架上也没有它们。而我初中玩电脑的机会并不多,更是没有机会学编程。而我那时候学会了简单的修电脑,经常帮同学和老师修,积累了不少人缘,和同学关系融洽。
高中时,爸爸不再控制我使用电脑 ,那时候我学习了32位汇编语言,才知道它其实和C语言也差不多。习作是百度贴吧刷投票软件,把首页的一个投票贴刷了几十万票,大家都在说这投票怎么了。后来这软件也不能用了。高三时,拿到校英语词汇竞赛第一名,奖励了我一百元的购书卡,我花99元买了《30天自制操作系统》 ,在学校闲时读起来可有滋味。还用零用钱买了《C++反汇编与逆向分析技术揭秘第一版》。
大学时,我终于有机会学钢琴,一心投在钢琴中,最刻苦的时候,一天能练八个小时,现在练四五个小时,不是说我不再刻苦,而是我知道,四五个小时够了,我有别的事情要做。
命途多舛的我,从大学退学了,因为我决心考钢琴专业,可因我的病情托了好几年,至于是什么病,不提也罢。它让我五年内只能在本地上大学。休息期间的我,重新捡起了计算机,因为我决心写一个开源免费的钢琴建模音源(当然也会有商业版本,毕竟人要吃饭),我找到了pianoteq作者的论文,180页的法语。为此我专门学习了法语,尽管我本身就喜欢学习多门外语,高中时英语是我最拿手的课程,每天学20分钟不到,高考128分。之后裸考CET4有500分。再遇计算机时,我才知道,我还是喜欢它了。这时,小学时落在潜意识中的情节在意识中浮现,我想把vb6的编译过程、编译技术研究清楚,所以我决定将它的编译器c2.exe反向,之后反向vb6.exe中的编译部分,还有链接器link.exe。
愿我早日达成心愿,曾经的记忆与情节成为祝福。