sudami和achillis对初学者的建议

sudami对初学者的一点建议

1. 若对Windows底层开发没有兴趣,不建议继续深究, 若有些兴趣可以继续。

2. 先广泛打基础,比如C/ASM/C++/MFC,再学习Windows核心编程,对R3上的一些开发有所熟悉,再系统的学习《操作系统》等书籍,理解整个系统的原理,构架,实现。

3. 有了以上基础,可以开始阅读一些驱动入门书籍,如《Windows内核情景分析》, 多上Google搜索资料,下一份WRK/ReactOS,没事翻一翻,搭好驱动编译环境后,可以尝试写些小驱动,在蓝屏中摸索总结,从而积累初级的经验。

4. 等成了驱动开发初级工后,可开始学习Windbg,IDA的使用,多看源码多F1看帮助文档。

5. 等熟练以上工具后,开始Windbg动态调试,IDA静态逆向其他驱动(包括微软自己的)。 在这一过程中,你又会接触到脚本语言,汇编知识点,Intel手册,加密解密,Vmware等一堆的东西,同样你需要熟悉它们。

6. 等你熟悉以上东西后,可以给自己提些需求,并实现该需求,比如写个小型ARK,在这个过程中,你可以切实感受到开发一个程序是一个系统的东西,你又需要回到R3写界面,重温MFC,WTL等设计与使用。当然又要写驱动程序,保证兼容性等问题,这个过程是漫长的,期间你会发现写一小部分功能,你可以扩展收获很多知识点。

7. 等你熟悉以上东西后,已经可以自己独立解决问题了,基本不需要到网上求助。

遇到问题,会利用WRK/Windbg/IDA/Google等方式自行搞定,如网上有现成的解决方法,借用之,取其精华,唾其糟粕。 若网上没有现成的,则需要你IDA系统文件,Load pdb;Windbg动态调试内核等手段自行挖掘,若网上只有类似的程序,你可以逆向其关键部分参考之,而后变成自己的东西。

8 .等你经历了以上7个阶段,你可以开始系统的了解Windows的构架,站在产品的角度思考问题,分析问题,解决问题,对自己多提需求,进而再去实现之,这阶段是积累经验的阶段。

9. 基本能够胜任大多数公司的项目需求了。

 

achillis的一点建议

一、充分熟悉Ring3的常用API,熟练系统编程(包括各种HOOK技巧等),各种进线程操作、文件操作、内存操作、同步操作等,都可以熟练完成,《Windows系统编程》、《Windows核心编程》是这个时期的最好参考书籍。

二、跟踪Ring3 API的调用过程,熟悉Ring3 API到Native API的过程,最佳参考资料是ReactOS源码,或直接用IDA反汇编系统DLL(大部分常用API在Kenel32.dll里),或者直接用调试器跟踪API调用。

三、熟悉Native API,使用Native API编写一定量的程序,熟悉系统调用机制和系统基本架构(所谓的架构简单理解就是调用层次,这个完全可以通过调试跟踪来熟悉),熟悉内核中API的基本调用方法,这是转向驱动编程的一个非常好的过渡,参考资料Windows2000/NT Native API大全。

四、可以开始编写最简单的驱动程序了。楚狂人的驱动入门教程非常适合这时候看。张帆的《Windows驱动程序开发技术详解》,《Rootkits–Windows内核安全防护》也是这个时期的最佳参考书籍。

五、对驱动编程有了一定的熟悉,可以继续分块(进线程比较容易上手,然后再继续文件、内存、注册表等的学习)进一步熟悉系统机制,熟练程序要达到第一阶段熟悉Ring3 API的那个程度,这个阶段可能需要相当长的时间。可参考《Windows Internals》、《Windows内核情景分析》等等。

六、对大部分系统机制比较熟悉,可以开始编写一些功能性的驱动程序。可参考《寒江独钓》。

七、这个时候,你对驱动程序的编写已经随心所欲,所完成的功能仅仅受限于你的想法。

时间: 2024-08-02 17:25:50

sudami和achillis对初学者的建议的相关文章

给所有ActionScript初学者的建议

初学     声明:这篇文章我将以连载的形式,不定期的更新,有兴趣的朋友可以随时关注.    本文允许随意转载,但请注明:作者:jinni,出处:经典论坛 在论坛当斑竹时间长了,经常会碰到有朋友提出这样的问题:我是菜鸟,请问高手,AS到底该怎么学?我自认算不上高手,但三年的AS编程经验,多少也可以算半个老手(应了蓝色那句话:没有菜鸟和高手之分,只有新手和老手之别),之所以这么说,就是为了先表明立场,在网上混了这些时间,国内的AS顶尖高手我大都还算认识,自知尚无资格与他们比肩,之所以恬不知耻撰此一

给.Net初学者一点建议吧

问题描述 我是一个.Net的初学者总觉的好多东西学起来特别难怎么办呢请大家给点建议吧 解决方案 解决方案二:先把基本语法学好,学好了再多做一些试验项目,总之要多做,要学会总结,碰到不会的东西要敢于尝试.解决方案三:我都是初学者,应该先参照书本做一些项目,然后自己做一些项目..多点请教别人.解决方案四:多点自己做案子,然后总结.解决方案五:c#为例)1:学习C#.c#是内功,千万不要小看内功的修炼,如果你还未入门,那么,学习基本语法,类型,方法,属性等等等等2:多写些winform,winform

一个牛人给java初学者的建议

给初学者之一:浅谈java及应用学java 不知不觉也已经三年了 从不知java为何物到现在一个小小的j2ee项目经理虽说不上此道高手,大概也算有点斤两了吧每次上网,泡bbs逛论坛,没少去java相关的版 面总体感觉初学者多,高手少,精通的更少由于我国高等教育制度教材陈旧,加上java自身发展不过十年左右的时间还有一个很重要的原因就是java这门语 言更适合商业应用所以高校里大部分博士老师们对此语言的了解甚至不比本科生多在这种环境下,很多人对java感到茫然,不知所措,不懂java能做什么即 便

我学习ASP.Net的过程和对初学者的建议

我是一个非计算机专业的学生,但是我却对计算机有着相当大热情.大一时我加入了学校网管中心下属的一个网络社团,参与维护和开发学校里最大的网站--点击网络.此时网站是采用ASP技术实现的,为了方便改动一些页面的布局和着色,我试着了解了一些ASP知识,不过也没怎么深入.大二我当上了站长,开始为整个网站的未来做打算.我个人的性格是比较喜欢追新的,ASP技术已经有点落伍了,又考虑到当时整个网站的速度在ASP+ACCESS的制约下变得相当慢,所以我想把整个网站的架构来一次大换血,综合易用.兼容.安全和性能等多

给Dart初学者的建议

工欲善其事必先利其器,学习一门新语言,第一步就是搭建集成开发环境,同时,很多人运行时出现各种错误,很多都是因为没有翻墙,无法连接Google服务器导致的,所以我写了这篇文章,希望对初学者有帮助 关于集成开发环境,请看我的另一篇文章: http://blog.csdn.net/hekaiyou/article/details/46551179 开发过程中经常要从Google下载东西,必须要经常通过VPN翻墙,否则会出各种错误,什么是VPN,用人话讲就是翻墙用的,不用人话讲就是在公用网络上建立专用网

为PHP初学者的8点有效建议

学习一门新语言可能会是一件很艰巨的任务,最好的办法就是借鉴前辈的经验已达到事半功倍,下面就是为PHP新手们准备的一些经验餐( 笔者也还是新手). 如果你是个PHP开发者,无论是新手还是高手,笔者都希望你能在此讨论下自己对PHP的想法或者技巧. 1. 从OOP开始 Naramore是SourceForge员工以及PHPWomen.org的创办人.对于初学者,她建议在学PHP之前先了解清楚OOP(Object-Oriented Programming)即面向对象编程思想. "如果你来自非高科技行业,

为PHP初学者的8点有效建议_php基础

学习一门新语言可能会是一件很艰巨的任务,最好的办法就是借鉴前辈的经验已达到事半功倍,下面就是为PHP新手们准备的一些经验餐( 笔者也还是新手). 如果你是个PHP开发者,无论是新手还是高手,笔者都希望你能在此讨论下自己对PHP的想法或者技巧. 1. 从OOP开始 Naramore是SourceForge员工以及PHPWomen.org的创办人.对于初学者,她建议在学PHP之前先了解清楚OOP(Object-Oriented Programming)即面向对象编程思想. "如果你来自非高科技行业,

初学者如何学习运维?

老男孩语录⑧⑧-初学者如何学习运维?①先实践后看原理很多初学者思维的误区是先了解原理在去实践很多有经验的运维给初学者的建议是先把原理看懂,在去实践.他们的思想是原理比操作更重要.其实,这是很误导人的错误学习运维的思想.运维实际上是应用性为主的一门学问.没有基础的运维一定是实践更容易,看原理相对更难,造成学习困扰.老男孩的建议:以下内容转自学生的作业总结(略改动):对于初级运维人员技术方面的学习是先看原理在实践还是先实践在看原理?对于这个问题,老男孩老师做了一个非常漂亮的回答:对于初级运维人员应该

编程-初学者 先学的C#。可是看到好多代码什么的都是用c,不知道是否需要先学c

问题描述 初学者 先学的C#.可是看到好多代码什么的都是用c,不知道是否需要先学c 非计算机专业,自学编程,因为本专业涉及到了一点C#,所以先学的C#,看到好多竞赛 或者是代码用的都是C,好多对于初学者的建议也是先学C .C++等,不知道是否需要 先学C.... 解决方案 如果你学习编程为了应付考试和参加所谓的竞赛,的确C语言更好.这是因为C#是微软创建的一种商业编程语言,而且2002年问世至今只有10多年的时间. 而C/C++语言则有半个世纪的历史了,而且它们拥有很广泛的编译器实现.所以在学校