分享
琢石成器——Windows环境下32位汇编语言程序设计.pdf
下载文档

ID:2365093

大小:5.71MB

页数:753页

格式:PDF

时间:2023-05-08

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
成器 Windows 环境 32 汇编语言 程序设计
微软 MVP 作品系列 琢石成器Windows 环境下 32 位 汇编语言程序设计 蔡继文 编著 北京BEIJING Publishing House of Electronics Industry 内 容 简 介 Windows 环境下 32 位汇编语言是一种全新的编程语言。它使用与 C+语言相同的 API 接口,不仅可以开发出大型的软件,而且是了解操作系统运行细节的最佳方式。本书从编写应用程序的角度,从“Hello,World!”这个简单的例子开始到编写多线程、注册表和网络通信等复杂的程序,通过 70 多个实例逐步深入 Win32 汇编语言编程的方方面面。本书作者罗云彬拥有十余年汇编语言编程经验,是汇编编程网站 http:/ 的创办者。本书是作者多年来编程工作的总结,适合于欲通过 Win32 汇编语言编写 Windows 程序的读者。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据 琢石成器:Windows 环境下 32 位汇编语言程序设计罗云彬著.北京:电子工业出版社,2009.6 ISBN 978-7-121-08663-2 I.琢 .罗 .汇编语言程序设计 .TP313 中国版本图书馆 CIP 数据核字(2009)第 059467 号 责任编辑:李 冰 印 刷:北京东光印刷厂 装 订:三河市皇庄路通装订厂 出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编 100036 开 本:7871092 1/16 印张:47.25 字数:1030 千字 印 次:2009 年 6 月第 1 次印刷 印 数:4000 册 定价:89.00 元(含光盘 1 张)凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。服务热线:(010)88258888。III 前 言 从 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+方便。但是我们可以这样问一问自己:IV 问:在 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 汇编 以往的汇编书籍往往把重点放在硬件结构和指令上,讲述了一大堆电路框图和指令列 V 表,把大家搞得晕晕乎乎后,再举出一些重量级的例子,不是一些像数组、矩阵计算一类的复杂运算,就是开始图形模式画图,以至于大家看完以后就再也找不到北了!实际上,这些例子不是太难了,而是太枯燥了。有人说,学汇编就像考大学,千军万马过独木桥,太多的人中途放弃了,只有少数人坚持到最后。笔者认为:学习汇编应该在轻松的环境下进行,在学习中使用的例子不一定太复杂,但一定要有吸引力。用汇编写复杂的运算程序固然会比 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 汇编来解决大部 VI 分编程需求,中间也经过了很长时间的摸索和大量的挫折,所以笔者很清楚初学者在哪些地方会遇到问题,但是涉及 Win32 汇编的书籍却实在太少了。正是因为如此,笔者决心把本书的目标定为:能让读者入门并在最后能熟练掌握 Win32 汇编编程,而不是那种深入系统奥秘一类的书籍。从这个目标出发,本书的选材中尽量去掉已经有其他书籍详细讨论的部分,因为要一本书涉及全部方面是不现实的。内容全面就必然不精,内容深刻就必须围绕一个中心点,所以本书的内容并不详细讨论一般汇编教材的基础部分,如处理器结构和保护模式等,也不准备涉及 Windows 驱动程序、COM 编程或者其他能够冠以“密技”头衔的内容。本书主要的内容将放在 32 位宏汇编对比 DOS 汇编所不同的部分,以及 Win32 应用程序的汇编实现上。不求全面,只求精

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开