Fasm---Win32汇编学习2

本文介绍了如何使用FASM(Flat Assembler)编写一个简单的Windows程序,该程序会在运行时弹出显示'Win32 fasm'的消息框。文章讲解了Windows API、动态链接库(DLL)的工作原理,以及如何在FASM中包含和调用DLL函数。同时,讨论了ANSI和UNICODE字符集在API中的应用,并展示了FASM程序的基本框架。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            FASM--Win32汇编学习2

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

理论:

    Windows 为我们编程人员提供了大量的资源。其中最重要的就是Windows API (Application  Programming Interface)。Windows API

是一组强大的函数。它们本身驻扎在Windows中供人们随时使用。这些函数大部分被包含在几个动态链接库中,譬如 “Kernel32.dll”, “user32.dll”, “GDI32.DLL”,Kernel32.dll 中的函数主要供我们处理内存管理和进程调度。user32.dll中的函数主要供我们控制用户界面。GDI32.DLL中的函数主要供我们处理图形方面。除了以上这3个动态链接库,你可以包含其他的动态链接库中的函数。当然你必须要有足够的这些动态链接库的资料。

 

   动态链接库,顾名思义,这些API的代码本身不包含在Windows可执行文件中,而是在使用时才被加载。为了让应用程序在运行的时候找到这些函数。就必须首先把有关重定位的信息嵌入到可执行文件中。这些信息存在引入库中。由链接器在链接程序的时候将相关信息找出嵌入到可执行文件中。

我们FASM是通过宏来构建引入表的,所以我们需要自己通过Fasm的提供宏来包含相关的DLL和引入相应的函数。

当我们的应用程序在被加载时,PE Loader会读取相应引入表结构的成员来绝对能够读入的DLL,和相应DLL中的函数,最后将DLL加载到内存后,然后将相应的函数地址重定位,以便我们调用函数。

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

这也是为了增加UNICODE的原因。在大多数情况下,我们都可以包含一个头文件,在其中定义一个宏,然后在实际调用函数的时候就不用在函数名称后面加“A”和“W”字符了。


<#ifdef UNICODE

#define fool() foolW()

#else

#define fool()

#endif

>

 

先来个FASM的框架

format  PE  GUI 4.0

entry  start

section  '.data'  data  readable

 

section  '.import' import  data readable   writeable

 

section  '.code'  code  readable  executable

    start:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值