图解命令行手动编译构建一个win32汇编程序
2016-08-30 21:51
961 查看
首先安装masm32 V11.0;安装完后出现下列对话框;
图没截好;下面图的 k. 是 link. ;ktopPath是DesktopPath;
此段代码的含义是用WScript创建了一个快捷方式,指向刚安装的masm32的编辑器;快捷方式位于桌面;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/8d17c19cb13c3844c68090a58ab03b74)
下面来手动编译一个win32 汇编程序;
先建立环境变量如下;
新建;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/0f008f40ac624feefccb80ea7da12ec0)
新建;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/481c9c0d67946bba8ee1218964be56f2)
还有个lib变量也是新建;忘了截图;见后面代码;
Path中添加如下内容;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/d5d9dcf29afc2f7028ab9f888497e2d4)
未构建之前,有四个文件;一个图标,一个makefile,一个asm文件,一个rc文件;
手动命令行构建不需要makefile;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/388d4a06d0553cf2ab03078fdcb58004)
首先打下图命令编译;编译之后看到obj出来了;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/760966f4201415e23847674becab63dd)
打下图命令编译资源;成功后看到rc编译后的res文件出来了;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/5dc8909b8cb1545747b66320a3c338fc)
再打下图命令;链接;成功后看到exe出来了;这就是手动编译构建的全过程;
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/15/67756fab7a76ebee07ac524ab97ee3eb)
上述相关代码来自罗云琳书中代码;
var.bat;
@echo off
rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir=C:\Masm32
set include=%Masm32Dir%\Include;%include%
set lib=%Masm32Dir%\lib;%lib%
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
set Masm32Dir=
echo on
Test.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming >
; by 罗云彬, http://asm.yeah.net ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Test.asm
; 编程环境测试代码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Test.asm
; rc Test.rc
; Link /subsystem:windows Test.obj Test.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
includeINCLUDE2.inc
includelINCLUDE32.lib
include kernel32.inc
includINCLUDErnel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db '恭喜',0
szText db '当您看到这个信息的DB,您已经可以编译Win32汇编程序了!DB0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NUOFFSET>>>>>>>>OFFSET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
END
Test.rc
1 icon "Main.ico"
Makefile
EXE = Test.exe #指定输出文件
OBJS = Test.obj #需要的目标文件
RES = Test.res #需要的资源文件
LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项
$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
看下Makefile,makefile执行完后,会删除obj和res文件;而前面手动构建的情况,这两个文件还在;
图没截好;下面图的 k. 是 link. ;ktopPath是DesktopPath;
此段代码的含义是用WScript创建了一个快捷方式,指向刚安装的masm32的编辑器;快捷方式位于桌面;
下面来手动编译一个win32 汇编程序;
先建立环境变量如下;
新建;
新建;
还有个lib变量也是新建;忘了截图;见后面代码;
Path中添加如下内容;
未构建之前,有四个文件;一个图标,一个makefile,一个asm文件,一个rc文件;
手动命令行构建不需要makefile;
首先打下图命令编译;编译之后看到obj出来了;
打下图命令编译资源;成功后看到rc编译后的res文件出来了;
再打下图命令;链接;成功后看到exe出来了;这就是手动编译构建的全过程;
上述相关代码来自罗云琳书中代码;
var.bat;
@echo off
rem 请根据 Masm32 软件包的安装目录修改下面的 Masm32Dir 环境变量!
set Masm32Dir=C:\Masm32
set include=%Masm32Dir%\Include;%include%
set lib=%Masm32Dir%\lib;%lib%
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
set Masm32Dir=
echo on
Test.asm
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming >
; by 罗云彬, http://asm.yeah.net ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Test.asm
; 编程环境测试代码
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Test.asm
; rc Test.rc
; Link /subsystem:windows Test.obj Test.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
includeINCLUDE2.inc
includelINCLUDE32.lib
include kernel32.inc
includINCLUDErnel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szCaption db '恭喜',0
szText db '当您看到这个信息的DB,您已经可以编译Win32汇编程序了!DB0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke ExitProcess,NUOFFSET>>>>>>>>OFFSET>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start
END
Test.rc
1 icon "Main.ico"
Makefile
EXE = Test.exe #指定输出文件
OBJS = Test.obj #需要的目标文件
RES = Test.res #需要的资源文件
LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项
$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)
.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<
clean:
del *.obj
del *.res
看下Makefile,makefile执行完后,会删除obj和res文件;而前面手动构建的情况,这两个文件还在;
相关文章推荐
- (作业1)将一个简单的C程序编译成汇编代码,讨论计算机是如何工作的进行
- 使用javac命令行手动编译servlet小程序
- Win32汇编编译程序总结
- win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)
- 1.2.在linux环境实践,使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。并熟悉相关指令。
- 同一个程序在命令行下,编译为什么报错???难道命令行下不能进行导入包的操作???
- Win32汇编程序——一个窗口函数
- IOS开发:用命令行编译一个最简单的程序
- 手动编译连接汇编程序遇到的问题
- 【Linux】使用vim编写一个程序,gcc查看预处理、编译、汇编、链接过程
- VC编译下对一个超简单的缓冲区溢出程序的原理解析以及c程序的汇编分析
- 由空白win32工程起,手动设计一个窗口程序
- 编译一个汇编程序怎么居然折腾我如此....
- 一个完整win32汇编窗口程序的分析
- 利用纯汇编写一个WIN32的窗口程序
- Linux操作系统的简单指令及如何使用vim编写一个程序,然后使用gcc查看【预处理】、【编译】、【汇编】、【链接】各阶段文件的内容。
- 一个Win32程序的进化
- 在命令行下编译VC程序
- linux下命令行下编译c程序
- 如何在命令行下编译创建VC程序