2012年7月5日星期四

ml.bat


此文记录我用微软的宏汇编编译程序的方法。

编译控制台程序的脚本:congsole.bat
@echo off
cd %cd%
taskkill /f /im:console.exe
rc me.rc >>error.txt
ml /coff /Cp /Zi /Zp4 console.asm /link /subsystem:console /DEBUG /DEBUGTYPE:CV /section:.text,rw /MERGE:.rdata=.text me.res >error.txt
del /q me.res
del /q console.obj

编译窗口程序的脚本window.bat
@echo off
cd %cd%
taskkill /f /im:windows.exe
rem rc rc.rc >error.txt
ml /nologo /coff /Cp /Zi /Zp4 windows.asm /link  /subsystem:windows /section:.text,rw /DEBUG /DEBUGTYPE:CV>>error.txt 
del /q me.res
del /q windows.obj

编译用户态动态链接库的user_dll.bat
@echo off
cd %cd%
del /q dll.dll > error.txt
rc me.rc >> error.txt
ml /c /coff dll.asm >> error.txt
link /dll /section:.bss,s /subsystem:windows dll.obj  /def:def.def /section:.text,rw /MERGE:.rdata=.text me.res >> error.txt
del /q me.res
del /q dll.obj
del /q dll.exp


编译内核模式的链接库的文件还没有做,应该会有的。


编译原生态程序的native.bat
@echo off
rc me.rc >error.txt
ml /Zp4 /nologo /c /coff native.asm  >>error.txt
link /nologo /base:0x10000 /align:32 /out:native.exe /subsystem:native native.obj /section:.text,rw /MERGE:.rdata=.text me.res>>error.txt
del /q me.res
del /q native.obj

编译驱动程序的sys.bat
@echo off
rem rc me.rc >error.txt
ml /nologo /c /coff /Zp4  sys.asm  >>error.txt
link /nologo /driver /base:0x10000 /align:32 /out:sys.sys /subsystem:native /section:.text,erw /MERGE:.rdata=.text sys.obj>>error.txt
del /q me.res
del /q sys.obj

编译驱动的另一种方式wdm.bat
ml /c /coff /Cp wdm.asm
link /subsystem:windows /driver:wdm /release /out:wdm.sys wdm.obj

注释:编译驱动(原生态程序,还有unicode程序)最好加上:/Zp4,这是内存的4字节对齐。相当于代码中处处使用指令align 4。
      代码节可写的设置:/section:.text,rw。
      合并代码节和资源节:/MERGE:.rdata=.text,还有其他的,可以减少文件的大小。
      文件的对齐大小:/align:16 为了在64位,window 7等环境下运行,这个最好不要。

      如果想产生调试信息,需如下设置:
      在ml中加入:/c /coff /Cp /Zi  还有个/Zd
      在link中加入:/DEBUG /DEBUGTYPE:CV

      还有连个选项:/VERSION:4.0 /INCREMENTAL:NO

没有评论:

发表评论