MASM32的使用

最近在學習SEH的東西,所以需要用到彙編,我下載了masm32.

解壓後是個安裝文件,直接安裝即可,安裝成功後運行qeditor,進入MASM的集成開發環境。

1.創建新文件:File->New,編輯代碼,保存成***.asm的文件即可。

2.編譯源文件:Project->Assemble Asm File,彙編結束後會出現一個txt的結果文檔,如果有錯,可以根據相應的結果進行調試然後在進行彙編,此步會產生***.obj文件。

3.連接:Project->Link Obj File,鏈接2步驟中產生的Obj文件,產生exe文件。

4.運行:Project->Run Program,運行程序。


附註:Masm32語法問題[1]:

.386
.model flat,stdcall
option casemap:none

.model flat代表在執行如下僞指令:
assume cs:FLAT,ds:FLAT,ss:FLAT,es:FLAT,fs:ERROR,gs:ERROR
所以在使用fs,gs之前要
assume fs:nothing,gs:nothing

函數聲明
MessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword

定義全局變量
xx db ?
yy db 'hello',0
zz db 100 dup(1,2) ;重複100次
;db也可用dw,dd,dq,dt,byte,word,dword,qword,tbyte,sbyte,sword,sdword,real4,real8,real10定義

定義局部變量:變量名[\[<重複次數>\]]:類型
local local[1024]:byte

函數模版
mov edi,edi
push ebp
mov ebp,esp
pushad
...
popad
mov esp,ebp
pop ebp
ret xxx

MASM標號特點,兩個jmp都跳到@@處
jmp @F
@@
jmp @B

定義結構:
sname struct
item1 dword ?
item2 dword ?
...
sname ends

結構使用:
arg1 sname <1,1,...>

mov eax,arg1.item1     ;跟下面的幾種方法效果一樣

mov esi,offset arg1
mov ebx,[esi + sname.item1]

assume esi:ptr sname
mov ecx,[esi].item1
assume esi:nothing


;下面的可以當成指針的強制轉換
mov esi,val
assume esi:ptr EXCEPTION_RECORD

;下面的可以當成C語言中指針所指的內容
[esi] ;相當與*esi


sizeof    <變量名|類型名>           ;取得所佔字節大小
lengthof <變量名>                  ;變量所有元素的個數
offset    <全局變量名>              ;取得變量地址,編譯時能確定的全局變量地址,一般在數據節
addr      <全局變量名|局部變量名>   ;全局變量同offset;用lea取得局部變量地址,存入eax,用eax做返回值

所以invoke的時候有addr的參數時候若要用eax做參數,eax必須最先入棧

定義函數
子程序名 proc [ NEAR | FAR | NEAR16 | NEAR32 | FAR16 | FAR32 ] [ StdCall | C | SysCall | BASIC | FORTRAN | PASCAL] [ PRIVATE | PUBLIC | EXPORT ] [USES 寄存器列表] [,變量名:類型] [VARARG]
;VARARG說明函數後面可以跟多個參數,若用在StdCall中要調用者清棧.且只能在StdCall,C,SysCall中使用.
...
子程序名 endp


.if
.elseif
...
.else
.endif

CARRY? OVERFLOW? PARITY? SIGN? ZERO?

.while <條件表達式> ;爲真循環
...
.break
[.continue]
.endw

.repeat
...
.break
[.continue]
.until <條件表達式> ;爲假循環
;.untilcxz [條件表達式]

********************參考文獻***************************

[1]:MASM32語法總結

http://hi.baidu.com/litandy/blog/item/0fd902f69e647d28730eec58.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章