具体的选项设置与说明如下:
#/OPT:WIN98选项,设置文件对齐为0x1000,
# 但对于大文件,则不一定处理!(不确定性,由链接器自行决定)
#/MERGE:.rdata=.text选项,是将.rdata节合并到.text节
为了测试,写了个小汇编,代码:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db 'A MessageBox!',0
szText db 'Hello,World!',0
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NULL
end start
简单起见,写个了Makefile来编译,Makefile内容如下:
NAME=hello
OBJS=$(NAME).obj
#LINK_FLAG=/subsystem:windows /OPT:WIN98
LINK_FLAG=/subsystem:windows /MERGE:.rdata=.text
ML_FLAG=/c /coff
$(NAME).exe:$(OBJS)
link $(LINK_FLAG) $(OBJS)
.asm.obj:
ml $(ML_FLAG) $<
clean:
del *.obj
测试的效果OK!不过需要注意:
不能把.rsrc 节、.reloc 节或者.pdata 节合并到其它节中。 在Visual Studio .NET 之前, 你可以把.idata节合并到其它节中。 但是在 Visual Studio .NET 中, 这是不允许的。但在创建程序的发行版本时, 链接器自己却经常把部分的.idata节合并到其它节中,例如.rdata 节。
测试的文件见附件:
[file][attach]225[/attach][/file]