Ml 的用法
Ml [/选项] 汇编源文件列表 [/link链接选项]
例:
Ml /c /coff /Cp Test.asm
选项 | 简介 |
---|---|
/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文件)
选项 | 简介 |
---|---|
/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 | IDE环境、内带的文本编辑程序和模板生成程序等 |
\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文件
选项 | 简介 |
---|---|
/A | 不检测文件时间,强制更新所有文件 |
/B | 文件时间相等时也要更新文件 |
/D | make时显示文件新旧信息 |
/N | 显示make时要执行的命令,但并不真正执行 |
/P | make时显示详细的信息 |
描述文件的语法
# 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
- $@ ——全路径的目标文件
- $* ——除去扩展名的全路径的目标文件
- $? ——所有源文件名
- $< ——源文件名(只能用在隐含规则中)