;*******************************************************************
; 将参数列表的顺序翻转
;*******************************************************************
reverseArgs macro arglist:VARARG
local txt,count
txt TEXTEQU <>
count = 0
for i,<arglist>
count = count + 1
txt TEXTEQU @CatStr(i,<!,>,<%txt>)
endm
if count GT 0
txt SUBSTR txt,1,@SizeStr(%txt)-1
endif
exitm txt
endm
;*******************************************************************
; 建立一个类似于 invoke 的 Macro
;*******************************************************************
_invoke macro _Proc,args:VARARG
local count
count = 0
% for i,< reverseArgs( args ) >
count = count + 1
push i
endm
call dword ptr _Proc
endm
;*******************************************************************
;*******************************************************************
; 将两个内存2传递给内存变量1
;*******************************************************************
m2m macro m1,m2
push m2
pop m1
endm
;*******************************************************************
; 带参数返回
;*******************************************************************
return macro arg
mov eax,arg
ret
endm
;*******************************************************************
; 压入有自定位的全局变量
;*******************************************************************
pushm macro arg
mov eax,[ebx + arg]
push eax
endm
;*******************************************************************
; 指针传递
;*******************************************************************
mp2m macro m1,m2
mov eax,m1
mov eax,[eax]
mov m2,eax
endm
;*******************************************************************
; EAX==0时跳转
;*******************************************************************
JEAXZ macro Destination
test eax,eax
je Destination
endm