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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章