Tesla.Angela 发表于 2011-6-17 21:28:11

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

马大哈 发表于 2011-6-22 21:20:18

这很像MASM啊.

也有IF....ELSE....ENDIF

Tesla.Angela 发表于 2011-6-23 16:44:25

马大哈 发表于 2011-6-22 21:20 static/image/common/back.gif
这很像MASM啊.

也有IF....ELSE....ENDIF

这个可能是FASM!!

马大哈 发表于 2011-6-25 15:08:52

没听过.....不过我认为MASM已经很好用了,嘿嘿.

musehero 发表于 2012-6-20 08:08:37

呵,是我~~ 没事儿会在各论坛溜一溜~ 不过,潜水时居多~~

musehero 发表于 2012-6-10 21:53:24

汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空间不够,在调用某些特殊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时,只需要把程序中上面这个宏直接删除,其它哪里都不用动,就可以直接用官方的。

Tesla.Angela 发表于 2012-6-10 22:15:25

musehero 发表于 2012-6-10 21:53 static/image/common/back.gif
汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空 ...

您就是狙剑作者本人吗???

gfw 发表于 2012-6-13 01:06:53

musehero
被360挖走了

kk1025 发表于 2013-4-11 09:34:22

M。。。看不太懂
页: [1]
查看完整版本: MuseHero写的invoke宏