Jack架設WIN32彙編程式的開發環境
標 題: Jack架設WIN32彙編程式的開發環境
作 者: Jack Yang
時 間: 2007-02-25 15:18
1. 下載並安裝Ultraedit
http://www.ultraedit.com/
我安裝的版本是12.20b+1官方中文版,安裝路徑不重要。
2. 下載並安裝MASM
我安裝的是Version 9,安裝路徑為:D:/masm32
3. make工具
http://211.90.241.130:22366/view.asp?file=53
壓縮包中有兩個make工具
nmake.exe是Microsoft (R) Program Maintenance Utility Version 1.50
make.exe是MAKE Version 4.0 Copyright (c) 1987, 1996 Borland International
這兩個make工具所支援的Makefile語法和常用的選項大同小異。
把nmake.exe和make.exe解壓到Masm32安裝目錄的bin子目錄下。
4. 編寫一個用於設定環境變數的批處理檔案var.bat
檔案的內容如下:
@echo off
rem 請根據 Masm32 軟體包的安裝目錄修改下面的 Masm32Dir 環境變數!
set Masm32Dir=D:Masm32
set include=%Masm32Dir%Include;%include%
set lib=%Masm32Dir%lib;%lib%
set path=%Masm32Dir%Bin;%Masm32Dir%;%PATH%
echo on
rem 請根據 Masm32 軟體包的安裝目錄修改下面的 Masm32Dir 環境變數!
set Masm32Dir=D:Masm32
set include=%Masm32Dir%Include;%include%
set lib=%Masm32Dir%lib;%lib%
set path=%Masm32Dir%Bin;%Masm32Dir%;%PATH%
echo on
每開啟一個新的命令列控制檯,就要執行一次var.bat檔案。
省力的做法是把環境變數新增到使用者變數,或系統變數中去。
可以使用下列命令檢視環境變數的設定情況:
C:/>echo %include%
C:/>echo %lib%
C:/>echo %path%
5. 編寫makefile
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
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
需要注意的地方:
1) nmake預設將Makefile檔案的第一條規則中的目標檔案作為最終檔案。例子中的最終檔案就是Test.exe
2) 引用EXE或OBJS這些巨集時一定要加上括號,如:$(EXE)、$(OBJS) 、$(RES)
3) makefile的換行符是“/”,“/”後面不能再加上其它字元,包括註釋和空格
4) 隱含規則中幾個用來指定檔名的特殊預定義巨集
$@ - 目標檔案的全路徑檔名
$* - 目標檔案的除去副檔名的全路徑檔名
$? - 所有原始檔(依賴檔案)的檔名
$< - 原始檔(依賴檔案)的檔名
5) 顯式規則的定義格式:
目標檔案 : 依賴檔案
命令
目標檔案 : 依賴檔案
命令
6) 隱含規則的定義格式:
.源副檔名.目標副檔名:
命令
.源副檔名.目標副檔名:
命令
用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檔案)
6. 執行nmake.exe
nmake的常用選項如下:
/? 顯示幫助資訊
/f 指定描述檔案(makefile)的檔名
/x 把螢幕輸出的資訊存到一個檔案中
/a 強制更新所有檔案
/b 檔案時間相等時也要更新檔案
/d make時顯示檔案新舊資訊
/n 顯示make時要執行的命令,但並不真正執行
/p make是顯示詳細的資訊
巨集定義 用新的定義覆蓋描述檔案(makefile)中的巨集定義
目標 指定建立描述檔案(makefile)中描述的某個檔案
如:
make clean
用於清除編譯過程中產生的臨時檔案,即執行del *.obj和del *.res兩條命令;
make test.obj
只編譯test.asm生成test.obj檔案;
make test.res
只編譯test.rc生成test.res檔案;
如:
make clean
用於清除編譯過程中產生的臨時檔案,即執行del *.obj和del *.res兩條命令;
make test.obj
只編譯test.asm生成test.obj檔案;
make test.res
只編譯test.rc生成test.res檔案;
Win32彙編程式的開發除錯過程:
編譯源程式->切換到MS-DOS視窗->鍵入nmake編譯->執行生成的可執行檔案->切換到文字編輯器修改源程式........如此迴圈往復除錯程式。
參考資料:
羅雲彬的《Windows環境下32位組合語言程式設計》(第二版)第二章
相關文章
- Jack's第一個Win32彙編程式HelloWorldWin32
- 彙編程式開發環境搭配開發環境
- Jack整理的Win32彙編基礎知識Win32
- 彙編環境配置
- win32下彙編程式碼結構學習Win32
- 編譯環境 Golang開發環境 vscode+git編譯Golang開發環境VSCodeGit
- Linux 開發環境 -- C/C++開發環境編譯安裝Linux開發環境C++編譯
- 編寫開發環境很難嗎開發環境
- Python程式碼編輯器和整合開發環境有哪些?Python開發環境
- qgroundcontrol開發環境搭建原始碼編譯開發環境原始碼編譯
- 彙編學習小記(一)-熟悉DEBUG環境
- STM彙編程式設計程式設計
- WSL設定php開發環境PHP開發環境
- 程式設計新手最好別依賴整合開發環境程式設計開發環境
- emacs開發環境配置(4)——rust開發環境Mac開發環境Rust
- Python的開發環境Python開發環境
- 配置開發環境、生成環境、測試環境開發環境
- 打造一個好用的 Windows 程式設計環境 2.程式設計環境Windows程式設計
- Win11開發環境設定開發環境
- Jack對分支迴圈語句偽指令反彙編前後的比較
- 微信小程式開發系列(一) :開發環境搭建和微信小程式的檢視設計與開發微信小程式開發環境
- 全志A40i開發板編譯環境的搭建編譯
- RK3288 Linux SDK 編譯開發環境搭建Linux編譯開發環境
- 微信程式開發系列教程(一)開發環境搭建開發環境
- 開發環境的 Ubuntu Desktop 18.04LTS 開發環境配置備忘開發環境Ubuntu
- java程式設計環境Java程式設計
- Java環境下載、配置環境、編寫我的第一個Java程式Java
- 基於Gulp小程式開發工作流,區分開發環境和生產環境開發環境
- 搭建vue的開發環境Vue開發環境
- 小程式雲開發模板和環境快速開通的方法
- STM32彙編程式設計程式設計
- 一、開發環境開發環境
- 開發環境配置開發環境
- PHP開發環境PHP開發環境
- Flutter開發入門之開發環境搭建(VSCode搭建Flutter開發環境)Flutter開發環境VSCode
- python下多環境開發(虛擬環境)Python
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- 自建 Laravel 的 Docker 開發環境LaravelDocker開發環境