新闻资讯
看你所看,想你所想

琢石成器——Windows环境下32位彙编语言程式设计

琢石成器——Windows环境下32位彙编语言程式设计

琢石成器——Windows环境下32位彙编语言程式设计

《琢石成器——Windows环境下32位彙编语言程式设计》是2009年由电子工业出版社出版社出版的图书,作者是罗云彬。

基本介绍

  • 中文名:琢石成器——Windows环境下32位彙编语言程式设计
  • 作 者:罗云彬 着
  • 出 版 社:电子工业出版社
  • 出版时间: 2009-6-1
  • 页 数:756页
  • 开 本:16开
  • ISBN :9787121086632 
  • 定价:89.00元(含光碟1张)

编辑推荐

本书从编写应用程式的角度,从简单的例子开始到编写多执行绪、注册表和网路通信等複杂的程式,通过70多个实例逐步深入Win32彙编语言编程的方方面面。

宣传语

畅销书《Windows环境下32位彙编语言程式设计》升级版。

内 容 简 介

Windows环境下32位彙编语言是一种全新的程式语言。它使用与C++语言相同的API接口,不仅可以开发出大型的软体,而且是了解作业系统运行细节的最佳方式。
本书作者罗云彬拥有十余年彙编语言编程经验,是彙编编程网站的创办者。本书是作者多年来编程工作的总结,适合于欲通过Win32彙编语言编写Windows程式的读者。

前言

从Windows出现开始,彙编语言似乎在慢慢地销声匿迹,但本书可以让人放弃这个观点,其实在Win32环境下,彙编语言依然强大。
Why——为什幺选择Win32彙编
选择Win32彙编的理由是什幺呢?
在DOS时代,学习彙编就是学习系统底层编程的代名词,仅要成为一名入门级的彙编程式设计师,就需要学习从CPU结构、CPU工作方式、各种硬体的编程方法到DOS工作方式等範围很广的知识。随着Windows时代的到来,Windows像一堵巨大的墙,把我们和计算机的硬体隔离开。对于DOS的彙编程式设计师来说,就像在一夜之间,我们发现自己曾经学过的几乎所有的东西都被Windows封装到核心中去了,由于保护模式的存在,我们又无法像在DOS下那样闯入系统核心为所欲为。在Windows下用任何语言编程都必须遵循Windows的规範,彙编也不例外,也就是说,彙编不再是一种“有特权”的语言。面对汹涌而来的Visual C++,Visual Basic,PowerBuilder和Java等各个领域的猛将,从DOS时代“为所欲为”的“系统警察”岗位下岗,在其他领域又没有一技之长,彙编语言似乎失去了生存的意义,有很多人在DOS转向Windows的时候放弃了彙编语言。
但是经过短暂的失落,摆正了自己在系统中的位置,我们发现从“系统警察”转换到遵循Windows规範的“好市民”后,彙编语言又慢慢地在这个世界流行起来了。毕竟,不能为所欲为也可以有好的一面,我们可以不必再考虑一些老大难的问题,如程式运行时会面对什幺样的显示卡,如何驱动不同的印表机,记忆体不够了如何用磁碟交换,等等。我们也可以在了解更少硬体知识的情况下就可以掌握Win32的彙编编程。而且,我们惊喜地发现,做了“好市民”以后,我们反而拥有了和其他语言同样的权利——为了做图形和界面等方面的功能,彙编程式设计师在DOS时代连做梦都在羡慕C语言庞大的函式馆,而现在,Windows为我们提供了比这还要多得多的函式,以至于其他大部分语言可以做出来的功能,彙编都可以做,而其他语言做不到的功能,彙编照样可以做!所以这就是理由之一:Win32彙编可以当做一种功能强大的开发语言使用,使用它完全可以开发出大型的软体来。
正因为Win32彙编看上去不再那样低级,于是有读者曾经提出:Win32彙编讲的都是用API来写程式,和高级语言差不多,以前在DOS下使用的中断什幺的都不能用,所以没有什幺新奇的了。还有读者认为本书只不过是MSDN的彙编版本而已。言下之意就是:学彙编就是为了了解高级语言底下一层的功能,但现在Win32彙编却使用和C++等语言相同的API接口,既然和高级语言处于同一个级别,我们为什幺还要去和机器指令打交道呢,还不如去学Visual C++方便。
但是我们可以这样问一问自己:
问:在DOS彙编中我们为什幺用中断功能?
答:为了使用DOS核心提供的功能。
问:在DOS中我们常常自己用操作I/O连线埠的方法读写硬碟或操作显示卡吗?
答:不,我们用系统提供的int 13h和int 10h。
……
同样,在Win32彙编里使用API也是为了使用Windows核心提供的功能。只不过使用的方式不再是中断方式而已,这不是Win32彙编语言“高级化”了,而是高级语言因为使用Windows的API接口而“低级化”了,其代价就是无法移植到其他系统,用Visual C++写的程式是无法移植到其他作业系统平台上的,只有和平台无关的ANSI C++等才能算是真正意义上的高级语言。
其实,任何彙编语言都是和作业系统密切相关的,不管是DOS彙编、Win32彙编,还是Linux彙编,都是基于特定的作业系统的,如果一定要绕过作业系统,那幺就不会有DOS彙编和Win32彙编的区别了,但是这样的话我们不是在学彙编,而是在自己开发作业系统。高级语言在不同的作业系统上看起来都差不多,但作为一种低级语言,不同作业系统上的彙编就是不同的世界。所以,既然Windows和DOS是两个完全不同的作业系统,我们就必须抛弃DOS彙编中的大部分概念从头开始学习Win32彙编。这就是理由之二:Win32彙编是Windows环境下一种全新的程式语言。
Win32环境下的很多高级语言,如Visual C++和Visual Basic等,一如既往地对实现的细节进行了或深或浅的封装,就连最能表现Windows特徵的部分,如讯息循环和多执行绪的处理等内容也都被隐藏封装,使我们在使用它们进行可视化编程的同时,无法全面了解Win32程式运行的具体方式。在学习Win32彙编以后,这些隐藏在高级语言后面的细节就暴露出来了。
由于封装的关係,各种高级语言或多或少存在某种“缺陷”,比如VB不支持指针,结果很多需要使用指针的API用起来就很不方便,像多执行绪一类的特徵在VB中就无法实现,PowerBuilder也是如此;C语言已经是最灵活的高级语言了,但还是无法在代码级别处理某些需求;而彙编语言见到的是一个最真实的作业系统,它可以用最灵活的方式使用各种系统功能,第13章中有关进程隐藏的内容就是最好的写照。所以理由之三就是:使用Win32彙编语言是了解作业系统运行细节的最佳方式。
最后的理由根本不是理由,而是必然的选择,当我们在Windows环境下进行加密解密、逆向工程,还有病毒、木马等有害代码的分析和防治工作时,Win32彙编是唯一的选择。在任何讨论这方面内容的书籍中,彙编代码的篇幅总是很大的。因此,要想深入了解这些内容的前提就是深入彙编编程。
How——如何学习Win32彙编
以往的彙编书籍往往把重点放在硬体结构和指令上,讲述了一大堆电路框图和指令列表,把大家搞得晕晕乎乎后,再举出一些重量级的例子,不是一些像数组、矩阵计算一类的複杂运算,就是开始图形模式画图,以至于大家看完以后就再也找不到北了!实际上,这些例子不是太难了,而是太枯燥了。有人说,学彙编就像考大学,千军万马过独木桥,太多的人中途放弃了,只有少数人坚持到最后。
笔者认为:学习彙编应该在轻鬆的环境下进行,在学习中使用的例子不一定太複杂,但一定要有吸引力。用彙编写複杂的运算程式固然会比C更有效率,但同样的事在C中用一个表达式就全部搞定了,从这里开始学彙编,给人的感觉就像从複杂的公式开始学算术,要知道,加法还没有学会呢!而对于高级语言封装起来的系统功能,用彙编解释起来就非常直接,非常自然,也更容易懂。以笔者自己学彙编的过程来说,那时候是1990年,刚好是中国第一次病毒大流行,大家的计算机上都是那个病毒的开山鼻祖——桌球病毒,在流行DOS的时期,看着在萤幕上蹦的小球,心中就有一个问题:如何编出这样一个玩意来呢?要知道DOS是单任务的,而那个球在别的程式运行的时候照样蹦!这用当时流行的FORTRAN、C等课程中学到的任何知识都无法解释,因为这些课程中不可能有TSR、中断、引导区等内容。带着这样一个疑问学习彙编,在分析桌球病毒的过程中啃一条条不懂的指令,病毒分析完了,彙编课也学完了,而且反过来看那些複杂的计算程式都是那幺顺理成章,不攻自破了。实际上,从一些实用的系统功能开始学习彙编远比学矩阵计算容易理解。
正如最经典的C程式就是那个“Hello,World!”一样,这个程式的有名并不是因为它用高深複杂的语句放倒了一大批人,而是它以最简单易懂的方式让人们走入C语言的大门。对于Win32彙编也是如此,从最简单的例子开始总是没错的,笔者建议读者跟随本书中从简到繁的例子,努力做到理解并灵活引用这些例子中的各种功能,正如“熟读唐诗三百首,不会写诗也会吟”,最后能够熟练地使用Win32彙编来解决各种编程需求就是最大的胜利。
另外,正如前面讲到的,彙编语言的学习必须和作业系统紧密结合。经过简单的调查,笔者发现很多高校使用的彙编教程还是停留在清华91版《IBM-PC彙编语言程式设计》之类的教材上,虽然这些教材中基础知识部分永远不会过时,但涉及作业系统的部分还是停留在DOS阶段。随着DOS作业系统的悄然引退,继续把精力花在上面是一种浪费,因为任何语言都必须有套用的平台,否则课程学完之后会尴尬地发现没有地方可以套用。笔者认为,在《IBM-PC彙编语言程式设计》之类传统教材中的基础部分学习完毕以后,重点就应该转向Win32彙编,以及保护模式方面的知识。
关于本书的内容
本书尝试从编写应用程式的角度,从“Hello,World”这个简单的例子开始到编写多执行绪、注册表和网路通信等複杂的程式,通过70多个从简单到複杂的例子,逐步深入Win32彙编编程的方方面面。笔者从事彙编编程已经有十几年的历史了,从8086时代的DOS彙编编程开始到当前的Win32彙编编程,从一个初学者到现在能利用Win32彙编来解决大部分编程需求,中间也经过了很长时间的摸索和大量的挫折,所以笔者很清楚初学者在哪些地方会遇到问题,但是涉及Win32彙编的书籍却实在太少了。正是因为如此,笔者决心把本书的目标定为:能让读者入门并在最后能熟练掌握Win32彙编编程,而不是那种深入系统奥秘一类的书籍。
从这个目标出发,本书的选材中儘量去掉已经有其他书籍详细讨论的部分,因为要一本书涉及全部方面是不现实的。内容全面就必然不精,内容深刻就必须围绕一个中心点,所以本书的内容并不详细讨论一般彙编教材的基础部分,如处理器结构和保护模式等,也不準备涉及Windows驱动程式、COM编程或者其他能够冠以“密技”头衔的内容。本书主要的内容将放在32位宏彙编对比DOS彙编所不同的部分,以及Win32应用程式的彙编实现上。不求全面,只求精也!(说句老实话,也不敢对自己不精通的地方妄加评论,以免破坏自己的良好形象。 )
在一些彙编编程论坛上,经常有初学者问到MASM和TASM有什幺不同,用哪个比较好,@@标号是什幺意思,为什幺用下载的彙编编译器无法编译程式等问题,虽然这些都属于最基本的问题,但是以前的确没有一个地方或者有一本书能系统全面地讲解这些问题。本书的基础篇就是因此而设,它们是:
● 第1章 背景知识
● 第2章 準备编程环境
● 第3章 使用MASM
当搭建编译环境和对编译器的使用不再成为绊脚石的时候,初学者的问题往往集中在对Windows程式结构的迷惑上,讯息驱动体系、视窗过程、与硬体隔绝的图形接口及资源档案等相对于DOS程式来说都是全新的内容。接下来的4章将深入讨论这些内容,通过这几章,读者应该开始习惯以Windows的方式考虑问题了(脑海中的DOS逐渐远去……),这就是本书的初级篇:
● 第4章 第一个视窗程式
● 第5章 使用资源
● 第6章 定时器和Windows时间
● 第7章 图形操作
Windows系统不像DOS系统,它的应用程式界面是规範化的,统一的界面来自大量统一的界面控制项,学习这些控制项就等于学习如何编写Windows界面。下面的界面篇中的两章将探讨这方面的内容:
● 第8章 通用对话框
● 第9章 通用控制项
学到这里为止,读者应该可以写出界面规範的标準的Win32程式了。但还是无法用这些程式来解决一些具体问题,因为有关Windows系统的高级特徵的介绍还没有开始,如记忆体管理、档案操作和多执行绪等。这些就是本书系统篇中将要介绍的内容,通过这些内容,读者将比较深入地了解Windows的工作方式:
● 第10章 记忆体管理和档案操作
● 第11章 动态程式库和钩子
● 第12章 多执行绪
● 第13章 进程控制
● 第14章 异常处理
相信到这里为止,读者对Windows的了解已经比较系统了。虽然Windows中还存在其他很多方面的内容,如管道,邮件槽,如何写控制台程式、萤幕保护程式和驱动程式等。但是有了前面的基础以后,读者自己去了解这些内容就不成问题了,因为掌握了“渔”,得到“鱼”又有什幺困难呢?在最后的几章中,本书将从套用的角度再补充介绍一些常用的网路编程、注册表、PE档案和资料库操作方面的内容,这就是套用篇:
● 第15章 注册表和INI档案
● 第16章 WinSock接口和网路编程
● 第17章 PE档案
● 第18章 ODBC资料库编程
在本书中,笔者特别以显着的方式标出了一些经验之谈,这些是笔者在长期的彙编编程中得到的体会,可能是任何一本教科书或者手册里都没有的。希望这些能给读者带来帮助!
用“灯泡”标出的部分表示一些小技巧,可以对编程的理解有促进作用。
用“惊叹号”标出的部分表示容易出错的部分,可以帮助读者避免一些难以理解的错误。
对读者的假设
有了内容的定位,读者的定位也就比较清楚了,本书适合于以下读者:
● 想用Win32彙编写Windows应用程式的读者。
● 想从DOS下的16位彙编转向Windows下32位彙编的读者。
● 欲了解Win32彙编,以便为Windows下的加密解密、系统安全、逆向工程等方面打基础的读者。
● 欲了解Win32彙编,以便为用彙编写Windows驱动程式打基础的读者。
● 正在学习彙编课程,需要补充彙编课程中Win32部分的学生。
在开始本书之前,读者应该有以下的基础知识:
● 计算机的基础知识,如进制转换、逻辑运算、变数类型和指针的概念等。
● 数据结构的基础知识,因为Win32编程涉及大量的数据结构。
● C语言的基础知识,因为Win32编程的绝大部分参考资料都是以C的格式出现的。
● Intel 80x86处理器的基础知识,如定址方式和指令的使用等。
本书并不是为以下读者準备的:
● 欲详细了解保护模式的读者——因为Windows并不是一个开放的平台,Windows的开放只限于应用程式接口,所以要用Windows做背景研究保护模式只能是自讨苦吃,如果读者需要深入了解这方面的内容,最好的方法就是去研究Linux的核心代码并在Linux上实验。
● 欲了解Windows核心“机密”的读者——彙编并不等同于深入作业系统的内部,所以本书不是《Windows核心分析》。而真正意义上的《Windows核心分析》除了Microsoft,恐怕谁也写不出来。
● 欲了解Windows驱动程式编写的读者——要介绍清楚Windows驱动程式,需要的篇幅绝不会亚于本书的篇幅,本书不打算涉及这方面的内容,读者有兴趣的话,可以阅读《Programming WDM》和《System Programming for Windows 95》等书,前者讲述的是Windows 2000/Windows NT下的WDM驱动程式,后者讲述的是Windows 9x下的VxD驱动程式。
第3版有什幺新的内容
本书第1版出版至今已经6年多了,第2版出版至今也已经3年了,期间笔者收到了大量的读者来信,对本书提出了各种意见和建议,综合各种方面的考虑,本书的第3版做了以下改进。
● 对第2版中已知的错误进行了修正,包括一些排版错误、错别字和例子中的Bug。
● 对一些过时的内容进行了更新或者删除。
● 根据读者的反馈,对部分章节进行了重写。
关于附书代码和读者反馈
为了更好地说明Win32彙编的编程方法,本书附带了70多个例子,这些例子的原始码全部可以在附书光碟中找到,代码全部採用MASM格式编写,推荐使用的编译软体为MASM32 SDK软体包。
本书中的例子代码已经经过了严格的防病毒测试,绝对不含任何病毒,但第11章的例子涉及钩子技术,第17章的例子涉及对PE档案进行操作,其中的小段代码与一些木马和病毒的特徵码类似,以至于被一些防毒软体误认为有未知病毒,请读者放心使用,不必顾虑。
虽然本书中所有的例子代码都已经在Windows 98、Windows 2000、Windows XP和Windows Vista下测试通过,但也有存在Bug的可能,如果发现代码存在错误或者发现书中有其他问题,请告知作者,以便在下一个版本中改进。如果读者有任何的反馈意 见——不管是批评还是鼓励,都请和作者联繫,请访问作者网站获取最新有效的E-mail地址。
罗云彬
致谢
首先感谢我的父母亲,如果没有你们从小到大对我的培养,就没有这一切。也感谢我的妹妹,在很多关键的时候,你总是给予我很多的帮助。
感谢我的妻子小猪猪,在本书创作的时候,没有你的理解和支持,我不可能完成这样一部作品;在本书发行后的日子里,要不是你将逛街、买衣服、旅游的时间慷慨地贡献出来,并盯紧四处乱跑的小宝宝,本书就不会有多次再版的机会。
感谢我的母校浙江大学,浙大“求是创新”的校训,“实事求是、严谨踏实、奋发进取、开拓创新”的校风让我能够有一个好的学习习惯,让我在毕业以后的这幺多年里能够始终有一种动力去学习最新的知识。
感谢电子工业出版社博文视点资讯有限公司的郭立老师和李冰编辑,你们的支持、鼓励和专业的指点使本书能够按照进度按时完成。
非常高兴看到本书的再版,本书的前2个版本取得了累计销量达到40000册的好成绩,从本书的第1版发行到现在,我收到了很多读者和网友的反馈,使本书更加完善。在第3版发行之际,再次感谢你们对我的关心和爱护,也感谢你们为我提了很多宝贵的意见和建议。
罗云彬

目 录

基础篇
第1章 背景知识 1
1.1 Win32的软硬体平台 1
1.1.1 80x86系列处理器简史 1
1.1.2 Windows的历史 3
1.1.3 Win32平台的背后——
1.1.3 Wintel联盟 5
1.2 Windows的特色 6
1.3 必须了解的基础知识 7
1.3.1 80x86处理器的工作模式 7
1.3.2 Windows的记忆体管理 9
1.3.3 Windows的特权保护 17
第2章 準备编程环境 21
2.1 Win32执行档的
2.1 开发过程 21
2.2 编译器和连结器 23
2.2.1 MASM系列 23
2.2.2 TASM系列 27
2.2.3 其他编译器 28
2.2.4 MASM,TASM还是
2.2.4 NASM 29
2.2.5 我们的选择——MASM32
2.2.5 SDK软体包 30
2.3 创建资源 31
2.3.1 资源编译器的使用 31
2.3.2 所见即所得的资源编辑器 32
2.4 make工具的用法 34
2.4.1 make工具是什幺 34
2.4.2 nmake的用法 35
2.4.3 描述档案的语法 36
2.5 获取资料 39
2.5.1 Windows资料的来源 40
2.5.2 Intel处理器资料 42
2.6 构建编程环境 42
2.6.1 IDE还是命令行 42
2.6.2 本书推荐的工作环境 43
2.6.3 尝试编译第一个程式 44
第3章 使用MASM 46
3.1 Win32彙编源程式的结构 46
3.1.1 模式定义 48
3.1.2 段的定义 50
3.1.3 程式结束和程式入口 53
3.1.4 注释和换行 53
3.2 调用API 54
3.2.1 API是什幺 54
3.2.2 调用API 56
3.2.3 API参数中的等值定义 60
3.3 标号、变数和数据结构 62
3.3.1 标号 62
3.3.2 全局变数 64
3.3.3 局部变数 65
3.3.4 数据结构 68
3.3.5 变数的使用 70
3.4 使用子程式 74
3.4.1 子程式的定义 75
3.4.2 参数传递和堆叠平衡 76
3.5 高级语法 79
3.5.1 条件测试语句 79
3.5.2 分支语句 80
3.5.3 循环语句 82
3.6 代码风格 85
3.6.1 变数和函式的命名 85
3.6.2 代码的书写格式 87
3.6.3 代码的组织 88
初级篇
第4章 第一个视窗程式 89
4.1 开始了解视窗 89
4.1.1 视窗是什幺 89
4.1.2 视窗界面 90
4.1.3 视窗程式是怎幺工作的 92
4.2 分析视窗程式 98
4.2.1 模组和句柄 98
4.2.2 创建视窗 100
4.2.3 讯息循环 107
4.2.4 视窗过程 109
4.3 视窗间的通信 114
4.3.1 视窗间的讯息互发 114
4.3.2 在视窗间传递数据 117
4.3.3 SendMessage和
4.3.3 PostMessage函式的区别 118
第5章 使用资源 119
5.1 选单和加速键 120
5.1.1 选单和加速键的组成 120
5.1.2 选单和加速键的资源定义 121
5.1.3 使用选单和加速键 126
5.2 图示和游标 138
5.2.1 图示和游标的资源定义 139
5.2.2 使用图示和游标 139
5.3 点阵图 143
5.3.1 点阵图简介 143
5.3.2 在资源中定义点阵图 144
5.4 对话框 145
5.4.1 对话框简介 145
5.4.2 对话框的资源定义 147
5.4.3 使用对话框 149
5.4.4 在对话框中使用子
5.4.4 视窗控制项 152
5.5 字元串资源 174
5.6 版本信息资源 176
5.6.1 版本信息资源的定义 176
5.6.2 在程式中检测版本信息 179
5.7 二进制资源和自定义资源 180
5.7.1 使用二进制资源 180
5.7.2 使用自定义资源 181
第6章 定时器和Windows时间 183
6.1 定时器 183
6.1.1 定时器简介 183
6.1.2 定时器的使用方法 184
6.2 Windows时间 188
6.2.1 Windows时间的获取和
6.2.1 设定 188
6.2.2 计算时间间隔 189
第7章 图形操作 191
7.1 GDI原理 191
7.1.1 GDI程式的结构 192
7.1.2 设备环境 195
7.1.3 色彩和坐标 201
7.2 绘製图形 203
7.2.1 画笔和画刷 211
7.2.2 绘製像素点 214
7.2.3 绘製图形 214
7.2.4 绘图模式 218
7.3 创建和使用点阵图 220
7.3.1 一个使用点阵图的时钟例子 220
7.3.2 创建和使用点阵图 230
7.3.3 使用设备无关点阵图 231
7.4 块传送操作 233
7.4.1 块传送方式 233
7.4.2 块传送函式 234
7.5 区域和路径 239
7.5.1 使用区域 239
7.5.2 使用路径 241
界面篇
第8章 通用对话框 243
8.1 通用对话框简介 243
8.2 使用通用对话框 250
8.2.1 “打开”档案和“保存”
8.2.1 档案对话框 250
8.2.2 字型选择对话框 252
8.2.3 “颜色选择”对话框 254
8.2.4 “查找”和“替换”文本
8.2.4 对话框 255
8.2.5 “页面设定”对话框 258
8.2.6 “浏览目录”对话框 259
第9章 通用控制项 260
9.1 通用控制项简介 260
9.1.1 通用控制项的分类 260
9.1.2 使用通用控制项 262
9.2 使用状态栏 266
9.2.1 创建状态栏 271
9.2.2 状态栏的控制讯息 272
9.2.3 在状态栏上显示选单
9.2.3 提示信息 274
9.3 使用工具列 275
9.3.1 创建工具列 282
9.3.2 工具列的控制讯息 285
9.3.3 工具列的通知讯息 288
9.4 使用Richedit控制项 291
9.4.1 创建Richedit控制项 303
9.4.2 Richedit控制项的控制讯息 305
9.4.3 Richedit控制项的通知讯息 314
9.5 视窗的子类化 315
9.5.1 什幺是视窗的子类化 315
9.5.2 视窗子类化的实现 316
9.6 控制项的超类化 322
9.6.1 什幺是控制项的超类化 322
9.6.2 控制项超类化的实现 323
系统篇
第10章 记忆体管理和档案操作 327
10.1 记忆体管理 327
10.1.1 记忆体管理基础 327
10.1.2 记忆体的当前状态 328
10.1.3 标準记忆体管理函式 330
10.1.4 堆管理函式 335
10.1.5 虚拟记忆体管理函式 339
10.1.6 其他记忆体管理函式 344
10.2 档案操作 345
10.2.1 Windows的档案I/O 345
10.2.2 创建和读写档案 346
10.2.3 查找档案 357
10.2.4 档案属性 364
10.2.5 其他档案操作 366
10.3 驱动器和目录 367
10.3.1 逻辑驱动器操作 368
10.3.2 目录操作 371
10.4 记忆体映射档案 373
10.4.1 记忆体映射档案简介 374
10.4.2 使用记忆体映射档案 376
第11章 动态程式库和钩子 384
11.1 动态程式库 384
11.1.1 动态程式库的概念 384
11.1.2 编写动态程式库 385
11.1.3 使用动态程式库 391
11.1.4 动态程式库中的数据
11.1.4 共享 400
11.1.5 在VC++中使用动态
11.1.5 程式库 401
11.2 Windows钩子 404
11.2.1 什幺是Windows钩子 404
11.2.2 远程钩子的安装和使用 406
11.2.3 日誌记录钩子 414
第12章 多执行绪 418
12.1 进程和执行绪 418
12.2 多执行绪编程 419
12.2.1 一个单执行绪的“问题
12.2.1 程式” 419
12.2.2 多执行绪的解决方法 423
12.2.3 与执行绪有关的函式 427
12.3 使用事件对象控制执行绪 431
12.3.1 事件 432
12.3.2 等待事件 433
12.3.3 进一步改进计数程式 434
12.4 执行绪间的同步 437
12.4.1 产生同步问题的原因 437
12.4.2 各种用于执行绪间同步
12.4.2 的对象 442
第13章 过程控制 450
13.1 环境变数和命令行参数 450
13.1.1 环境变数 450
13.1.2 命令行参数 453
13.2 执行执行档 458
13.2.1 方法一:Shell调用 458
13.2.2 方法二:创建进程 460
13.3 进程调试 469
13.3.1 获取运行中的进程句柄 469
13.3.2 读写进程的地址空间 475
13.3.3 调试API的使用 480
13.4 进程的隐藏 489
13.4.1 在Windows 9x中隐藏
13.4.1 进程 489
13.4.2 Windows NT中的远程
13.4.2 执行绪 491
第14章 异常处理 503
14.1 异常处理的用途 503
14.2 使用筛选器处理异常 504
14.2.1 注册回调函式 504
14.2.2 异常处理回调函式 506
14.3 使用SEH处理异常 510
14.3.1 注册回调函式 512
14.3.2 异常处理回调函式 513
14.3.3 SEH链和异常的传递 516
14.3.4 展开操作(Unwinding) 518
套用篇
第15章 注册表和INI档案 522
15.1 注册表和INI档案简介 522
15.2 INI档案的操作 523
15.2.1 INI档案的结构 523
15.2.2 管理键值 525
15.2.3 管理小节 532
15.2.4 使用不同的INI档案 533
15.3 对注册表的操作 534
15.3.1 注册表的结构 534
15.3.2 管理子键 536
15.3.3 管理键值 547
15.3.4 子键和键值的枚举 548
15.3.5 注册表套用举例 551
第16章 WinSock接口和网路编程 555
16.1 Windows Socket接口简介 556
16.2 Windows Socket接口的
16.2 使用 559
16.2.1 IP位址的转换 559
16.2.2 套接字 563
16.2.3 网路应用程式的一般
16.2.3 工作流程 566
16.2.4 监听、发起连线和
16.2.4 接收连线 569
16.2.5 数据的收发 572
16.2.6 一个最简单的TCP服务
16.2.6 端程式 575
16.3 TCP应用程式的设计 581
16.3.1 通信协定和工作执行绪
16.3.1 的设计 581
16.3.2 TCP聊天室例子——
16.3.2 伺服器端 591
16.3.3 TCP聊天室例子——
16.3.3 客户端 598
16.3.4 以非阻塞方式工作的
16.3.4 TCP聊天室客户端 606
16.3.5 其他常用函式 617
第17章 PE档案 621
17.1 PE档案的结构 621
17.1.1 概论 621
17.1.2 DOS档案头和DOS块 622
17.1.3 PE档案头(NT
17.1.3 档案头) 624
17.1.4 节表和节 629
17.2 导入表 644
17.2.1 导入表简介 644
17.2.2 导入表的结构 646
17.2.3 查看PE档案导入表举例 649
17.3 导出表 651
17.3.1 导出表的结构 652
17.3.2 查看PE档案导出表举例 655
17.4 资源 658
17.4.1 资源简介 658
17.4.2 资源的组织方式 659
17.4.3 查看PE档案中的资源
17.4.3 列表举例 662
17.5 重定位表 667
17.5.1 重定位表的结构 667
17.5.2 查看PE档案的重定
17.5.2 位表举例 670
17.6 套用实例 672
17.6.1 动态获取API入口地址 672
17.6.2 在PE档案上添加执行
17.6.2 代码 679
第18章 ODBC资料库编程 688
18.1 基础知识 688
18.1.1 资料库接口的发展历史 688
18.1.2 SQL语言 691
18.1.3 ODBC程式的流程 693
18.2 连线资料库 694
18.2.1 连线和断开资料库 694
18.2.2 连线字元串 700
18.3 数据的管理 703
18.3.1 执行SQL语句 703
18.3.2 执行结果的处理 708
18.3.3 获取结果集中的数据 710
18.3.4 事务处理 715
18.4 资料库操作的例子 717
18.4.1 结果集处理模组 718
18.4.2 例子的原始码 723
参考文献 734

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com