MuseHero写的invoke宏
;来自:www.x64asm.com
;------------------------------------------------
; 一个x64 invoke Macro --> MuseHero
;------------------------------------------------
invoke macro _Proc,args:VARARG
local count
LOCAL stack
LOCAL rspL
count = 0
rspL = 8
% for i,<args>
rspL = rspL + 8
count = count + 1
endm
if count GE 5
sub rsp,rspL
ELSE
rspL = 0
endif
count = 0
stack = 0
% for i,<args>
count = count + 1
if count EQ 1
mov rcx,i
elseif count EQ 2
mov rdx,i
elseif count EQ 3
mov r8,i
elseif count EQ 4
mov r9,i
elseif count GE 5
mov rax,i
mov QWORD ptr ,rax
endif
stack = stack + 8
endm
call _Proc
if rspL GE 1
add rsp,rspL
endif
endm
这很像MASM啊.
也有IF....ELSE....ENDIF 马大哈 发表于 2011-6-22 21:20 static/image/common/back.gif
这很像MASM啊.
也有IF....ELSE....ENDIF
这个可能是FASM!! 没听过.....不过我认为MASM已经很好用了,嘿嘿. 呵,是我~~ 没事儿会在各论坛溜一溜~ 不过,潜水时居多~~ 汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空间不够,在调用某些特殊API时会导致覆盖,发个新的:;------------------------------------------------
; 一个x64 invoke Macro
invoke macro _Proc,args:VARARG
local count
LOCAL stack
LOCAL rspL
rspL = 0
% for i,<args>
rspL = rspL + 20h
endm
if rspL EQ 0
rspL = 20h
sub rsp,rspL
elseif rspL GE 5
sub rsp,rspL
endif
count = 0
stack = 0
% for i,<args>
count = count + 1
if count EQ 1
mov rcx,i
elseif count EQ 2
mov rdx,i
elseif count EQ 3
mov r8,i
elseif count EQ 4
mov r9,i
elseif count GE 5
mov rax,i
mov QWORD ptr ,rax
endif
stack = stack + 8
endm
call _Proc
add rsp,rspL
endm
另外,回楼上几位的,这是标准的MASM,那些个IF什么的只是伪指令而已~ 只是因为64位汇编器不支持invoke,才写了这个方便一些。以后出了官方版本的invoke时,只需要把程序中上面这个宏直接删除,其它哪里都不用动,就可以直接用官方的。 musehero 发表于 2012-6-10 21:53 static/image/common/back.gif
汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空 ...
您就是狙剑作者本人吗??? musehero
被360挖走了 M。。。看不太懂
页:
[1]