文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院工具软件其它软件Win32 ASM详解 二. 消息框
精品推荐
特别推荐
·文件比较大练兵
·不需要任何软件也能阅读Adobe PDF文章
·大智慧股票软件Level-2入门手册
·怎样汉化软件
·卸载软件完全手册 将清除进行到底
·所有的文件格式介绍
·灵图小小桌面地图赢得150万网友争相下载
·金山词霸2003新增功能及使用技巧
·虚拟个200X的光驱让游戏玩的更畅快
·手机秘籍连载
·如何在IE右键菜单中添加菜单项以及如何添加IE任务栏按钮
·所见即所得 随心所欲修改MSN
·各领域下最好的一些免费软件(翻译)
·预防软件使用中容易造成的硬盘六大“硬伤”
·清除办公系统垃圾文件步步通
·为NTFS、FAT分区制作NT和Win2k启动盘
·注册是这样产生的 幻影加密系统简介
·拒绝影响工作效率 硬盘垃圾文件大清扫
热点TOP10
·大智慧股票软件Level-2入门手册
·慧眼识金 四款智能选股软件显身手
·暑期英语学习之单词工具篇
·用上帝之眼看世界:卫星地图全攻略
·密码破解: 三大神器助您一臂之力
·同花顺2008软件评测之公式选股篇
·Camtasia Studio轻松录制教学片
·EASYTODO外贸业务管理系统
·让文本框具有四则运算功能
·怎样汉化软件
·各领域下最好的一些免费软件(翻译)
·十进制数怎样转成十六进制数?
·将PDF文件转换为TXT文件
·镜像文件编辑制作的新利器—ISO Commander
·Barts PE Builder打造系统维护光盘
·桌面革命 360Desktop软件扩展视野
·同花顺导航者之个股策略篇
·同花顺2008评测之绘图曲线分析篇
·同花顺2008评测之智能分析选股篇
·苹果大范围测试Mac OS X 10.5.3

Win32 ASM详解 二. 消息框

日期:2005年4月24日 作者:清风网络学院 查看:[大字体 中字体 小字体]


在本课中,我们将用汇编语言写一个 Windows 程序,程序运行时将弹出一个消息框并显示"Win32 assembly is great!"。

例子

理论:

Windows 为编写应用程序提供了大量的资源。其中最重要的是Windows API (Application Programming Interface)。 Windows API是一大组功能强大的函数,它们本身驻扎在 Windows 中供人们随时调用。这些函数的大部分被包含在几个动态链接库(DLL)中,譬如:kernel32.dll、 user32.dll 和 gdi32.dll。 Kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。除了上面主要的三个动态链接库,您还可以调用包含在其他动态链接库中的函数,当然您必须要有关于这些函数的足够的资料。

动态链接库,顾名思义,这些 API 的代码本身并不包含在 Windows 可执行文件中,而是当要使用时才被加载。为了让应用程序在运行时能找到这些函数,就必须事先把有关的重定位信息嵌入到应用程序的可执行文件中。这些信息存在于引入库中,由链接器把相关信息从引入库中找出插入到可执行文件中。您必须指定正确的引入库,因为只有正确的引入库才会有正确的重定位信息。

当应用程序被加载时 Windows 会检查这些信息,这些信息包括动态链接库的名字和其中被调用的函数的名字。若检查到这样的信息,Windows 就会加载相应的动态链接库,并且重定位调用的函数语句的入口地址,以便在调用函数时控制权能转移到函数内部。

如果从和字符集的相关性来分,API 共有两类:一类是处理 ANSI 字符集的,另一类是处理 UNICODE 字符集的。前一类函数名字的尾部带一个"A"字符,处理UNICODE的则带一个"W"字符(我想"W"也许是代表宽字符的意思吧)。我们比较熟悉的ANSI字符串是以 NULL 结尾的一串字符数组,每一个ANSI字符是一个 BYTE 宽。对于欧洲语言体系,ANSI 字符集已足够了,但对于有成千上万个唯一字符的几种东方语言体系来说就只有用 UNICODE 字符集了。每一个 UNICODE 字符占有两个 BYTE 宽,这样一来就可以在一个字符串中使用 65336 个不同字符了。

这也是为什么引进 UNICODE 的原因。在大多数情况下我们都可以用一个包含头文件,在其中定义一个宏,然后在实际调用函数时,函数名后不需要加后缀"A"或"W"。
<译者注:如在头文件中定义函数foo();
#ifdef UNICODE
#define foo() fooW()
#else
#define foo() fooA()
#endif
>

例子:

我先把框架程序放在下面,然后我们再向里面加东西。

.386
.model flat, stdcall
.data
.code
start:
end start

应用程序的执行是从 END

ExitProcess proto uExitCode:DWORD

上面一行是函数原型。函数原型会告诉编译器和链接器该函数的属性,这样在编译和链接时,编译器和链接器就会作相关的类型检查。 函数的原型定义如下:

FunctionName PROTO [ParameterName]:DataType,[ParameterName]:DataType,...

简言之,就是在函数名后加伪指令PROTO,再跟一串由逗号相隔的数据类型链表。在前面的 ExitProcess 定义中,该函数有一个 DWORD 类型的参数。当您使用高层调用语句 INVOKE 时,使用函数原型定义特别有用,您可以简单地认为 INVOKE 是一个有参数类型检查的调用语句。譬如,假设您这样写:

call ExitProcess

若您事先没把一个DWORD类型参数压入堆栈,编译器和链接器都不会报错,但毫无疑问,在您的程序运行时将引起崩溃。但是,当您这样写:

invoke ExitProcess

连接器将报错提醒您忘记压入一个 DWORD 类型参数。所以我建议您用 INVOKE 指令而不是CALL去调用一个函数。INVOKE 的语法如下:

INVOKE expression [,arguments]

expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。大多数API函数的原型放在头文件中。 如果您用的是 hutch 的 MASM32,这些头文件在文件夹MASM32/include 下, 这些头文件的扩展名为 INC,函数名和 DLL 中的函数名相同,譬如:KERNEL32.LIB 引出的函数 ExitProcess 的函数原形声明于kernel.inc中。您也可以自己声明函数原型。 在我的教学课程中都使用 hutch 的windows。inc,这些头文件您可以从http://win32asm.cjb.net下载。

好,我们现在回到ExitProcess 函数,参数uExitCode 是您希望当您的应用程序结束时传递 Windows 的。 您可以这样写:

invoke ExitProcess,0

把这一行放到开始标识符下,这个应用程序就会立即退出 Windows,当然毫无疑问个应用程序本身是一个完整的 Windows 程序。

.386

[1] [2] [3] 下一页 




上一篇:Win32 ASM详解 一. 基本概念

下一篇:Win32 ASM详解 三. 创建简单的窗口

Win32 ASM详解 二. 消息框 相关文章:
·局域网文件共享详解
·BIOS详解
·图文详解 Windows 2003服务器集群安装
·注册表知识:HKEY_LOCAL_MACHINE根键详解
·Linux常用命令详解
·基础知识 初级黑客安全技术命令详解
·Linux/Unix环境下的make命令详解
·图文详解:如何调整光驱激光头功率
·反恐精英CS服务器架设详解
·WinXP中常见网络与安全服务详解
Win32 ASM详解 二. 消息框 相关软件:
·孙鑫VC++从入门到精通开发详解视频教程FLASH版
·AutoCAD2002入门与实例详解
·硬盘分区与格式化详解
·TCP-IP详解卷2:实现
·同等学力3月29日英语模考试题详解
·TCP-IP详解卷1:协议
·围棋定式详解
·MBA英语语法-词性详解
·网络端口详解
·TOEFL【语法 听力 阅读】最新全真题详解

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot