📄 002.txt
字号:
/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,MIPSR41XX,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驱动程序时指定
由表2.3可见,Link的选项远比MASM要复杂,但并不是所有的选项都是频繁使用的,编写普通的Win32可执行文件时,必须用的选项只有/subsystem一个,其他的都可以用默认值。
一般来说,用MASM编译和链接一个Win32汇编源程序常用的命令是:
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.def xx.obj yy.lib zz.res (DLL文件)
在Ml中使用/c选项表示只生成obj文件而不是直接产生exe文件,原因是链接的时候可能需要指定资源文件,所以不能让Ml直接用默认的方式链接;/coff选项是必需的,因为链接器只支持COFF格式的obj文件,其他的选项如/Cp和/Gz虽然也是必需的,但是可以在asm源文件中用伪定义设置,所以一般不在命令行中指定,以免遗漏。
使用Link的时候,/subsytem选项必须被指定,一般指定为windows,当编写控制台程序的时候要改为console,写dll的时候要用/def指定列表定义文件,同时要指定/dll选项。其他的一些参数如/stub,/section和/base等只在编写特殊用途的程序时才使用。
2.2.2 TASM系列
1. TASM的用法
TASM是Borland公司推出的汇编编译器,也是一种使用很广泛的编译器,和MASM相比,TASM的升级没有这么频繁。TASM早在1.0版本就有了对80386处理器指令的完全支持(MASM要到5.0版本才支持80386指令),1989年推出的1.01版本修正了1.0版的一些错误;早期的版本还有TASM 3.0和TASM 4.0,其中4.0版是TASM系列编译器编写DOS程序使用最广泛的版本。
到目前为止,TASM的最后一个版本是5.0版,这个版本支持Win32编程,并单独为Win32编程附带有一整套的32位程序:32位的编译器TASM32.EXE、链接器TLINK32.EXE和资源编译器BRC32.EXE。与这些32位程序对应的16位工具在软件包中依然存在,文件名为TASM.EXE,TLINK.EXE和BRC.EXE等。
TASM 5.0命令行的使用方法是:
TASM32 [选项] 源文件名[,[目标文件名],[列表文件名],[索引文件名]][;]
在Win32编程时TASM的常用选项如表2.4所示。
表2.4 TASM 5.0的常用选项
选 项
简 介
/ml,/mx,/mu
对大小写是否敏感:ml=全部敏感,mx=全局变量大小写敏感,mu=不敏感,Win32编程中必须用ml选项
/m#
允许第#次编译扫描时可以向前引用,一般使用/m2
/i路径
设定include文字所在的路径
/l,/la
lst文件的格式:/l为正常格式,/la为扩充格式
/zi,/zd,/zn
符号调试信息的控制:/zi为全部,/zd为仅有行号,/zn为不产生调试信息
TASM和MASM之间的导入库和目标文件等不能通用,程序员无法用Microsoft的链接器来链接TASM产生的obj文件,反之亦然,这是因为TASM的库文件和obj文件一直是OMF格式,与Microsoft使用的COFF格式不兼容。
TASM不是免费软件,无法从Borland的网站上直接下载,但在网上随处可以找到TASM 5.0版本的下载链接,Borland网站中仅提供了5.0版本到5.0r版本的升级包,升级包的下载地址是:
http://www.borland.com/borlandcpp/cppcomp/tasmfact.html
2. TLINK的用法
与TASM32.exe配合的链接器为TLINK32.exe,它的用法是:
TLINK32 选项 目标文件列表,输出文件,map文件,库文件,def文件,资源文件
指定这些文件名的时候,中间必须用逗号隔开,如果不想指定某个文件名,可以在逗号中间留空,TLINK32的常用选项如表2.5所示,注意,TASM32的选项是用斜杠开头, TLINK32的选项却用减号开头。
表2.5 TLINK32的选项
选 项
简 介
-c
链接时区分大小写
-B:xxxx
指定可执行文件装入内存的基地址
-Txx
输出文件类型,-Tpe表示输出PE类型的exe文件,-Tpd表示输出PE类型的dll文件
-ax
文件类型,-aa表示使用Windows API,-ap表示使用兼容代码
-v
在输出文件中包括调试信息
下面是用TASM编译和链接一个Win32汇编源程序的常用命令:
TASM32 /ml /m2 xx.asm
TLINK32 /Tpe /aa /c xx.obj,,,yy.lib,,zz.res (普通PE文件)
TLINK32 /Tpd /aa /c xx.obj,,,yy.lib,aa.def,zz.res (DLL文件)
Windows API区分大小写,所以TASM32的/ml和TLINK32的-c选项必须指定,TLINK32中的-Tpe和-aa选项也必须指定,否则链接出来的就不是Win32可执行文件了。其他的选项如调试信息等则可以根据需要选择使用。
2.2.3 其他编译器
除了MASM和TASM这两种主流的汇编编译器,汇编编程中还可以用到一些其他的编译器,这些编译器大部分是免费的,如表2.6所示。
表2.6 常用汇编编译器列表
编 译 器
简 介
支持编程
NASM
Netwide/National Assembler,开放源代码的免费软件,使用传统的Intel语法
DOS,Win32,Linux
FASM
支持8086-80486/Pentium/MMX/SSE/SSE2指令,16/32位代码
DOS,Win32
SpAsm
Specific Assembler,用于ReactOS/Win32的汇编编译器,有简化的语法和宏指令,自带IDE环境
Win32
VisualASM
附带IDE环境
Win32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -