探索Windows的内部机,分析Windows各种系统机能的实现方式,并不那么难。只要有一定的基础就可以开始这方面的学习。以我的学习经历来说,我觉得在开始深入学习Windows之前,最好有如下的基础:
1. 熟练使用C语言 你至少要对C中的指针了如指掌,知道如何使用指针访问数组。知道数组并不是仅可通过下标来访问的。如果你看过很多遍《C缺陷和陷阱》并认为这本书很棒。那就太好了。
2. 一定的汇编基础 了解基本的汇编语句,对x86架构的汇编指令有基本的了解。如果在学校认真学习过汇编语言这门课,那么就足够了。在深入学习Windows时,你会遇到不少汇编代码,很多时候你需要使用一些工具来反编译一些东西,此时你汇编水平的高低就直接有影响了。
3. 对Windows API很熟悉 可以直接用API开发小规模的程序,了解Windows的消息机制,至少要看过《Windows程序设计》(上、下),如果深入学习过《Windows核心编程》那就更好。
4. 掌握基本的数据结构 至少应该达到能很容易的用C实现一个双向链表吧?基本上掌握了《数据结构》这门课,就差不多了。否则,学习中遇到的很多复杂结构,将会使你陷入云雾里,不知如何下手。
5. 学习过《操作系统》 对处理器调度、虚拟内存、I/O设备管理有基本的认识。知道什么是中断,引入中断的目的对CPU的工作方式有基本了解。这门课算是总的理论基础课了。你对这门课的掌握程度将直接影响你的学习进度,尤其是你要看《Windows Internals 4th》这本书时。
6. 对面向对象有一定的了解
上面是一些基本的硬性要求,下面的是一些软性要求:
1. 要经常问:为什么? 没有质疑的精神,探索从何而言?
2. 要有耐心 学习是一个较长的过程,探索Windows内部时,有时确实让人很有挫折感,这时千万不要急躁,耐心才能保证你终有所成。
3. 要细心 这个。。。。不用说了吧?
4. 要多思考 不要把书中内容当作金科玉律。
5. 要多总结 这样知识才能变成自己的。
当然,有一本好书,也是必须的。我推荐如下:
《Inside Windows 2000》或者《Windows Internals 4th》
《Undocumented Windows 2000 Secrets》
或许有人认为没有必要探索Windows的内部机制,这个问题仁者见仁、智者见智,不过我相信你如果对Windows的内部机制有很深的了解,那么你一定能写出更高效、更能利用系统优势的程序来。并且,当程序出现Bug时,我相信你更有把握解决它们。知其然,而不知其所以然的感觉,确实很糟J
上述仅是个人所见,不足之处还请多多指教。