
【书 名】天书夜读:从汇编语言到Windows内核编程
【作 者】 谭文,邵坚磊 著
【ISBN】 978-7-121-07339-7
【出版社】 电子工业出版社
【出版日期】2008年12月
【宣传语】
从貌似天书的汇编代码中,一探Windows底层的核心实现。
在开发中出现的问题,能从Windows自身找到答案!
【内 容 简 介】
本书从基本的Windows程序与汇编指令出发,深入浅出地讲解了Windows内核的编程、调试、阅读,以及自行探索的方法。读者在使用C/C++开发Windows程序的基础上,将熟练掌握汇编和C语言的应用,深入了解Windows底层,并掌握阅读Windows内核的基本方法,以及Windows内核的基本编程方法。
本书适合使用C/C++在Windows上编程的读者,尤其适合希望加深自己技术功底的Windows应用程序员、计算机专业的有志于软件开发的大中院校学生;专业的Windows内核程序员,亦可从本书得到超越一般内核程序开发的启发。
【前 言】
Windows是庞大复杂的系统。由于Windows并不公开源代码,我们在调试程序的时候,往往就调到自己未知的领域去了。没有C代码,只能看到令人眼花缭乱的汇编指令和机器码。我曾对它们望而生畏,敬而远之。尤其在这个黑客、破解、病毒、木马横行的时代,如果作为安全软件的开发者,同样不能期盼病毒的作者提供可以阅读的高级语言代码。
如果那些东西,也和C语言一样亲切易懂,那多么好啊!这样的话,即便是Windows这样庞大复杂而且封闭的系统,或者是再诡异和隐蔽的破坏技术,至少只要我愿意去探索,对我来说就不再有秘密可言。
其实这个梦想并非不切实际。既然我们能读懂C代码,何以就不能读懂汇编呢?很多高手眼中,机器指令和C代码一样熟悉。
这本书并没有系统地介绍Windows系统底层。但是我尝试寻找正确的方法和手段,为读者打开Windows底层知识宝库的大门,使读者可以在其中自由阅读,自己去获取所需知识。
本书强调汇编语言的应用。虽然没有像指令手册那样罗列所有指令的细节,但是让读者在实践中熟悉实用的汇编指令。我一般把汇编语言用于调试和理解程序,在写代码时应用较少。但是汇编是了解没有代码的二进制代码的基础。
这里着重于Windows内核编程,包括WDK、WinDbg的使用,但是Windows内核开发体系庞大复杂,这方面已经有很多的经典书籍可以阅读。在这里我只提到了简单、实用和必要的部分。
对于安全软件的开发者,尤其是有兴趣在Windows系统下开发反病毒软件的内核驱动读者,会学到基础的研究方法。
由于这一切都从阅读和理解机器指令出发,所以名为“天书夜读”。
“天书夜读”是通向软件底层技术的一个大门与捷径。这里涉及的每个方面的技术,无论是CPU底层架构与机器指令、汇编语言、Windows内 核编程、软件逆向工程还是软件调试,无一不是入门艰难的技术,许多技术者在开始时就被汗牛充栋的庞杂资料吓倒。用一条简洁明确的线,把它们串联起来,使读 者可以从最基础入门,循序渐进地接触到高深的技术,并应用于实际。避免一开始就面对浩瀚的文档资料而茫然不知如何入手,也不知如何学以致用,这就是我写这 本书的目的。
本书正文的内容是从读者很可能已经遗忘的汇编语言的基础指令开始,介绍C语言与汇编指令的关系,为阅读用C语言编写的Windows内核做准备。然后开始讲解Windows内核的C语言编程的基础。让读者能熟悉使用C语言开发Windows内核程序。接着指导读者进行内核的开发和调试环境的配置,并进行了一系列的尝试:阅读Windows内核的部分实现代码,并尝试自己去实现它。与此同时,产生了修改已有内核的需求。于是接下来介绍了机器码指令和汇编语言的关系,以及能够解读机器码的反汇编引擎,并以此为基础,介绍了进行Windows内核Hook开发的方法。之后是Windows内核Hook的一个利用:我们举出了一个防止病毒木马感染的安全防毒软件的例子。在此之后,简要介绍了更深层次的病毒与安全的对抗:Rootkit与HIPS。最后是一些防止代码与技术被阅读者“偷学”的章节。
相信读者读完此书,无论是对汇编语言的掌握,还是Windows编程的技术,以及对Windows系统的了解和调试程序、查找修正故障的能力,都会得到一个飞跃式的提高。
谭 文
2008年4月2日
【目 录】
入手篇 熟悉汇编
本书的第一部分,将帮助读者消除对汇编的恐惧,熟悉汇编。本部分包括第1~3章。稍显枯燥的是,它们和Windows内核无关,是纯C语言与汇编语言的关系的章节。如果读者已经精通汇编语言,并能顺利阅读汇编代码,请直接跳过本部分。
第1章 汇编指令与C语言 2
1.1 上机建立第一个工程 4
1.1.1 用Visual Studio创建工程 4
1.1.2 用Visual Studio查看汇编代码 5
1.2 简要复习常用的汇编指令 6
1.2.1 堆栈相关指令 6
1.2.2 数据传送指令 7
1.2.3 跳转与比较指令 8
1.3 C函数的参数传递过程 9
第2章 C语言的流程和处理 14
2.1 C语言的循环反汇编 15
2.1.1 for循环 15
2.1.2 do循环 16
2.1.3 while循环 17
2.2 C语言判断与分支的反汇编 18
2.2.1 if-else判断分支 18
2.2.2 switch-case判断分支 19
2.3 C语言的数组与结构 22
2.4 C语言的共用体和枚举类型 24
第3章 练习反汇编C语言程序 26
3.1 算法的反汇编 27
3.1.1 算法反汇编代码分析 27
3.1.2 算法反汇编阅读技巧 28
3.2 发行版的反汇编 29
3.3 汇编反C语言练习 33
基础篇 内核编程
本书的第二部分,是编写Windows内核程序编程方法的基础。本部分包括第4~7章,如果读者对Windows内核编程已经有一定的
天书夜读——从汇编语言到Windows内核编程1.jpg