关于使用MASM的技巧

Win32 API的调用
参考《Microsoft Win32 Programmer's Reference》
____________________________________________________________________
例如调用messagebox
原型如下MessageBox proto hwnd:dword,lptext:dword,lpCaption:dword,uType:dword
(MessageBox proto :dword,:dword,:dword,:dword 效果同上)
调用:
push uType
push lpCaption
push lpText
push hWnd
call MessageBox

简单的invoke语句
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
如果参数数量和声明不符,会报错
error A2137:too few arguments to INVOKE
返回值在EAX中,如果EAX无法容纳,则EAX中是一个缓冲区地址.
_____________________________________________________________________

MASM关于标号@@
_____________________________________________________________________

防止过多的标号起名代来不便可以用@@,@F,@B来控制

cmp flag,1
jz @F
mov cx,1000h
@@:

loop @B

@F是向后跳,@B是向前跳,他们只找到最近的@@,所以最好@@与跳转指令的距离限制在同一屏
______________________________________________________________________

MASM的伪指令assume
______________________________________________________________________

mov esi,offset stWndClass
assume esi:ptr WNDCLASS
mov eax,[esi].lpfnwndproc
……
assume esi:nothing

______________________________________________________________________

MASM获区变量地址
______________________________________________________________________

对于全局变量

mov 寄存器,offset 变量名

对于局部变量

lea eax,[ebp-4]

但是无法在invoke中用,所以有这个addr伪指令
addr 局部变量或全局变量
只能用在invoke中

invoke test,eax,addr szHello
;反编译后
lea eax,[ebp-4]
push eax ;参数2 addr szHello
push eax ;参数1 eax
call test

可以看出参数1的eax被覆盖了,所以在invoke中用到addr时,左侧不能用到eax
不小心用到了MASM会报错: error A2133:register value overwritten by INVOKE
_____________________________________________________________________

关于变量和函数的命名
_____________________________________________________________________

"匈牙利表示法"格式是类型前缀加上变量的说明.
b 表示 byte
w 表示 word
dw 表示dword
h 表示句柄
lp 表示指针
sz 表示以0结尾的字符串
lpsz 表示以0结尾的字符串的指针
f 表示浮点数
st 表示一个数据结构

例:
hWinMain 主窗口句柄
dwTimeCount 时间计数器,以双字定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值