《Windows环境下32位汇编语言程序设计》 第二章笔记

在这里插入图片描述

Ml 的用法

Ml [/选项] 汇编源文件列表 [/link链接选项]
例:

Ml /c /coff /Cp Test.asm


Ml 的常用选项
选项简介
/c(常用)仅进行编译,不自动进行链接
/coff(必用)产生的obj文件格式为COFF格式
/Cp(常用)源代码区分大小写
/Fo filename指定输出的obj文件名
/Fe filename指定链接后输出的exe文件名
/Fl [filename]产生 .lst列表文件
/Gc函数调用类型用FORTRAN或PASCAL形式
/Gd函数调用类型用C语言形式
/Gz(常用)函数调用类型用StdCall形式
/I pathname指定include文件的路径
/link 选项指定链接时使用的选项
/Sc在列表文件中列出指令的时钟周期
/Zi增加符号调试信息

Link的用法

用Ml.exe 编译的COFF格式的obj文件可以用Link.exe链接成可执行PE文件
Link [选项] [文件列表]
例:

Ml /c /coff xx.asm
Link /subsystem:windows xx.obj yy.lib zz.res	(普通PE文件)
Link /subsystem:console xx.obj yy.lib zz.res 	(控制台文件)
Link /subsystem:windows /dll /def:aa.dif xx.obj yy.lib zz.res (DLL文件)
Link 的常用选项
选项简介
/Base:地址指定程序装入内存的基地址,一般PE文件默认的装入地址是0x400000处 ,dll文件装入0x10000000,用此选项可以修改这个默认值
/COMMENT:注释在PE文件的文件头后面加上文本注释,想在可执行文件中加入版权字符串可以用这个办法,如果字符串中包括空格,那么要在头尾加双引号
/DEBUG在PE文件中加入调试信息
/DEBUGTYPE:类型加入的调试信息类型,可以是CV 或 COFF
/DRIVER:类型链接Windows NT的WDM驱动程序时用,类型可以是WDM或者UPONLY
/DLL生成动态链接库文件时用
/DEF:文件名编写链接库文件时使用的def文件名,用来指定要导出的函数列表
/ENTRY:标号指定入口标号
/IMPLIB:文件名当链接有导出函数的文件时(如DLL)要建立的导入库名
/INCREMENTAL:ON/OFF是否增量链接,增量链接只重写可执行文件自上次链接后改动的部分,所以可以增加链接速度,但会增加文件长度
/LIBPATH:路径指定库文件的目录
/MACHINE:平台名称指定输出的可执行程序运行平台,可以是ALPHA,ARM,IX86,MIPS,MIPS16,PPC,SH3和SH4等
/MAP:文件名生成MAP文件
/OUT:文件名指定输出文件名,默认的扩展名是.exe,如果要生成其他文件名,如屏幕保护*.scr等,则在这里指定一个具体的文件名
/RELEASE填写文件头中的校验字段
/SECTION:节区,属性改变节区的属性,如exe文件中代码节区的属性通常是不可写的,用户也可以在这里将它设置为可写,属性可以是:E,R,W,S,D,K,L,P和X等
/STACK:尺寸设定堆栈尺寸
/STUB:文件名这是一个有趣的参数,Win32文件有个简单的DOS文件头,以便在DOS下执行时打出“必须在windows下执行”一类的消息,这部分称为DOS STUB,用户可以在这里指定用一个DOS可执行文件代替它,例如,用DOS的FDISK.EXE代替,那么程序在windows下运行的会时用户编写的代码,但在DOS下运行的就是FDISK.EXE
/SUBSYSTEM:系统名指定程序运行的操作系统,可以是NATIVE,WINDOWS,CONSOLE,WINDOWSCE和POSIX等
/VXD编写windows 95 VxD驱动程序时指定


注意:

  • 在使用Link的时候,/subsystem选项必须指定,一般为windows,当编写控制台程序的时候要改为console。写dll的时候要用/def指定列表定义文件,同时要指定列表定义文件,同时要指定/dll选项。

RC资源编译器的使用

资源编译器用来把资源脚本文件(*.rc)编译成资源文件(*.rec),MASM32 SDK 软件包中使用的是Visual C++附带的Rc.exe程序
Rc [选项] 资源脚本文件名



masm32 SDK软件包的安装目录说明
目录介绍
\masm32IDE环境、内带的文本编辑程序和模板生成程序等
\masm32\include所有的头文件,windows.inc 为数据结构和预定义值得定义文件,Resource.h为资源文件的头文件,其他的.inc文件为对应同名DLL文件中的API函数声明文件
\masm32\lib所有的导入库文件,每个.lib文件是对应DLL文件的导入库
\masm\bin可执行文件目录,里面包括Ml.exe,Link.exe和Rc.exe等
\masm\help帮助文件目录
\masm32\m32lib一些常用C子程序的汇编实现源程序,如熟悉的stdin和stdout等,有一定的参考价值
其他目录只要为例子和可用可不用的小工具,例子广泛收集自网上不同作者的作品,很有参考价值

nmake的用法

nmake [选项] [/f 描述文件名] [/x 输出信息文件名] [宏定义] [目标]

说明如下:

  • /f 参数——如果描述文件名不使用默认的makefile,可以用/f参数指定。
  • /x 参数——如果想把屏幕输出的信息存到一个文件夹中,可以用/x参数指定(用DOS下的管道操作符nmake > 文件名的方法无效)
  • 宏定义——可以用新的定义覆盖描述文件中的宏定义。
  • 目标——指定建立描述文件中描述的某个文件,如果上面的例子中默认是生成最后的text.exe文件,也可以用nmake.res指定更新x.res文件
nmake的常用选项
选项简介
/A不检测文件时间,强制更新所有文件
/B文件时间相等时也要更新文件
/Dmake时显示文件新旧信息
/N显示make时要执行的命令,但并不真正执行
/Pmake时显示详细的信息

描述文件的语法

# nmake工具的描述文件例子
EXE = Text.exe		   #指定输出文件
OBJS = x.obj y.obj	   #需要的目标文件
RES = x.res			   #需要的资源文件

Link_FLAG = /subsystem:windows	#链接选项
ML_FLAG = /c /coff				#编译选项

#定义依赖关系和执行命令
$(EXE): $(OBJS) $(RES)
	Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)
$(OBJS): Common.inc
y.obj:y.inc

#定义汇编编译和资源编译的默认规则
.asm.obj:
	ml $(ML_FLAG) $<
.rc.res:
	rc $<

#清除临时文件
clean:
	del *.obj
	del *.res


  • $@ ——全路径的目标文件
  • $* ——除去扩展名的全路径的目标文件
  • $? ——所有源文件名
  • $< ——源文件名(只能用在隐含规则中)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
××××××××××××××××××××××××××× × 《Windows环境32位汇编语言程序设计》 × × 附书代码说明 × ××××××××××××××××××××××××××× 1. 编译器和链接器 本附书代码全部采用 MASM 格式编写,推荐使用 MASM32 软 件包作为编译环境,MASM32 软件包可以在以下地址下载: MASM32官方站点: http://www.masm32.com 安装及开发的操作系统建议采用32位Windows 7,在64位操作系统 上安装 MASM32 软件包,安装生成的Lib文件可能不兼容。 安装完成以后请将本光盘根目录下的环境设置批处理文件Var.bat 拷贝到 Masm32\bin 目录下,并根据 MASM32 的安装位置编辑修改 Var.bat 文件中的相关目录名称。 2. 代码维护工具 每个例子都包括了描述编译、链接方法的 makefile 文件, 使用 nmake 工具可以自动根据此文件进行编译链接,nmake 工 具可以从 Visual C++ 的 bin 目录中找到,也可以从作者的网 站中下载。 3. 编译环境和编译方法 建议使用命令行方式进行编译,以编译 Chapter02\Test 目录中 Test.asm 为例,步骤是: I. 打开一个“命令提示符”窗口。 II. 进入环境设置批处理文件 Var.bat 所在目录并执行 它,以后就可以使用这个“命令提示符”窗口编译 文件了。 x: cd \masm32\bin var III. 进入源代码目录: cd \chapter02\test IV. 使用 nmake 工具进行编译链接: nmake V. 执行编译好的可执行文件。 如果需要对源代码进行修改,不必关闭“命令提示符”窗口, 只要切换到编辑器窗口,在修改 *.asm 文件后重复进行第 IV 和 第 V 步骤即可。 # 特别注意:将光盘中的代码拷贝到硬盘后,必须将文件的只读属性去除! 4. 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\HelloWorld ;Hello World Chapter04\FirstWindow ;用Win32汇编写第一个窗口 Chapter04\FirstWindow-1 ;用Win32汇编写第一个窗口 Chapter04\SendMessage ;窗口间的消息互发 Chapter04\SendMessage-1 ;窗口间的消息互发 Chapter05\Menu ;使用资源 - 使用菜单 Chapter05\Icon ;使用资源 - 使用图标 Chapter05\Dialog ;使用资源 - 使用对话框 Chapter05\Listbox ;使用资源 - 使用列表框 Chapter05\Control ;使用资源 - 使用子窗口控件 Chapter05\ShowVersionInfo ;使用资源 - 显示版本信息资源的程序 Chapter05\VersionInfo ;使用资源 - 使用版本信息资源 Chapter06\Timer ;定时器的使用 Chapter07\DcCopy ;在两个窗口的 DC 间互相拷贝屏幕 Chapter07\Clock ;模拟时钟程序 Chapter07\BmpClock ;用 Bitmap 图片做背景的模拟时钟程序 Chapter07\TestObject ;一些常见的绘图操作 Chapter08\CommDlg ;使用通用对话框 Chapter09\Toolbar ;使用工具栏 Chapter09\StatusBar ;使用状态栏 Chapter09\Richedit ;使用丰富编辑控件 Chapter09\Wordpad ;一个完整的文本编辑器例子 Chapter09\SubClass ;窗口的子类化例子 Chapter09\SuperClass ;窗口的超类化例子 Chapter10\MemInfo ;显示当前内存的使用情况 Chapter10\FindFile ;全盘查找文件的例子 Chapter10\FormatText ;文件读写例子 Chapter10\FormatText\FileMap ;使用内存映射文件进行文件读写的例子 Chapter10\MMFShare ;使用内存映射文件进行进程间数据共享 Chapter11\Dll\Dll ;最简单的动态链接库例子 - 编写 DLL Chapter11\Dll\MASM Sample ;最简单的动态链接库例子 - 使用 DLL Chapter11\Dll\VC++ Sample ;最简单的动态链接库例子 - 在VC++中使用汇编编写的DLL Chapter11\KeyHook ;Windows 钩子的例子 - 监听键盘动作 Chapter11\RecHook ;Windows 日志记录钩子的例子 - 监听键盘动作 Chapter12\Counter ;有问题的程序 - 一个计数程序 Chapter12\Thread ;用多线程的方式解决上一个程序的问题 Chapter12\Event ;使用事件对象 Chapter12\ThreadSynErr ;一个存在同步问题的多线程程序 Chapter12\ThreadSyn\UseCriticalSection ;使用临界区对象解决多线程同步问题 Chapter12\ThreadSyn\UseEvent ;使用事件对象解决多线程同步问题 Chapter12\ThreadSyn\UseMutex ;使用互斥对象解决多线程同步问题 Chapter12\ThreadSyn\UseSemaphore ;使用信号灯对象解决多线程同步问题 Chapter13\CmdLine ;使用命令行参数 Chapter13\Process ;创建进程的例子 Chapter13\ProcessList ;显示系统中运行的进程列表 Chapter13\Patch1 ;一个内存补丁程序 Chapter13\Patch2 ;一个内存补丁程序 Chapter13\Patch3 ;一个内存补丁程序 Chapter13\HideProcess9x ;Windows 9x下的进程隐藏 Chapter13\RemoteThreadDll ;用 DLL 注入的方法实现远程进程 Chapter13\RemoteThread ;不依靠任何外部文件实现远程进程 Chapter14\TopHandler ;使用筛选器处理异常 Chapter14\SEH01 ;最基本结构化异常处理例子 Chapter14\SEH02 ;改进后的结构化异常处理例子 Chapter14\Unwind ;异常处理中的展开操作例子 Chapter15\Ini ;使用 INI 文件 Chapter15\Reg ;操作注册表的例子 Chapter15\Associate ;操作注册表实现文件关联 Chapter16\TcpEcho ;实现 TCP 服务器端的简单例子 Chapter16\Chat-TCP ;用 TCP 协议实现的聊天室例子 Chapter17\PeInfo ;查看 PE 文件的基本信息 Chapter17\Import ;查看 PE 文件的导入表 Chapter17\Export ;查看 PE 文件的导出表 Chapter17\Resource ;查看 PE 文件的资源列表 Chapter17\Reloc ;查看 PE 文件的重定位信息 Chapter17\NoImport ;不使用导入表调用 API 函数 Chapter17\AddCode ;在 PE 文件上附加可执行代码的例子 Chapter18\OdbcSample ;用ODBC操作数据库的例子 Appendix A\EchoLine ;控制台输入输出的例子 Appendix B\MsgWindow01 ;消息机制试验 1 Appendix B\MsgWindow02 ;消息机制试验 2 Appendix B\MsgWindow03 ;消息机制试验 3 Appendix B\MsgWindow04 ;消息机制试验 4 Appendix C\BrowseFolder ;浏览目录对话框 6. 联系作者 虽然本书中所有的例子代码都已经在32位Windows 98、Windows 2000、 Windows XP、Windows Vista和Windows 7下测试通过,但也有存在Bug的可能,如果 发现代码存在错误或者有其它问题,请告知作者,联系方法: E-mail:luoyunbin@hotmail.com 感谢您的支持! 作者:罗云彬
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值