(1)安裝masm5和vc 6.0(若使用windows32彙編程式設計)。
masm彙編器內部包含masm.exe,link.exe,lib.exe等檔案。該類彙編器一般不需要安裝,直接解壓後生成的資料夾複製到d盤,資料夾名稱為masm。
(2)建立乙個masmvar.bat檔案,內容如下。
@echo off
rem 請根據 masm32軟體包的安裝目錄修改下面的 masm32dir 環境變數!
set masm32dir=d:\masm
set include=%masm32dir%\include;c:\program files\microsoft visual studio\vc98\include;program files\microsoft visual studio\vc98\mfc\include;%include%
set lib=%masm32dir%\lib;%lib%
set w2k=%masm32dir%\incluse\w2k;%include\w2k%
set path=%masm32dir%\bin;%masm32dir%\include;%masm32dir%\include\w2k;%masm32dir%\lib;%masm32dir%;%path%
set masm32dir=f:\masmdir
echo on
(3)將windows系統中自帶的 命令提示符 應用建立到桌面快捷方式,雙擊進入,執行masmvar.bat,配置好相應的彙編環境。
其中.obj為目標檔案,.lst為列表檔案,.map為映像檔案,.exe為可執行檔案。
以下以編譯鏈結222.asm為例。
(1)編譯
masm 222.asm
object filename [222.obj]直接回車,生成222.obj鏈結檔案;
source list和cross-reference直接回車,不生成;
這樣,鏈結檔案222.obj就已經生成.
(2)鏈結
link 222.obj
直接回車,生成222.exe執行檔案
若我們的匯程式設計序中沒有定義堆疊段,會報link : warning l4021: no stack segment,它不會影響執行檔案的生成。
(3)除錯
生成正確的可執行檔案後,裝載222.exe進入除錯。
debug 222.exe
使用反彙編命令u命令檢視程式的反彙編並判斷程式的結束位址,如下圖:
u命令為反彙編命令,功能是反彙編32位元組,可以不帶引數也可以帶引數,引數為程式位址。
由圖可知程式結束位址為0014h,所以輸入"g 0014"命令執行該程式,執行結果如下圖:
g為執行命令,功能是從當前位址一直執行到g命令給出的結束位址。
即可以讓程式執行到222.exe dos功能呼叫。此時可以檢視所有暫存器的值。
這時也可以使用r命令,檢視暫存器的值,如下圖:
r命令為讀暫存器命令,可不帶引數顯示所有暫存器的值及標誌位狀態,也可帶暫存器名的引數顯示該暫存器的值,注意該暫存器引數可以為段暫存器(cs,ds,es,ss)、標誌暫存器(fr)、16位通用暫存器(ax,bx,cx,dx,si,di,sp,bp),但不允許為8位通用暫存器。
由圖可知,存放結果的資料段 段首址為1467h,偏移量為0000h,即程式結果放入到1467:0000的位元組單元,所以使用d命令檢視結果,如下圖:
如上圖,記憶體位址14660000~14660001處的內容0x68ac,即為計算結果。
檢視完結果,直接使用q命令退出debug。
組合語言程式格式
組合語言源程式中的每個語句可以由四項組成,格式如下 name operation operand comment 其中 名字項 name 是指乙個標號或變數。操作項 operation 是乙個操作碼的助記符,它可以是指令 偽指令或巨集指令名。運算元項 operand 由乙個或多個表示式組成,它提供為...
組合語言 子程式
舉例 子程式呼叫指令call 格式為 call 子程式名 call相當於jmp 子程式名 相當於 標號 子程式執行完返回到call下一句的語句執行 在子程式中用ret 返回 子程式名proc屬性 far,near 子程式名 endp 如果主程式是被執行的第乙個程式,屬性應為far 主程式 let0 ...
組合語言 AT T組合語言
這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...