学完Silverlight之后,最近两三个星期集中在了code review, debugging, 以及Windows Internals和WDM的学习上。现在是时候做个小结了。
逛了一些关于debug,windows内核,驱动等的论坛,发现大家主要集中在了加密/解密,逆向,系统漏洞和反病毒等等专业领域,和我所学习他们的目的并不相同。所以,文章和我所关注的知识点也不很match。对于我来说,我学习他们的主要目的集中在了Debug和Security Test上。在学习的过程中有种知识零散的感觉,昨晚才把他们互相联系起来,因此也就有个立体的感觉(请看下图)。下面想简单地谈谈。
首先,Debug是一项软件人员应该掌握的既基本,又高级的技能。它并不属于开发人员的专利,测试人员拥有这项技能也如虎添翼。说它基本是因为在你大学学习计算机语言的时候都会或多或少用到debug的技术,是编程中一项必用的技术。说它高级是因为很多疑难杂症都需要高超的debug能力才能去解决,debug的能力很大程度上体现了一个人的软件开发测试的水平。大家debug的目的各不相同,而对于测试人员来说就是在发现一个bug的时候能够通过debug找到root cause。在debug的学习与实践中,我认为以下知识非常重要:
- Debugging tools: 微软提供了一套tools,而我们最常用的就是windbg了。windbg使用起来还不算麻烦,学习起来也不难,但是各项命令实在是太多了,需要时间和经验去慢慢积累。
- Code review:或者你做专门的code review,或者你在debug的时候做code review。总之,你对代码不熟悉是很难进行debug的。因此,code review也是debug中非常重要的一个方面,你应该熟悉你所测试产品的代码。很多时候,你甚至不用去debug,想想代码流程,或者简单地review一下就能定位bug。而对于code review方面,你需要了解Win32 API (User mode code),以及WDM,WDF (driver)。
- Assembly: 如果你没有源代码的访问权利,你就需要逆向的能力了,这个就对汇编的要求很高了。但是,一般来说我们都是测试自己的产品,理所当然具有源代码的访问权利。但是,即使这样,我们仍然在某些时候需要汇编的知识去debug,比如有时windbg的命令不能正确显示结果,或者调试optimized code的时候。不过这些要求不会太高,一般来讲你学习几个小时的汇编就应该够用了。
- Windows internals:其实Windows internals是里边最难学的,但又是比较基础的东西。比如,windbg的很多命令的使用需要你了解内核的工作原理及数据结构。而你在调试driver的时候当然需要内核的很多知识。你如果把内核学通了,其他知识都不成什么问题了,所以对内核的掌握程度也直接决定了你的debug水平。这本书我从开始看断断续续的也快三年了,最近才有了立体的感觉,一想能知道这本书都说了些什么,虽然我不确定我到底看懂了多少,但是基本上在debug需要的时候我能够直接找到相应的章节去看,也应该可以短时间内看懂。由于先看了这本书,所以在看WDM的时候就感觉很简单了,虽然作者说话很罗嗦,但是不用太多的推敲都能很快理解。有种感觉,好象是精通了C/C++以后再去学习其他语言的时候的那种感觉。
No comments:
Post a Comment