找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 11536|回复: 8

MuseHero写的invoke宏

 火.. [复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-6-17 21:28:11 | 显示全部楼层 |阅读模式

  1. ;来自:www.x64asm.com
  2. ;------------------------------------------------
  3. ; 一个x64 invoke Macro --> MuseHero
  4. ;------------------------------------------------
  5. invoke                macro        _Proc,args:VARARG
  6.                 local        count
  7.                 LOCAL        stack
  8.                 LOCAL        rspL
  9.             count   = 0
  10.         rspL        = 8
  11. %        for        i,<args>                       
  12.                 rspL        = rspL + 8
  13.                 count        = count + 1
  14.         endm
  15.         if count GE 5
  16.                     sub rsp,rspL
  17.             ELSE
  18.                     rspL        = 0
  19.             endif
  20.         count        = 0
  21.         stack        = 0
  22. %        for        i,<args>                       
  23.                 count        = count + 1
  24.                 if count EQ 1
  25.                         mov rcx,i
  26.                 elseif count EQ 2
  27.                         mov rdx,i
  28.                 elseif count EQ 3
  29.                         mov r8,i
  30.                 elseif count EQ 4
  31.                         mov r9,i
  32.                 elseif count GE 5
  33.                         mov rax,i
  34.                         mov QWORD ptr [rsp+stack],rax
  35.                 endif
  36.                 stack = stack + 8
  37.         endm
  38.         call        _Proc
  39.         if rspL GE 1
  40.                 add rsp,rspL
  41.         endif   
  42. endm
复制代码

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-6-22 21:20:18 | 显示全部楼层
这很像MASM啊.

也有IF....ELSE....ENDIF
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2011-6-23 16:44:25 | 显示全部楼层
马大哈 发表于 2011-6-22 21:20
这很像MASM啊.

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


这个可能是FASM!!

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-6-25 15:08:52 | 显示全部楼层
没听过.....不过我认为MASM已经很好用了,嘿嘿.
我就是嗷嗷叫的老马了......

0

主题

7

回帖

0

精华

初来乍到

积分
25
发表于 2012-6-20 08:08:37 | 显示全部楼层
呵,是我~~ 没事儿会在各论坛溜一溜~ 不过,潜水时居多~~

0

主题

7

回帖

0

精华

初来乍到

积分
25
发表于 2012-6-10 21:53:24 | 显示全部楼层
汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空间不够,在调用某些特殊API时会导致覆盖,发个新的:
  1. ;------------------------------------------------
  2. ; 一个x64 invoke Macro
  3. invoke                macro        _Proc,args:VARARG
  4.                 local        count
  5.                 LOCAL        stack
  6.                 LOCAL        rspL
  7.                
  8.         rspL        = 0
  9. %        for        i,<args>                       
  10.                 rspL        = rspL + 20h
  11.         endm
  12.         if rspL EQ 0
  13.                 rspL = 20h
  14.                     sub rsp,rspL
  15.             elseif rspL GE 5
  16.                     sub rsp,rspL
  17.             endif
  18.    
  19.         count        = 0
  20.         stack        = 0
  21. %        for        i,<args>                       
  22.                 count        = count + 1
  23.                 if count EQ 1
  24.                         mov rcx,i
  25.                 elseif count EQ 2
  26.                         mov rdx,i
  27.                 elseif count EQ 3
  28.                         mov r8,i
  29.                 elseif count EQ 4
  30.                         mov r9,i
  31.                 elseif count GE 5
  32.                         mov rax,i
  33.                         mov QWORD ptr [rsp+stack],rax
  34.                 endif
  35.                 stack = stack + 8
  36.         endm
  37.         call        _Proc
  38.         add rsp,rspL
  39. endm
复制代码
另外,回楼上几位的,这是标准的MASM,那些个IF什么的只是伪指令而已~ 只是因为64位汇编器不支持invoke,才写了这个方便一些。以后出了官方版本的invoke时,只需要把程序中上面这个宏直接删除,其它哪里都不用动,就可以直接用官方的。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2012-6-10 22:15:25 | 显示全部楼层
musehero 发表于 2012-6-10 21:53
汗一个,在这里居然看到这个了,实在抱歉,这个发的有点早,在后期的使用中发现偶尔会出现问题,保留的栈空 ...

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

28

主题

116

回帖

0

精华

铜牌会员

积分
273
发表于 2012-6-13 01:06:53 | 显示全部楼层
musehero
被360挖走了

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-11 09:34:22 | 显示全部楼层
M。。。看不太懂
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表